VBA如何创建ListObjects数组
我试图编写一个宏,遍历工作簿中的所有表,然后将每个表的名称以“TableName[#all]”的形式添加到数组中 请参阅下面不完整的代码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
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
谢谢,但“在这里做事”这部分才是我真正需要的。这并没有解决我的主要问题,即如何将这些表中的每一个添加到数组中。