如果File =" False" Application.GetOpenFileName错误13类型不匹配

时间:2016-03-01 15:17:50

标签: excel vba excel-vba macros

我正在处理使用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

1 个答案:

答案 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

Determining the Type of a Variant