Excel Filedialog错误:类型不匹配

Excel Filedialog错误:类型不匹配,excel,vba,Excel,Vba,当我没有添加If-Else函数时,我的程序可以工作。。。如果部分工作,则执行messagebox。但是,其他部分不起作用。。。不知道为什么。。。错误是类型不匹配,可能是从以下行开始的:Set wb2=Workbooks.Open(FileToOpen) 提前感谢您的帮助:) 在第一个分支中有一个Exit Sub,因此Else是多余的-您可以将缩进级别降低一级 问题是如果FileToOpen=False将字符串与布尔值文本进行比较,VBA(正确地)不知道该如何计算:这就是引发类型不匹配错误的原因

当我没有添加If-Else函数时,我的程序可以工作。。。如果部分工作,则执行messagebox。但是,其他部分不起作用。。。不知道为什么。。。错误是类型不匹配,可能是从以下行开始的:Set wb2=Workbooks.Open(FileToOpen) 提前感谢您的帮助:)


在第一个分支中有一个
Exit Sub
,因此
Else
是多余的-您可以将缩进级别降低一级

问题是
如果FileToOpen=False
字符串
布尔值
文本进行比较,VBA(正确地)不知道该如何计算:这就是引发类型不匹配错误的原因

GetOpenFileName
返回一个
变量
,该变量是
字符串
,然后在取消对话框时选择一个文件或一个
布尔值
——因此,验证类型而不是值:

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

FileToOpen
是否在任何地方声明
As
what?As字符串声明在顶部,我没有显示它,当您遇到类型不匹配错误时,了解所涉及的类型有点相关。。我建议您的问题包括该代码段中涉及的所有声明:给我们一个nice=)还有“它可能是从这一行开始的”…您是否尝试过设置断点(F9)并调试代码,单步执行,弄清楚哪条指令抛出了类型不匹配?当我试图将
字符串
False
进行比较时,会发现类型不匹配。我不知道你是如何得到
Open
语句的。这里@RachelChia还有更多关于它的信息
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