Filedialog错误:types不匹配

当我没有添加If-Elsefunction时,我的程序工作… If部分工作,它执行消息框。 然而,其他部分没有工作…不知道为什么…错误是types不匹配,它可能开始在这一行:设置wb2 = Workbooks.Open(FileToOpen)在此先感谢您的帮助:)

Dim FileToOpen As String Dim wb2 As Workbook Dim sheet As Worksheet FileToOpen = Application.GetOpenFilename _ (Title:="Please choose a Excel File to Open", _ FileFilter:="Excel Files *.xlsx(*.xlsx),") If FileToOpen = False Then MsgBox "No file selected", vbExclamation, "Sorry!" Exit Sub Else Set wb2 = Workbooks.Open(FileToOpen) Set sheet = wb2.Worksheets(1) sheet.UsedRange.Copy Destination:=ThisWorkbook.Worksheets(2).range("A1") Sheet1.range("B30").Value = FileToOpen Workbooks(2).Close End If 

您在第一个分支中有一个Exit Sub ,所以Else是多余的 – 您可以将缩进级别减less一个。

问题是, If FileToOpen = False比较一个StringBoolean文字,和VBA(正确)不知道这应该如何评估: 是抛出一个types不匹配的错误。

GetOpenFileName返回一个Variant ,它是一个String然后select一个文件,或者当对话框被取消时返回一个Boolean – 因此,validationtypes而不是值:

 Dim path As Variant path = Application.GetOpenFilename(Title:="Please choose a Excel File to Open", FileFilter:="Excel Files *.xlsx(*.xlsx),") 'path is Variant/Boolean if cancelled, Variant/String if valid. If VarType(path) = vbBoolean Then MsgBox "No file selected", vbExclamation, "Sorry!" Exit Sub End If Debug.Assert VarType(path) = vbString With Application.Workbooks.Open(path) .Worksheets(1).UsedRange.Copy ThisWorkbook.Worksheets(2).range("A1") Sheet1.range("B30").Value = path .Close End With