2016-05-26 6 views
2

Ich bekomme einen Grundfehler, wenn ich die Auswahl eines Ordners stornieren. Ich möchte nur Sub beenden, wenn ich die Abbrechen-Taste drücke.VBA - Fehler beim Abbrechen Getfolder vermeiden

enter image description here

Ich verwende den folgenden Code

Set recsFolder = fso.GetFolder(Functions.GetFolder("C:\")) 

Function GetFolder(strPath As String) 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: 
GetFolder = sItem 
Set Fldr = Nothing 
End Function 
+0

auf welcher Linie fallen Sie, wenn Sie auf debug klicken? –

+0

in der ersten Zeile – peetman

+0

ist, weil Sie recsFolder außer Funktion haben. Versuchen Sie es in die Funktion einzufügen und vergleichen Sie Fldr mit false? oder was auch immer es ist, wenn Sie auf Abbrechen drücken –

Antwort

0

Der Fehler passieren in

Set recsFolder = fso.GetFolder(Functions.GetFolder("C:\")) 

Weil Ihre Funktion GetFolder einen leeren String zurück, wenn Sie die Ordnerauswahl

abbrechen

QUick soluti auf, nur Ihre Logik dies ändern:

Dim strReturned As String 
strReturned = Functions.GetFolder("C:\") 

If strReturned <> "" Then 
    Set recsFolder = fso.GetFolder(strReturned) 
End If 

die Set recsFolder zu umgehen, wenn der Ordner

1

Ein Vorschlag aus einer der besten Quelle leer ist: http://www.cpearson.com/excel/browsefolder.aspx

Function BrowseFolder(Title As String, _ 
       Optional InitialFolder As String = vbNullString, _ 
       Optional InitialView As Office.MsoFileDialogView = msoFileDialogViewList)_ 
       As String 
    Dim V As Variant 
    Dim InitFolder As String 
    With Application.FileDialog(msoFileDialogFolderPicker) 
     .Title = Title 
     .InitialView = InitialView 
     If Len(InitialFolder) > 0 Then 
      If Dir(InitialFolder, vbDirectory) <> vbNullString Then 
       InitFolder = InitialFolder 
       If Right(InitFolder, 1) <> "\" Then 
        InitFolder = InitFolder & "\" 
       End If 
       .InitialFileName = InitFolder 
      End If 
     End If 
     .Show 
     On Error Resume Next 
     Err.Clear 
     V = .SelectedItems(1) 
     If Err.Number <> 0 Then 
      V = vbNullString 
     End If 
    End With 
    BrowseFolder = CStr(V) 
End Function 
0

ich gelesen habe alle deine Antworten und danke für sie, aber ich konnte sie nicht anwenden. Stattdessen habe ich die Fehlerbehandlung verwendet (von der ich weiß, dass ich sie vermeiden sollte, aber sie wird den Code nicht beschädigen).

 On Error GoTo ErrHandlr: 
    Set recsFolder = fso.GetFolder(Functions.GetFolder("C:\")) 
ErrHandlr: 
Exit Sub 
Verwandte Themen