2017-04-11 12 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 –