2017-04-11 19 views
1

If-Else関数を追加しなかった場合、私のプログラムは動作します。If Partが動作すると、メッセージボックスが実行されます。しかし、他の部分はうまくいきませんでした...考えられません...エラーは型の不一致で、おそらくこの行から始まります:Set 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は冗長です。インデントレベルを1つ下げることができます。

問題はIf FileToOpen = FalseリテラルBooleanStringを比較することで、VBA(当然)が、これは評価することになっている方法を知らない:ことは型の不一致エラーを投げているものです。

GetOpenFileNameStringあるVariantを返し、その後ダイアログがキャンセルされたときに、ファイルを選択するか、または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 –

関連する問題