2016-04-03 21 views
0

複数のXLSX/XLSシートをマスタワークブックの「temp」シートにインポートしようとしていますが、各ワークブックの内容は最後のエントリの後に追加する必要があります。Excel VBA - 複数のxlsxワークシートをインポートしてマスターワークブックシートに追加

これは1つのファイルでうまく動作しますが、選択したすべてのブックをループバックするロジックがうまくいかないようです。また、パフォーマンスとスピードを考慮して、選択したワークブックを選択した後に開くことをお勧めしますか、前のファイルのインポートが完了した後に開く必要がありますか?

ご協力いただきありがとうございます。

EDIT: もう少し正確に言えば、スクリプトの問題は、すべての開いているワークブックを見ている部分です。誰か提案?

For Each Workbooks In lngCount 

    With Workbooks 
     .Sheets(1).Cells.Copy Destination:=MasterWB.Sheets("temp").Range("A65536").End(xlUp).Offset(1, 0) 
     .Close False 
    End With 

Next 

全VBAコード:

Sub import_XLS() 
Dim wb As Workbook 
Dim lngCount As Long 

' speed up by turning screenupdating off 
    Application.ScreenUpdating = False 

' set workbooks 
    Set MasterWB = ActiveWorkbook 

    With ActiveWorkbook.Sheets("temp") 
     .Visible = True 
     .Cells.Delete 
    End With 

' Open the file dialog 
    With Application.FileDialog(msoFileDialogOpen) 
     .InitialFileName = "" 
     .Title = "Please select the converted User Activity files for import" 
     .Filters.Add "Excel Files", "*.xls; *.xlsx", 1 
     '.Filters.Add "Excel Files", "*.xls", 1 
     .AllowMultiSelect = True 

     If .Show = -1 Then 
      ' Open the files 
      For lngCount = 1 To .SelectedItems.Count 
       Workbooks.Open .SelectedItems(lngCount) 
      Next lngCount 

      Else 
       Exit Sub 
     End If 

    End With 

' open selected workbook in read only and copy all cells of worksheet 1 

For Each Workbooks In lngCount 

    With Workbooks 
     .Sheets(1).Cells.Copy Destination:=MasterWB.Sheets("temp").Range("A65536").End(xlUp).Offset(1, 0) 
     .Close False 
    End With 

Next 

' hide temp sheet, close workbook without saving changes and free memory 
    'MasterWB.Sheets("temp").Visible = False 
    'wb.Close False 
    Set wb = Nothing 

End Sub 
+0

あなたが本当に働いているコードを持ったのですか?私のVBEには、 'For Each Workbooks In lngCount'のようないくつかの"コンパイラ "エラーがあります。ここでは、コレクションや配列以外のものを繰り返し処理することはできません。また、モジュールの冒頭に 'Option Explicit'ステートメントを追加して、使用している各変数を宣言するようにしてください。少し余分な仕事はあなたにすべてのタイプのミスマッチを見つけて修正させることを報います – user3598756

+0

私は最初に「各ワークブックごとに」というステートメントがうまくいかないことを実際に述べました、なぜ私がここに助けを求めているのか:) – Armitage2k

+0

よく修正してデバッグするかもしれません私のコメントごとにあなたのコード。最終的にコードボックスで残っている可能性のある問題と一緒にそれを更新してください – user3598756

答えて

1
Dim wb As Workbook 
.... 

For Each wb In Workbooks 
    with wb 
     if .name <>MasterWB.Name 
     ....  
    end with 
Next wb 
+0

アクティブワークブック(MasterWB)を無視する方法はありますか?このソリューションでは、現在開かれているワークブックも「開かれた」とみなされます。 – Armitage2k

+0

編集を参照してください。 "現在アクティブなワークブック"に関する懸念をクリアしていません。これは前の 'For lngCount = 1 To .SelectedItems.Count'ループで最後に開いたものなので、対処する必要があります。 – user3598756

関連する問題