VBA如何创build一个ListObjects数组

我试图写一个macros,通过工作簿中的所有表,然后将每个表的名称以“TableName [#All]”的forms添加到数组。

请参阅下面的不完整代码

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 

另外,如果你打算使用表格,我会推荐这个网站。 http://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables

答案是:

 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