2016-07-05 9 views
0

新しいブックのフォルダからブックをマージしようとしました。 VBAコードは、フォルダからExcelファイルを読み込み、すべてのファイル名をリストボックスに追加し、「開始」ボタンを押した後、非常にファイルをブックに追加します。それがアイデアです。ファイルを開くときにファイル名が空です。

コードはfolows通りである:このとき

Private Sub UserForm_Activate() 
    Const strFolder As String = "C:\Users\user\Desktop\tmp\" 
    Const strPattern As String = "*.xls" 
    Dim strFile As String 
    Dim collection As New collection 
    Dim i As Integer 
    Dim isMerger As Integer 
    Dim lngth As Integer 

    strFile = Dir(strFolder & strPattern, vbNormal) 
    If (StrComp(strFile, "FileMerger.xls") <> 0) Then 
     If (Len(strFile) <> 0) Then 
      col.Add (strFolder & strFile) 
      Do While Len(strFile) > 0 
       strFile = Dir 
       If (StrComp(strFile, "FileMerger.xls") <> 0) Then 
        If (Len(strFile) <> 0) Then 
         col.Add (strFolder & strFile) 
        End If 
       End If 
      Loop 
     End If 
    End If 
    Vars.xlsFiles = ColToArray(collection) 
    For i = 1 To UBound(Vars.xlsFiles) 
     lstFiles.AddItem (Vars.xlsFiles(i)) 
    Next i 
End Sub 

リストボックス: ファイルを開くとき、ユーザーフォームが表示されている:

Private Sub Workbook_Open() 
    UserForm1.Show 
End Sub 

ユーザーフォームを活性化すると、リストボックスが取り込まれ配列Vars.xlsFilesが入力されます。オッケー。ユーザーフォームの[スタート]ボタンを

クリック:フォルダで

Private Sub cmdStart_Click() 
    Dim fileName As String 
    Dim sheet As Worksheet 
    Dim i As Integer 
    Dim ub As Integer 

    ub = UBound(Vars.xlsFiles) 
    For i = 1 To ub 
     Workbooks.Open fileName:=Vars.xlsFiles(i), ReadOnly:=True 
     For Each sheet In ActiveWorkbook.Sheets 
      sheet.Copy After:=ThisWorkbook.Sheets(1) 
     Next sheet 
     Workbooks(fileName).Close 
    Next i 
End Sub 

3つのファイルです。それらの名前はリストボックスにあります。しかし、最初にクローズするときにエラーメッセージが表示され、デバッグ後にfileName = ""(行ワークブック(ファイル名)。閉じる)が表示されます。 試してみても同じエラーが表示されます。つまり、fileName = ""です。 どうすればよいですか?

+0

を使用するためにいくつかのユニークな名前を使用して、私は次の行を追加します。エラーメッセージは言う:「ランタイムエラー(9)インデックスが有効範囲にありません。」。 –

答えて

1

FileName:=は、Workbooks.Openメソッドの名前付きパラメータです。 cmdStart_ClickのfileName変数の値は設定されません。

Private Sub cmdStart_Click() 
    Dim fileName As String 
    Dim sheet As Worksheet 
    Dim i As Integer 
    Dim ub As Integer 

    ub = UBound(Vars.xlsFiles) 
    For i = 1 To ub 
     fileName = Vars.xlsFiles(i) 
     Workbooks.Open FileName:=fileName, ReadOnly:=True 
     For Each sheet In ActiveWorkbook.Sheets 
      sheet.Copy After:=ThisWorkbook.Sheets(1) 
     Next sheet 
     Workbooks(fileName).Close 
    Next i 
End Sub 
+0

fileName変数の値を初期化していません。 – user1590217

1

あなたは変数fileNameを設定したことがないので、それはまだデフォルト値""です。あなたはWorkbooks.OpenメソッドのfileName:=Vars.xlsFiles(i)によって混乱しているかもしれません。それはその方法のオプションFileNameを設定するだけです。混乱を避けるためとVars.xlsFiles(i)に設定するか、

Workbooks(Vars.xlsFiles(i)).close 
関連する問題