2017-09-25 2 views
0

Ich versuche, den Pfad für einen Ordner mit der filedialog.show-Funktion zu erhalten.VBA FileDialog.Show startet neu

Die Frage, die ich bin vor ist:

  • Nachdem ich einen Ordner im folderpicking Fenster wählen Sie den Code nicht fortgesetzt. Es startet entweder neu oder es endet, ohne dass irgendetwas passiert.

Was könnte das Problem sein?

[...] 

Dim fpath As Variant 
Dim fldr As Object 
Set fldr = Application.FileDialog(msoFileDialogFolderPicker) 
fldr.Title = "Select a Folder" 
fldr.AllowMultiSelect = False 
fldr.InitialFileName = Application.DefaultFilePath 
If fldr.Show = -1 Then 
    fpath = fldr.SelectedItems(1) 
Else 
    GoTo NextCode 
End If 
NextCode: 
set fldr = Nothing 

[...] 
+0

Code funktioniert für mich. Der Fehler liegt wahrscheinlich in der Sektion, die Sie als '[...]' gezeigt haben, was es Ihnen ein bisschen schwer macht, Ihnen zu helfen. – YowE3K

Antwort

1

Es funktioniert, verwenden Sie es einfach nicht den Weg Ergebnis anzuzeigen (oder geben einen String Wert aus diesem Sub).

Code ändern:

If fldr.Show = -1 Then 
    fpath = fldr.SelectedItems(1) 
Else 
    GoTo NextCode 
End If 

NextCode: 
set fldr = Nothing 

An:

If fldr.Show = -1 Then 
    fpath = fldr.SelectedItems(1) 
    MsgBox fpath ' <-- for DEBUG 
End If 

Set fldr = Nothing 

Wenn Sie Ihren Code als Function verwenden möchten, die den Pfad des ausgewählten Ordners zurückgibt, unter den Code verwenden :

Function GetFolderPath() As String 

Dim fpath As Variant 
Dim fldr As Object 

Set fldr = Application.FileDialog(msoFileDialogFolderPicker) 
With fldr 
    .Title = "Select a Folder" 
    .AllowMultiSelect = False 
    .InitialFileName = Application.DefaultFilePath 

    If .Show = -1 Then 
     GetFolderPath = .SelectedItems(1) 
    End If 
End With  
Set fldr = Nothing 

End Function 

Und der Code, um es zu testen:

Sub Test() 

Dim FolderPath As String 

FolderPath = GetFolderPath 
MsgBox FolderPath 

End Sub 
+0

Offenbar funktioniert der Code in der Tat gut. Es war nur, dass ich den Debugging-Schritt benutzte und es ging verloren. Ich benutzte die MsgBox als Checkpoint und eine weitere Break-Zeile im Code und Everything verlief reibungslos. –