Filedialog错误:类型不匹配
当我没有添加If-Else功能时,我的程序工作... If部分工作,它执行消息框。然而,其他部分没有工作...不知道为什么...错误是类型不匹配,它可能开始在这一行:设置wb2 = Workbooks.Open(FileToOpen) 在此先感谢您的帮助:)Filedialog错误:类型不匹配
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
是多余的 - 您可以将缩进级别减少一个。
的问题是If FileToOpen = False
一个比较有String
一个Boolean
文字和VBA(理所当然),不知道这应该如何评估:即是什么扔错配类型的错误。
GetOpenFileName
返回Variant
这是一个String
然后选择文件,或Boolean
当对话框被取消 - 因此,验证类型,而不是价值:
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
现在有用谢谢! –
还有更多关于它的信息@RachelChia https://msdn.microsoft.com/en-us/library/office/ff834966.aspx –
是'FileToOpen'宣布地方? '什么? –
作为字符串在上面声明,我没有显示 –
当你遇到类型不匹配错误时,知道涉及哪些类型有点相关。我建议你编辑你的问题,以包含所有涉及的声明该片段:给我们一个不错的[mcve] =) –