【问题标题】:Does creating a pivotTable in VBA have a limit on number of source rows?在 VBA 中创建数据透视表是否对源行数有限制?
【发布时间】:2014-07-11 15:35:21
【问题描述】:

我已经设法创建了一个宏,它从一些示例源数据(大约 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 pivotTables 的某种 VBA 构造函数的硬限制?

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

【问题讨论】:

  • 当您回放录制的宏时,您可能会尝试创建一个与您在录制代码时创建的表同名的表。如果您之前没有删除它,可能会导致错误。
  • 感谢蒂姆的回复,但我认为这不是问题所在。我有一张数据表,当我在该新表上创建一个新表和数据透视表时,我开始记录。然后我删除了工作表并运行了录制的宏。它创建了工作表,但在创建数据透视表时失败

标签: excel pivot-table vba


【解决方案1】:

我也遇到过这个问题,我的解决方法是在创建数据透视缓存时提供 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"))

【讨论】:

    猜你喜欢
    • 2018-03-29
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    相关资源
    最近更新 更多