VBA - 创建工作簿中所有表名称的数组

VBA - 创建工作簿中所有表名称的数组

我的最终目标是有一个按钮,按下该按钮时会创建一个带有表格的新工作表..该新表格应添加到数据透视表向导列表中。

被调用的错误是

错误消息 1004 Worksheet 的 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").Select
Sheets("CE_Template").Copy After:=Sheets("Project Estimator")
ActiveSheet.Name = NewShop

If ActiveSheet.Name = "CE_Template" Then
    Exit Sub
Else
    Range("C4").Value = NewShop
    ActiveSheet.ListObjects(1).Name = NewShop
End If

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

Sheets("Project Estimator").Select
Range("A17").Select
ActiveSheet.PivotTableWizard SourceType:=xlConsolidation, SourceData:=MyArray

编辑:我之前的问题是如何将项目添加到数组中,这个问题现在已经解决了。谢谢。请查看新问题。

答案1

这将解决您的眼前问题,您需要在循环前添加此行:

ReDim MyArray(0 To 0)

当您Dim MyArray()创建一个没有索引的数组时,如果不先使用,就无法为其分配任何值ReDim

您还需要将ReDim循环中的 更改为ReDim Preserve。如果只是使用ReDim它,每次都会破坏数组内容。

相关内容