使用数据透视缓存的Excel。从录制的宏创建
我正在尝试创建一个透视表。使用record宏函数,我创建了一个小的pivot表,但是当我试图调整录制宏中的代码时,我得到了一个错误(类型不匹配) 录制的宏如下所示:使用数据透视缓存的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
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)