0

同じワークブックで次の作業を行っていますが、これを別のワークブックでサマリー シートを使用するにはどうすればよいですか?

Sub SummurizeSheets()
Dim ws As Worksheet

Application.ScreenUpdating = False
Sheets("Summary").Activate

For Each ws In Worksheets
    If ws.Name <> "Summary" Then
        ws.Range("D2:D6, D8:D15").Copy
        Worksheets("Summary").Cells(Rows.Count, 4).End(xlUp).PasteSpecial (xlPasteValues)
    End If
Next ws
End Sub
4

1 に答える 1

0
  1. サブルーチンはModuleではなく に 配置してThisWorkbookください。(VBA エディターから) ワークブック名​​を右クリックし、[挿入] > [モジュール] に移動して、新しいモジュールを挿入できます。
  2. 使用/参照するワークブックが開いていることを確認してください。
  3. ブックがすべて同じブック コレクションにあることを確認します。Excel の追加インスタンスを手動で作成しない限り、これは問題になりません。
  4. Workbooks()ワークシートの場合と同じように、オブジェクトを使用してワークブックを参照します。

    Sub test()
    
    
    Dim b2 As Workbook 'We will use this variable as a reference to the external workbook that contains the "Summary" worksheet.
    
    Set b2 = Excel.Workbooks("testbook2") 'We assign the external workbook (which I named "testbook2" for the purposes of this example) to our 'b2' variable.
    
    Dim ws1 As Worksheet
    Dim ws2 As Worksheet 'We will use these variables as references to the worksheets we're using.
    
    Set ws1 = Excel.ActiveSheet 'We set ws1 to equal our current sheet (which presumably is where you'll be copying data from).
    Set ws2 = b2.Worksheets("Summary") 'We set ws2 to equal the sheet (named "Summary") in the external workbook (named "testbook2").
    
    ws1.Range("D2:D6").Copy 'We copy the data from the active sheet, which we reference using our 'ws1' variable. 
    'Note: I had issues with using multiple ranges in the same object so I removed this from your code.
    ws2.Cells(Rows.Count, 4).End(xlUp).PasteSpecial xlPasteValues 'You only need to use the ws2 variable since we've already defined it as the "Summary" sheet you want.
    
    
    End Sub
    

最初のルールに従う理由はわかりませんがThisWorkbook、外部ブック参照と組み合わせて使用​​するときに問題が発生したことを覚えているようです。

アップデート

これを行う方法のより良い例を示すために、コードを編集しました。VBA で「アクティブ化」または「選択」コマンドを使用する必要はほとんどありません。変数を割り当てて、値を直接参照するだけです。

于 2013-10-21T21:52:31.360 に答える