我使用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
希望你们能对此有所了解。
答案 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
但是,在获得用户答案之前创建工作表似乎不是一种好的方法,除非有一些强有力的理由。