Excel 使用 PivotCaches.Create 来自录制的宏

Excel using PivotCaches.Create from recorded macro

我正在尝试创建一个枢轴 table。使用记录宏功能我创建了一个小枢轴 table,但是当我尝试从记录的宏中调整代码时出现错误(类型不匹配)。

录制的宏如下所示:

    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "tadasEquities_20150223133033!R1C1:R780C71", Version:=xlPivotTableVersion14). _
        CreatePivotTable TableDestination:="Sheet52!R3C1", TableName:= _
        "PivotTable32", DefaultVersion:=xlPivotTableVersion14
    Sheets("Sheet52").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("PivotTable32").PivotFields("Research type")
        .Orientation = xlRowField
        .Position = 1
    End With

这是我调整的部分代码。

        Worksheets("Pivot Table").PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        rngData, Version:=xlPivotTableVersion14). _
        CreatePivotTable TableDestination:=Worksheets("Pivot Table").Cells(1, 1), TableName:= _
        "PivotTable", DefaultVersion:=xlPivotTableVersion14

rngData 定义为:

Set wsData = Worksheets(1)
Set rngData = wsData.Range(Worksheets(1).Cells(1, 1), Worksheets(1).Cells(downlast, rightlast))

工作表("Pivot Table")是

Worksheets.Add(After:=Worksheets(1)).Name = "Pivot Table"

其中 rightlast 和 downlast 是 table 的最后一个单元格。

如您所见,我只调整了 SourceData 和 TableDestination,并使用 Worksheets 而不是 ActiveWorkbook。有人能告诉我我做错了什么吗?

您需要像这样将 SourceDataTableDestination 作为 String 传递:

Worksheets("Pivot Table").PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    rngdata.Address(, , xlR1C1, True), Version:=xlPivotTableVersion14). _
    CreatePivotTable TableDestination:=Worksheets("Pivot Table").Cells(1, 1) _
    .Address(, , xlR1C1, True), TableName:="PivotTable", _
    DefaultVersion:=xlPivotTableVersion14

你所做的是在两个参数上都传递 Range Object
我们简单地使用 Range Object Address Property(其中 returns 一个字符串)并将引用样式设置为 R1C1 并将外部设置为 True 以在地址中包含工作表名称。
这编译但未经测试。 HTH.

对于 SourceData 和 TableDestination,我使用了以下两行。枢轴 table 现在运行良好。

dataSource = Worksheets(1).Name & "!" & Worksheets(1).Range(Cells(1, 1), Cells(downlast, rightlast)).Address(ReferenceStyle:=xlR1C1) 'Set the source data, you can make this dynamic if you want
destination = Worksheets(2).Name & "!" & Worksheets(2).Range("A1").Address(ReferenceStyle:=xlR1C1)