2016-05-26 20 views
2

フォルダの選択をキャンセルすると基本エラーが発生します。キャンセルボタンを押したときにExit Subにしたいだけです。VBA - getfolderをキャンセルするとエラーが発生しない

enter image description here

私はエラーが

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

に起こる次のコード

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

デバッグをクリックすると、どのラインが下がりますか? –

+0

最初の行に – peetman

+0

その関数のrecsFolderがあるためです。関数に挿入しようとすると、Fldrをfalseと比較しますか?キャンセルを押すと –

答えて

0

を使用していますので、フォルダの選択を解除する場合、空の文字列を返すGetFolderあなたの関数

クイックソルティ上の、ちょうどこれにあなたのロジックを変更します。

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

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

をフォルダが空の場合は最高のソースのいずれかから

1

に提案をSet recsFolderを回避するために:私が読んだ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

すべてのあなたの答えとそれらに感謝しますが、私はそれらを適用することができませんでした。代わりに私はエラー処理を使用しました(私は避けるべきですが、コードを損なうことはありません)。

 On Error GoTo ErrHandlr: 
    Set recsFolder = fso.GetFolder(Functions.GetFolder("C:\")) 
ErrHandlr: 
Exit Sub 
関連する問題