0

私は EXCEL (特に VBA) に非常に慣れていません。私は次のようなロジックを書き込もうとしています:

開いているすべてのブックに移動します。一部のブックに「Test」という名前のシートがある場合、名前付き範囲「Table」からデータを取得し、それをブック ALLDATABOOK のシート ALLDATA から Table1 に追加する必要があります。これを書きたいのですが、誰か助けてくれませんか?

これが私のコードです:

Private Sub CommandButton1_Click()
   Dim book As Object
    Dim lst As ListObject
   Dim iList As Worksheet
   For Each book In Workbooks

   For Each iList In book.Sheets
        If iList.Name = "Test" Then

        book.Sheets(iList.Name).Activate
Range("Table").Select


        End If
    Next

   Next
End Sub
4

1 に答える 1

1

これを試してください (Excel 2007+ 用に記述されているため、以前のバージョンでは機能しない可能性があります)

Private Sub CommandButton1_Click()
    Dim book As Workbook
    Dim lst As ListObject
    Dim iList As Worksheet
    Dim Rng As Range

    Dim wbAllDataBook As Workbook
    Dim shAllData As Worksheet

    ' Get reference to ALLDATA table
    Set wbAllDataBook = Workbooks("ALLDATABOOK.xlsm")  '<-- change to suit your file extension
    Set shAllData = wbAllDataBook.Worksheets("ALLDATA")
    Set lst = shAllData.ListObjects("Table1")

    For Each book In Workbooks
        ' Use error handler to avoid looping through all worksheets
        On Error Resume Next
        Set iList = book.Worksheets("Test")
        If Err.Number <> 0 Then
            ' sheet not present in book
            Err.Clear
            On Error GoTo 0
        Else
            ' If no error, iList references sheet "Test"
            On Error GoTo 0
            ' Get Reference to named range
            Set Rng = iList.[Table]
            ' Add data to row below existing data in table.  Table will auto extend
            If lst.DataBodyRange Is Nothing Then
                ' Table is empty
                lst.InsertRowRange.Resize(Rng.Rows.Count).Value = Rng.Value
            Else
                With lst.DataBodyRange
                    .Rows(.Rows.Count).Offset(1, 0).Resize(Rng.Rows.Count).Value = Rng.Value
                End With
            End If
        End If
    Next
End Sub

アップデート:

Excel 2003 で使用するには

If lst.DataBodyRange Is Nothing Then

If Not lst.InsertRowRange Is Nothing Then
于 2012-09-20T08:59:27.607 に答える