Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用数据透视缓存的Excel。从录制的宏创建_Excel_Excel 2010_Vba - Fatal编程技术网

使用数据透视缓存的Excel。从录制的宏创建

使用数据透视缓存的Excel。从录制的宏创建,excel,excel-2010,vba,Excel,Excel 2010,Vba,我正在尝试创建一个透视表。使用record宏函数,我创建了一个小的pivot表,但是当我试图调整录制宏中的代码时,我得到了一个错误(类型不匹配) 录制的宏如下所示: Sheets.Add ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "tadasEquities_20150223133033!R1C1:R780C71", Version:=xlPivotTableV

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

录制的宏如下所示:

    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))
工作表(“数据透视表”)是

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


正如您所见,我只调整SourceData和TableDestination,并使用工作表而不是Active工作簿。有人能告诉我我做错了什么吗?

您需要将
SourceData
TableDestination
作为
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
您所做的是在两个参数上传递
范围对象。

我们只是使用
范围对象地址属性
(返回字符串),将引用样式设置为
R1C1
,将外部设置为
True
,将工作表名称包含在地址中。
这将编译但未测试。HTH.

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

谢谢你的回答。但是,我仍然得到一个错误:对象不支持此属性或方法。此外,说明SourceData可以是范围对象:如果SourceType不是Xexternal,则SourceData参数是必需的。它可以是范围对象(当SourceType为xlConsolidation或xlDatabase时)或Excel WorkbookConnection对象(当SourceType为xlExternal时)。@Tadas我刚刚检查了您发布的代码,该代码可以工作。在该代码中,您在参数上传递了
String
。这是您尝试的唯一不同之处(在其中传递对象)。
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)