VBA – Einen Ordner auswählen und ihn als Pfad für einen separaten Code referenzieren

StackOverflow https://stackoverflow.com//questions/25087412

  •  02-01-2020
  •  | 
  •  

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.

War es hilfreich?

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 Funktion und referenzieren Sie sie dann:

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top