2016-03-01 287 views
2

我正在处理使用Application.GetOpenFileName的代码。我试图确保如果有人在选择文件时取消取消,代码不会中断。我有一个if语句,指出如果file =“false”,则显示一个msgbox和exit sub。这在没有选择文件时工作正常,但是当我使用所选文件运行宏时,出现类型不匹配错误。我曾尝试了一系列不同的周转方式,但都没有奏效。我在这里看过其他类似的问题,但没有为我工作。如果File =“False”Application.GetOpenFileName错误13类型不匹配

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

'如果不是IsArray的(文件),那么如果文件= “假” 退出sub' ??? –

回答

2

当它有文件时,它返回一个包含数组的变体。 Debug.Print VarType(file)返回8204.所以你需要检查数组的文件名。如果用户选择取消,那么变体将是一个布尔值。

If VarType(file) = 11 Then 
    MsgBox "No File Selected" 
    Exit Sub 

或者更可读的(由于德克赖歇尔):

If Not IsArray(file) Then 
    MsgBox "No File Selected" 
    Exit Sub 

Determining the Type of a Variant

+0

如果用户点击取消,不确定是否需要msgbox。他们的意图不明显吗? “当然,我没有选择一个文件,我不想。” –

+0

不会'isarray'是更容易理解的选项吗? (在这种情况下,这是他所需要知道的) –

+0

当然。但OP正试图检查一个取消,所以我让它检查一个布尔值。要么工作正常,虽然承认我的不太可读。 –