0

ワークブックのすべてのシートにある複数の書式設定されたテーブルを 1 つのメイン テーブルに統合しようとしています。

すべてのシートとテーブルをループする次の VBA があります。

Sub GatherTables()

Dim tbl As ListObject
Dim sht As Worksheet

For Each sht In ThisWorkbook.Worksheets
    sht.Activate
    If sht.Name = "Summary" Or sht.Name = "Consolidated" Then
        'do nothing
    Else
        For Each tbl In sht.ListObjects
            Range(tbl.Name).Select
            Selection.Copy
            'do something with it
        Next tbl
    End If
Next sht

End Sub

そのコードを実行すると、Range(tbl.Name).Select 行でランタイム 1004 エラーが発生します。

私の問題は、最初にシートを選択しないと範囲を選択できないため、「sht.Activate」という行だと思いました。悲しいかな、運が悪い。

次に、tbl が listobject だったために型が間違っているのではないかと考えたので、一時的な文字列変数を使用して、最初に tbl.name を保存し、それを range(tempvariable).select で使用してみました。

また、テーブルの名前をハードコーディングしようとしました:range( "tablename").select、しかしそれもうまくいきませんでした...

私はそれが単純なことを知っていますが、私はハングしているので、誰かが私が欠けているものを説明できますか?

4

1 に答える 1

2

I would normally refer to a ListObject table in the following way:

Sub GatherTables()

Dim tbl As ListObject
Dim sht As Worksheet

For Each sht In ThisWorkbook.Worksheets
    sht.Activate
    If sht.Name = "Summary" Or sht.Name = "Consolidated" Then
        'do nothing
    Else
        For Each tbl In sht.ListObjects
            ActiveSheet.ListObjects(tbl.Name).Range.Select
            Selection.Copy
            'do something with it
        Next tbl
    End If
Next sht

End Sub
于 2015-07-01T09:37:58.723 に答える