在VBA中创建数据透视表对源行数有限制吗?

问题描述 投票:0回答:2

我已经成功创建了一个宏,它可以从一些示例源数据(大约 20 行)创建数据透视表和数据透视图,这一切都工作正常。

但是,当我使用一个月的示例数据(大约 215,000 行)时,我突然在创建数据透视表的行中收到错误“类型不匹配”。

t1wkb.PivotCaches.Create(SourceType:=xlDatabase, 
SourceData:=currentsht.Range("A1").CurrentRegion, _
Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:="[" & t1wkb.Name & "]"
& wsNew.Name & "!R1C1", TableName:="PivotTableName", _
DefaultVersion:=xlPivotTableVersion14

奇怪的是,我可以从大型数据集中手动创建一个数据透视表,记录该过程并在 excel 中回放该过程会给我带来错误。

有谁知道这是否是我的代码的问题,或者我是否达到了 Excel 数据透视表的某种 VBA 构造函数的硬限制?

感谢您对这个问题的任何启发, 大卫

excel pivot-table vba
2个回答
2
投票

我也遇到了这个问题,我的解决方法是在创建数据透视缓存时提供 SourceData 值时使用

string
而不是
range
。我能够通过这种方式制作大约 70K 行的数据透视表。

我的VBA代码如下。

Dim pvt_source_worksheet As Worksheet
Dim pvt_destination_worksheet As Worksheet

Dim last_cell_range As Range
Dim source_range_string As String

Set pvt_source_worksheet = ThisWorkbook.Worksheets(yourworksheet)
Set pvt_destination_worksheet = ThisWorkbook.Worksheets(destination worksheet)

Set last_cell_range = pvt_source_worksheet.Range("A1").SpecialCells(xlCellTypeLastCell)
source_range_string = pvt_source_worksheet.Name & "!R1C1:R" & last_cell_range.Row & "C" & last_cell_range.Column

'Create pivot cache

Set pvt_cache = ThisWorkbook.PivotCaches.Create( _
                SourceType:=xlDatabase, _
                SourceData:=source_range_string)

'Create pivot table

Set pvt_tbl = pvt_cache.CreatePivotTable( _
                TableDestination:=pvt_destination_worksheet.Range("A1"))

0
投票

限制涉及传递 Range 对象时的行数。最大数量为 64K。 我使用字符串将超过 100K 行传递到数据透视表。

© www.soinside.com 2019 - 2024. All rights reserved.