2017-12-06 2 views
1

Ich muss ein Makro erstellen, das ein Excel-Dokument als PDF-Datei auf dem Desktop eines beliebigen Benutzers speichert (d. H. Mehrere Personen werden dieses Dokument/Makro verwenden).Makro, um Excel Doc als PDF für alle Benutzer zu exportieren

Hier ist VBA Code, den ich bisher habe:

Sub CreatePDF() 
' 
' CreatePDF Macro 
' 

' 
    ChDir "C:\Users\Public\Desktop" 
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
     "C:\Users\Public\Desktop\QuickView Update Dec_2017.pdf", Quality:= _ 
     xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ 
     OpenAfterPublish:=True 
End Sub 

Ich denke, das Problem mit dem Verzeichnis ist es (in den Fällen zu rettende wo dieser Code „Public“ im Dateipfad sagt, es hatte geändert das von meinem Benutzernamen, der anfänglich ausgefüllt wurde).

Kennt jemand eine Möglichkeit, einen allgemeinen Pfad anzugeben, um dieses Dokument als PDF auf dem Desktop eines beliebigen Benutzers zu speichern?

Antwort

0

Ich habe nicht getestet, sondern auf das, was Sie versuchen gab:

Dim url As String 
url = Application.DefaultFilePath & "\" & ActiveWorkbook.Name & ".xls" 

im Export Teil des Codes Dateinamen ersetzen: = bla bla Dateiname: = url

1

Sie Umgebung verwenden können Variablen. %USERPROFILE%\Desktop sollte in diesem Fall funktionieren.

Hier ist eine Liste von Umgebungsvariablen. https://en.wikipedia.org/wiki/Environment_variable#Default_Values

Zugriff auf Umgebungsvariablen mit VBA: Environ Function code samples for VBA

In VBA können Sie es zu Environ("USERPROFILE") & "\Desktop" übersetzen Diese ungetestet ist als Ich verwende Windows nicht.

+0

Das funktioniert aber könnten Sie mir bitte sagen, dass, wie Dateinamen in der oberen Zeile geben –

+0

fügen Sie ihn einfach auf den Pfad wie gewohnt . Z.B. "\ Desktop \ Ihre_Datei.pdf" – Matts

2

Verwenden Sie .specialfolders("Desktop") zum Speichern auf dem Desktop.Auf einen String-Variable und fügen den Pfad Separators

Beispiel

Option Explicit 
Sub CreatePDF() 
    Dim FilePath As String 

    FilePath = CreateObject("WScript.Shell").specialfolders("Desktop") 

    Debug.Print FilePath 

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ 
        FileName:=FilePath & "\" & "QuickView Update Dec_2017.pdf", _ 
        Quality:=xlQualityStandard, _ 
        IncludeDocProperties:=True, _ 
        IgnorePrintAreas:=False, _ 
        OpenAfterPublish:=True 

End Sub 

The following special folders are available:

  • AllUsersDesktop

  • AllUsersStartMenu

  • AllUsersPrograms

  • AllUsersStartup

  • Desktop-

  • Favoriten

  • Fonts

  • MyDocuments

  • NetHood

  • Druckumgebung

  • Programme

  • Aktuelle

  • SendTo

  • StartMenu

  • Startup

  • Vorlagen

Die Special Eigenschaft einen leeren String zurück, wenn der angeforderte Ordner (strFolderName) nicht zur Verfügung steht. Beispielsweise hat Windows 95 keinen AllUsersDesktop-Ordner und gibt eine leere Zeichenfolge zurück, wenn strFolderNameis AllUsersDesktop ist.

Hier ist ein weiteres Beispiel https://stackoverflow.com/a/31694603/4539709