我正在尝试创建一个数据透视表。使用记录宏功能我创建了一个小的数据透视表,但是当我尝试从录制的宏调整代码时,我得到一个错误(类型不匹配)。
录制的宏看起来如下:
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。有人能告诉我我做错了吗?
答案 0 :(得分:0)
您需要将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
你所做的是你在这两个论点上传递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)