2017-12-19 3 views
0

Ich bin sehr neu in Visual BasicErstellen Sie ein Ordner-Verzeichnis in Excel Visual Basic

Ich bin derzeit versucht, einen Rechner in Excel zu erstellen, die ich die Daten in zu einem PDF exportieren. Ich konnte das Excel-Dokument exportieren, aber es geht nur zu meinem "D: \".

Wie erstelle ich einen Ordner in D: \ genannt etwas wie Excel_Calculator wo kann ich alle PDF-Dateien erstellt & direkt in diesem Ordner gespeichert werden, wenn bereits ein Ordner „Excel_Calculator“ zu verwenden, um diesen Ordner statt Überschreiben genannt ist der vorhandene Ordner.

Sub GetFilenameForPDF() 
Dim strFileName As String, strB1 As String, strWorksheet As String 


strB1 = Range("B1").Value 
strWorksheet = ActiveSheet.Name 
strFileName = strB1 & " " & strWorksheet & " " & Format(Date, "DD-MM-YYYY") 




Sub SaveToPDF() 

Dim strFileName As String, strC3 As String, strWorksheet As String 
strB1 = Range("B1").Value 
strWorksheet = ActiveSheet.Name 
strFileName = strB1 & " " & strWorksheet & " " & Format(Date, "DD-MM-YYYY") 

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
    "D:\" & strFileName & ".pdf", _ 
    Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
    :=False, OpenAfterPublish:=True 
    End Sub 

** EDIT:

Der Code, den ich für das Speichern der PDF haben, ist hier aufgelistet Oder ist es eine Möglichkeit, die Dateien in ein temporäres Verzeichnis erstellen oder umleiten können, so dass der Ordner nicht ist verstopft und kann der Benutzer drucken/die PDF speichern, wenn nötig? **

+1

'MkDir (" D: \ afolder ")' –

+0

@ JeremyThompson Ich habe das versucht - konnte es nicht funktionieren. Wo würde ich diese Codezeile einfügen? Weil ich am Anfang, am Ende und dazwischen versucht habe ... – sam

+1

Wenn du das versucht hast und es fehlgeschlagen ist, beschreibe den Fehler, den du hast, und zeige uns den minimalen Code, der benötigt wird, um das Problem zu reproduzieren. Siehe [MCVE]. –

Antwort

0

ich das Filesystem lieber mit

in Ihrem VBA-Projekt, klicken Sie auf Toos-> Verweise und fügen Sie „Microsoft Scripting Runtime“.

Dann im Code, so etwas wie:

Dim fso as FileSystemObject 
Dim folderName as String 

Set fso = new FileSystemObject 
folderName = "D:\MyFolder" 
If fso.FolderExists(folderName) = false then 
    fso.CreateFolder folderName 
End If 

Dim strFileName As String, strC3 As String, strWorksheet As String 
strB1 = Range("B1").Value 
strWorksheet = ActiveSheet.Name 
strFileName = folderName + "\" + strB1 & " " & strWorksheet & " " & Format(Date, "DD-MM-YYYY") 

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
"D:\" & strFileName & ".pdf", _ 
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas _ 
:=False, OpenAfterPublish:=True 
+0

Hallo, Danke für Ihre Antwort! Ich habe Ihren Code kopiert und es versucht - aber jetzt, wenn ich die Schaltfläche zum Exportieren in PDF drücken, erhalte ich einen VBA-Fehler mit dem Hinweis "Kompilierfehler: ungültige externe Prozedur" und fährt fort, das Wort "set" auf der vierten zu markieren Linie. Irgendwelche Ideen? – sam

+0

Ich habe auch versucht, die Unter Klammern um den Code und Verknüpfung dieser Unter mit dem Export in PDF-Taste hinzufügen Allerdings habe ich diesmal "Compile error: Methode oder Daten Mitglied nicht gefunden" und es markiert ".exists" und dann hervorgehoben sub save() in gelb [img] https://imgur.com/a/qkLb4 [/ img] – sam

+0

Das Fehlerproblem "Ungültige externe Prozedur" stammt von Ihrer vorherigen Subdatei GetFilenameForPdf(). Stellen Sie sicher, dass Sie End Sub haben, um dieses Sub zu schließen, d. H. Vor Sub SaveToPdf(). Ich sehe es nicht in Ihrer ursprünglichen Frage. – cbasah

0

können Sie die Funktion unter einem einzelnen Ordner oder Unterordner-Struktur zu erstellen. Die Funktion verwendet die Funktion (VBA.FileSystem) MkDir.

Public Function CreateFolderTree(ByVal mainFolder As String, ParamArray args() As Variant) As String 
    On Error GoTo ErrProc 

    Dim path As String 
     path = mainFolder & IIf(Right(mainFolder, 1) <> "\", "\", vbNullString) 

    Dim idx As Long 
    For idx = LBound(args) To UBound(args) 
     If Len(Dir(path & args(idx), vbDirectory)) = 0 Then MkDir path & args(idx) 
     path = path & args(idx) & "\" 
    Next idx 

    CreateFolderTree = path 

Leave: 
    On Error GoTo 0 
    Exit Function 

ErrProc: 
    MsgBox Err.Description, vbCritical 
    Resume Leave 
End Function 

es nennen:

Sub T() 
    Dim path_ As String 
     path_ = CreateFolderTree("C:\My folder", "Subfolder 1", "Subfolder 2") 

    Debug.Print path_ 

    'C:\My folder\Subfolder 1\Subfolder 2\ 
End Sub 
0

ich diese in der Regel verwenden:

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" (ByVal lpPath As String) As Long 

Public Sub MakeFullDir(strPath As String) 
    If Right(strPath, 1) <> "\" Then strPath = strPath & "\" 'Optional depending upon intent 
    MakeSureDirectoryPathExists strPath 
End Sub 

Wenn der Pfad nicht existiert bereits, sie schafft es, auch wenn es mehrere Schicht Nicht vorhandene Ordner.

Z. B: C: \ aFolder \ bFolder \ cFolder \ wenn nur aFolder dieser Eintrag existiert bFolder und cFolder machen.