VBA如何创建ListObjects数组

VBA如何创建ListObjects数组,vba,excel,Vba,Excel,我试图编写一个宏,遍历工作簿中的所有表,然后将每个表的名称以“TableName[#all]”的形式添加到数组中 请参阅下面不完整的代码 Sub NewShopPage() ' ' Macro that creates a duplicate sheet from a hidden template ' searches for every table in the workbook and then adds them to the ' PivotTableWizard. ' Dim New

我试图编写一个宏,遍历工作簿中的所有表,然后将每个表的名称以“TableName[#all]”的形式添加到数组中

请参阅下面不完整的代码

Sub NewShopPage()
'
' Macro that creates a duplicate sheet from a hidden template
' searches for every table in the workbook and then adds them to the
' PivotTableWizard.
'

Dim NewShop As Variant
NewShop = InputBox("What Shop are you creating a new estimate sheet for? (example: Shop 18)")

NewShop = Replace(NewShop, " ", "_")

Sheets("CE_Template").Copy After:=Sheets("Project Estimator")
ActiveSheet.Name = NewShop


ActiveSheet.ListObjects(1).Name = NewShop

Sheets("Project Estimator").Select
ActiveSheet.ListObjects(1).Select

Dim MyArray As Variant

    'HELP NEEDED HERE:
    'For each [Table] in [workbook]
    '    Add TableName + "[#All]" to MyArray
    'Next

ActiveSheet.PivotTableWizard SourceType:=xlConsolidation, SourceData:=MyArray


End Sub
我得出的结论是,它必须以这种方式运行,因为如果用户添加工作表,然后再将其删除,则数据透视表向导会出错

我不确定每次这样做是否会删除数据透视表的格式

Dim tbl As ListObject
For Each tbl In ActiveSheet.ListObjects
    'Do stuff to tbl here
Next tbl
另外,如果你打算大量使用表格,我会推荐这个网站

答案是:

Dim MyArray() As String
Dim ArraySize As Integer
Dim ws As Worksheet
Dim Tbl As ListObject

ArraySize = 0

ReDim MyArray(0 To 0)

For Each ws In ActiveWorkbook.Worksheets
    For Each Tbl In ws.ListObjects
        ReDim Preserve MyArray(ArraySize) As String
        MyArray(UBound(MyArray)) = Tbl.Name & "[#All]"
        ArraySize = ArraySize + 1
    Next Tbl
Next ws
谢谢,但“在这里做事”这部分才是我真正需要的。这并没有解决我的主要问题,即如何将这些表中的每一个添加到数组中。