【发布时间】:2020-01-06 15:36:52
【问题描述】:
我对 VBA 应用程序完全陌生,我有一些非常基本的问题。我正在创建一个用户表单,我需要能够提前退出其中一个潜艇。当我退出 GetOpenFilename 窗口而不选择任何工作簿并结束 sub 时,我根本不想出现调试错误。 其次,我无法获取GetOpenFilename对话框,以显示“所有文件”过滤器选择“所有文件”过滤器时显示所有其他可用的文件名(XLS,XLM,XLSX,XLSM)。我应该改变什么才能使其正常工作?
我尝试在 TempArray IsEmpty 时退出 sub,但由于某种原因它不起作用。
Private Sub cmdAddWorkbooks_Click()
'Variables declarations
Dim FileFilter As String
Dim FilterIndex As Long
Dim Title As String
Dim MultiSelect As Boolean
Dim WorkbookCounter As Long
Dim TempArray() As Variant
Dim SelectedWorkbooksTemp() As Variant
ReDim SelectedWorkbooksTemp(0 To 1, 0 To 1)
'Setting up GetOpenFilename parameteres
FileFilter = "Microsoft Excel Worksheet (*.xlsx),*xlsx," & _
"Microsoft Excel Worksheet with Macros (*.xlsm),*xlsm," & _
"Microsoft Excel 97-2003 Worksheet (*.xls),*xls," & _
"Microsoft Excel 97-2003 Worksheet with Macros (*.xlm),*xlm," & _
"All Files (.),."
FilterIndex = 5
Title = "Select Workbooks"
MultiSelect = True
'Using GetOpenFilename
On Error Resume Next
TempArray = Application.GetOpenFilename _
(FileFilter:=FileFilter, _
FilterIndex:=FilterIndex, _
Title:=Title, _
MultiSelect:=MultiSelect)
'exiting doesnt work
On Error GoTo 0
If IsEmpty(TempArray) Then End Sub
WorkbookCounter = UBound(TempArray)
ReDim SelectedWorkbooksTemp(1 To WorkbookCounter, 1 To WorkbookCounter)
For i = 1 To WorkbookCounter
SelectedWorkbooksTemp(i, 1) = TempArray(i)
SelectedWorkbooksTemp(i, 2) = Dir(TempArray(i))
Next i
结束子
【问题讨论】:
-
End Sub仅用作Sub的结束语。你需要的是Exit Sub。 -
有关更多信息,请阅读链接问题中已接受答案的后半部分。
-
我尝试在 TempArray IsEmpty 时退出 sub,但由于某种原因它不起作用。 -
IsEmpty在Variant子类型时返回True是Variant/Empty:对于不是Variant/Empty的任何东西,它总是False。不要使用IsEmpty来验证数组是否包含元素。为此使用UBound,在GetOpenFilename的情况下,On Error Resume Next在对话框被取消时吞下 type mismatch 错误。删除它,然后执行If VarType(tempArray) = vbBoolean Then Exit Sub- 如果对话框被取消,该函数返回False。 -
IOW 问题出在
IsEmpty,而不是Exit Sub。
标签: vba