Excel VBA - 错误执行代码

时间:2016-12-22 10:16:55

标签: excel vba excel-vba

我使用Application.FileDialog(msoFileDialogFolderPicker)来选择文件夹。这是通过使用userform中的按钮执行的。但是,在用户选择文件夹之前,将创建一个新工作表。然后会弹出打开的文件对话框[Application.FileDialog(msoFileDialogFolderPicker)]。

Function SelectFolder(Optional msg As String) As String
Dim diaFolder As FileDialog

Set diaFolder = Application.FileDialog(msoFileDialogFolderPicker)
diaFolder.AllowMultiSelect = False
diaFolder.Title = msg
diaFolder.Show
On Error Resume Next
SelectFolder = diaFolder.SelectedItems(1)
On Error GoTo 0
Set diaFolder = Nothing
End Function

当用户决定取消选择文件夹时,会出现问题。发生这种情况时,应删除新创建的工作表。我试图使用错误处理程序,但现在好运。

ErrorHandler:
If SheetExists("MS") Then Application.Run "DeleteSheet.deleteSh1"
If SheetExists("MS2") Then Application.Run "DeleteSheet.deleteSh2"
If SheetExists("MT") Then Application.Run "DeleteSheet.deleteSh3"

Application.Run "HideSheets.hideSh"
Resume Next
Exit Sub

希望你们能对此有所了解。

2 个答案:

答案 0 :(得分:1)

为什么不在有效回复时创建工作表?

那就是说,你可以检查你要找的字符串的长度 - 0表示取消,即

Dim strResponse As String
strResponse = SelectFolder("test")
If Len(strResponse) = 0 Then
  MsgBox "user cancelled", vbCritical
  'delete sheet
End If

答案 1 :(得分:0)

我想上面的例程SelectFolder是以某种方式调用的,它首先创建一个工作表然后调用它。你可以实现这样的目标:

Sub MyButton_Click()
    Dim newWS as worksheet, folder as String
    set newWS = sheets.Add
    folder = SelectFolder("please select your folder")

    If folder = "" Then
       newWS.Delete
    Else
       ' ... proceed with the selected folder
    End If
End Sub

但是,在获得用户答案之前创建工作表似乎不是一种好的方法,除非有一些强有力的理由。