2017-04-11 108 views
1

当我没有添加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 
+0

是'FileToOpen'宣布地方? '什么? –

+0

作为字符串在上面声明,我没有显示 –

+0

当你遇到类型不匹配错误时,知道涉及哪些类型有点相关。我建议你编辑你的问题,以包含所有涉及的声明该片段:给我们一个不错的[mcve] =) –

回答

1

您在第一个分支中有一个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 
+0

现在有用谢谢! –

+0

还有更多关于它的信息@RachelChia https://msdn.microsoft.com/en-us/library/office/ff834966.aspx –