2014-11-22 52 views
0

我有一个代码来获取一个对话框来选择一个文件夹名称并显示用户选择的文件夹的名称。取消按钮应退出子

但在情况下,如果用户尝试选择取消,而不是文件夹路径和确定,然后将它抛出一个错误。

按我的意见,我用一个状态变量,发现在取消状态更改为-1.so我试图执行使用,如果条件来退出子是在评论部分的代码。

但是,这似乎并没有在选择一个文件夹的情况下工作时,部分评论中存在的代码。

没有它,它在选择文件夹中工作正常。

可能有人请帮助呢?它是一个分步,我错过了什么:(

sub abc() 
    Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker) 
     diaFolder.AllowMultiSelect = False 
     diaFolder.Title = "Select a folder then hit OK" 
     diaFolder.Show 
     'Status = diaFolder.Show 
     'If Status < 0 Then 
     'Exit Sub 
     'End If 
     a = diaFolder.SelectedItems(1) 

     MsgBox ("Folder selected is :" & a) 
    ens sub 
+2

如果(diaFolder.SelectedItems.Count <= 0)然后 MSGBOX 退出小组 结束如果 – dee 2014-11-22 13:02:28

+0

@dee谢谢:)它的工作 – user2075017 2014-11-22 13:15:58

+0

DEE,请创建一个答案,以便用户可以接受它,大家都知道这个问题就解决了。谢谢 – ruedi 2014-11-22 16:24:17

回答

4

记住,vbFalse = 0和vbTrue = -1。 换句话说点击“OK保存'将返回-1,并点击‘取消’将返回0

试试下面的代码:

Sub abc() 
    With Application.FileDialog(msoFileDialogFolderPicker) 
     .AllowMultiSelect = False 
     .Title = "Select a folder then hit OK" 
     If .Show = -1 Then 
      MsgBox ("Folder selected is :" & .SelectedItems(1)) 
     Else 
      Exit Sub 
     End If 
    End With 
End Sub 
0

如果没有选中的项目,* SelectedItems(1)*不前ist和Excel将返回一个错误。当用户按下取消按钮时会发生这种情况。

一种用于此解决方案是检查使用下面的结构多少项目被选择:( “未选择的文件夹”)

With Application.FileDialog(msoFileDialogFilePicker) 
    .AllowMultiSelect = False 
    'Optional: limits the user to choosing a single option. Necessary if you want to avoid an error because the user selected multiple files. 
    .Title = "Dialog Title" 'Changing the title is also Optional 
    .Show 
    If .SelectedItems.Count = 0 Then 
     MsgBox "Canceled by user" 'or just do nothing! 
    Else 
     MyVar = .SelectedItems(1) 
    End If 
    'Alternatively, "if .selecteditems.count = 1 then myvar = .selecteditems(1)" can be used 
End With