VBA – Einen Ordner auswählen und ihn als Pfad für einen separaten Code referenzieren
Frage
Ich kann diesen Code verwenden, um einen Ordner auszuwählen:
Sub ChooseFolder()
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = strPath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
GetFolder = sItem
Set fldr = Nothing
End Sub
Ich habe auch diesen Code, der funktioniert, wenn der Ordnerpfad fest codiert ist.Im Grunde gibt es mir eine Liste von Dateinamen und Dateipfaden, die ich später in einem separaten Abschnitt verwende.Derzeit habe ich den fest codierten Ordnerpfad auskommentiert und versuche, den Ordner jedes Mal mit dem obigen Code auszuwählen, damit er benutzerfreundlicher ist.
Private Sub btn_LeaveReport()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim i As Integer
'Create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")
'Get the folder object
'Set objFolder = objFSO.GetFolder("D:\Administration\Time Sheets")
Set objFolder = objFSO.GetFolder(ChooseFolder)
i = 3
'loops through each file in the directory and prints their names and path
For Each objFile In objFolder.Files
'print file name
Cells(i + 1, 2) = objFile.Name
'print file path
Cells(i + 1, 3) = objFile.Path
i = i + 1
Next objFile
End Sub
Allerdings bin ich mir nicht sicher, wie ich die beiden unterschiedlichen Codesätze zusammenarbeiten lassen kann.Ich vermute, der einzige Teil, den ich ändern muss, ist dieser:
Set objFolder = objFSO.GetFolder(ChooseFolder)
Ich habe es als „ChooseFolder“ (Ordner auswählen), was im Moment das Unterverzeichnis oben ist, aber das ist eindeutig nicht der richtige Weg.Ich habe es auch mit sItem versucht, aber das scheint nicht zu funktionieren.
Lösung
Nur um meinen Kommentar mit einer besseren Erklärung zu ergänzen, haben Sie es definiert ChooseFolder
als Sub.Subs geben keine Werte zurück.Sie verwenden es jedoch als Funktion, wenn Sie Folgendes tun:
Set objFolder = objFSO.GetFolder(ChooseFolder)
weil du das Ergebnis des Laufens übergibst ChooseFolder
an die BFS GetFolder
Funktion.
Was Sie tun müssen, ist eine Erklärung ChooseFolder
als eine Funktion.
Ersetzen Sie grundsätzlich Ihre ChooseFolder
Sub damit:
Function ChooseFolder() As String
Dim fldr As FileDialog
Dim sItem As String
Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
With fldr
.Title = "Select a Folder"
.AllowMultiSelect = False
.InitialFileName = strPath
If .Show <> -1 Then GoTo NextCode
sItem = .SelectedItems(1)
End With
NextCode:
ChooseFolder = sItem
Set fldr = Nothing
End Function
und es sollte dann das tun, was Sie erwarten.Der Rest Ihres Codes ist in Ordnung.
Andere Tipps
Make choosefolder () in eine