2017-11-30 6 views
0

VBAの新機能です。ダイアログボックスのキャンセル/終了ボタンがクリックされるたびにタイプミスマッチのエラーが発生します。エラーは、Application.GetOpenFileName行に表示されます。誰がここで間違っているのか分かっていますか?GetOpenFileNameマルチ選択:キャンセルをクリックするとTrueエラーが発生します。

Private Sub cmdBrowse_Click() 

Application.ScreenUpdating = False 

Dim i As Long, j As Long, iCheck As Long 
Dim fname() As Variant 

Dim wkbNameList As String, wkbNamePath As String 
Dim win As Window 

fname = Application.GetOpenFilename(filefilter:="Excel, *xlsx; *xlsm", MultiSelect:=True) 

If fname = "False" Then 
    Exit Sub 
End If 

For i = LBound(fname) To UBound(fname) 
    workbooks.Open Filename:=fname(i) 
    wkbNameList = wkbNameList & workbooks(i + 1).Name & vbCrLf 
    wkbNamePath = wkbNamePath & fname(i) & " , " 
Next i 

答えて

0

機能は、ファイルが選択されている場合、配列を返しますが、キャンセルしたときに文字列を返します/終了します!ここに私のコードです:(

おかげ

を私はいくつかの方法を試してみましたが、それらのどれも動作しません

を選択されている。この

Private Sub cmdBrowse_Click() 

    Application.ScreenUpdating = False 

    Dim i As Long, j As Long, iCheck As Long 
    Dim fname As Variant 

    Dim wkbNameList As String, wkbNamePath As String 
    Dim win As Window 

    fname = Application.GetOpenFilename(filefilter:="Excel, *xlsx; *xlsm", MultiSelect:=True) 
    If IsArray(fname) Then 'file selected 
     For i = LBound(fname) To UBound(fname) 
      Workbooks.Open Filename:=fname(i) 
      wkbNameList = wkbNameList & Workbooks(i + 1).Name & vbCrLf 
      wkbNamePath = wkbNamePath & fname(i) & " , " 
     Next i 
    ElseIf fname = "False" Then 'cancel/quit 
     Exit Sub 
    End If 
End Sub 
+0

関数はVariant型を返してみてください。1)文字列MultiSelectがfalseの場合、2)MultiSelectがtrueの場合は配列。3)ユーザーがキャンセルを押した場合のブール値。 –

+0

@Kostasチェックしましたか?これは私の発見ではありません。 – h2so4

+0

MSDN:https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-getopenfilename-method-excel –

関連する問題