我正在处理使用Application.GetOpenFileName的代码。我试图确保在选择文件时如果有人点击取消该代码并不会中断。我有一个if语句,表明file =" false"然后显示一个msgbox并退出子。这没有选择文件时工作正常,但是当我运行宏选择文件时,我得到一个类型不匹配错误。我尝试了一堆不同的解决方法,没有任何效果。我在这里看了其他类似的问题,但没有任何对我有用。
Dim nom As String
Dim wb1, wb2, wb3, wb4, wb5 As Excel.Workbook
Dim i, j, k, file As Variant
nom = ActiveWorkbook.Name
If CurDir() <> CurDir("J:") Then
ChDrive "J:"
ChDir "J:FEA Material Data"
End If
For i = 1 To 5
Application.ScreenUpdating = False
MsgBox ("Select Compound" & vbNewLine & vbNewLine & "If Data From Criterion, Select Loading Only" & vbNewLine & vbNewLine & "If Data From Alliance, Select All")
file = Application.GetOpenFilename( _
FileFilter:="Text Files (*.csv), *.csv", _
MultiSelect:=True)
If file = "False" Then
MsgBox "No File Selected"
Exit Sub
Else
counter = 1
While counter <= UBound(file)
Workbooks.Open file(counter)
counter = counter + 1
Wend
End If
more code
答案 0 :(得分:2)
如果有文件,则返回带有数组的变体。 Debug.Print VarType(file)
返回8204.因此您需要检查数组中的文件名。如果用户选择取消,那么Variant将是一个布尔值。
If VarType(file) = 11 Then
MsgBox "No File Selected"
Exit Sub
或更具可读性(感谢Dirk Reichel):
If Not IsArray(file) Then
MsgBox "No File Selected"
Exit Sub