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
比较一个String
与Boolean
文字,和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