2017-09-25 9 views
0

J'essaie d'obtenir le chemin d'accès pour un dossier en utilisant la fonction filedialog.show.VBA FileDialog.Show redémarre sous

La question que je suis confronté est:

  • Après avoir sélectionner un dossier dans la fenêtre folderpicking le code ne continue pas. Il redémarre ou se termine sans que rien ne se passe.

Quel pourrait être le problème?

[...] 

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

Le code fonctionne pour moi. La faute réside probablement dans la section que vous avez montrée comme [...] ', ce qui rend un peu difficile de vous aider. – YowE3K

Répondre

1

Il fonctionne, vous êtes tout simplement pas l'utiliser pour afficher le résultat du chemin (ou retourner une valeur String de cette Sub).

Changer votre code:

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

NextCode: 
set fldr = Nothing 

Pour:

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

Set fldr = Nothing 

Si vous voulez utiliser votre code comme Function qui retourne le chemin du dossier sélectionné, utilisez le code ci-dessous :

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 

Et le code Sub pour le tester:

Sub Test() 

Dim FolderPath As String 

FolderPath = GetFolderPath 
MsgBox FolderPath 

End Sub 
+0

Apparemment, le code fonctionne bien. C'était juste que j'utilisais le "pas dans" de débogage et il s'est perdu. J'ai utilisé le MsgBox comme point de contrôle et une ligne de rupture plus loin dans le code et tout s'est bien passé. –