Excel使用PivotCaches.Create从录制的宏

时间:2015-02-24 08:36:59

标签: excel-vba excel-2010 vba excel

我正在尝试创建一个数据透视表。使用记录宏功能我创建了一个小的数据透视表,但是当我尝试从录制的宏调整代码时,我得到一个错误(类型不匹配)。

录制的宏看起来如下:

    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))

工作表(“数据透视表”)是

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

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

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

2 个答案:

答案 0 :(得分:0)

您需要将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(返回一个字符串),参考样式设置为R1C1,外部设置为True,以便在地址中包含工作表名称。
这样编译但是未经测试。 HTH。

答案 1 :(得分:0)

对于SourceData和TableDestination,我使用了以下两行。数据透视表现在运作良好。

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)