用于创建数据透视表的Run-rime错误438

时间:2018-01-08 16:11:34

标签: excel vba excel-vba

我尝试根据数据的一致位置创建一个宏来创建数据透视表。但是,我正努力克服这一初步挑战。我一直在关注创建数据透视表宏的指南,但错误438始终结束宏。代码看起来应该可行,但我无法弄清楚它为什么没有。

Sub StockAdjustmentPivot()

Dim myFirstRow As Long
Dim myLastRow As Long
Dim myFirstColumn As Long
Dim myLastColumn As Long

Set sht = ActiveSheet

Dim mySourceData As String
Dim myDestinationRange As String

Dim myPivotTable As PivotTable

myDestinationRange = sht.Range("T5").Address(ReferenceStyle:=xlR1C1)

myFirstRow = 1
myLastRow = sht.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
myFirstColumn = 1
myLastColumn = 11

With sht.Cells
    mySourceData = .Range(.Cells(myFirstRow, myFirstColumn), .Cells(myLastRow, myLastColumn)).Address(ReferenceStyle:=xlR1C1)
End With

Set myPivotTable = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="STOCK ADJUSTMENTS REPORT!" & mySourceData).CreatePivotTables(TableDestination:="STOCK ADJUSTMENTS REPORT!" & myDestinationRange, DefaultVersion:="PivotTable1")

End Sub

出现错误的行如下:

Set myPivotTable = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="STOCK ADJUSTMENTS REPORT!" & mySourceData).CreatePivotTables(TableDestination:="STOCK ADJUSTMENTS REPORT!" & myDestinationRange, DefaultVersion:="PivotTable1")

我在继续详细说明数据透视表之前尝试解决此问题。

感谢。

修改

根据指导原则,我已将代码拆分为更易于管理的大小:

Dim cache As PivotCache

Set cache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="STOCK ADJUSTMENTS REPORT!" & mySourceData)

Set myPivotTable = cache.CreatePivotTable(TableDestination = "STOCK ADJUSTMENTS REPORT!" & myDestinationRange, TableName:="PivotTable1")

但是,我不认为正在定义缓存变量。运行此操作会出现以下错误: 运行时错误5:无效的过程调用或参数。

1 个答案:

答案 0 :(得分:1)

TL; DR:你有一个错字。将WHERE filmat.cmimi > 400更改为CreatePivotTables

你只有一条指令可以做很多事情:

CreatePivotTable

正在访问Set myPivotTable = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="STOCK ADJUSTMENTS REPORT!" & mySourceData).CreatePivotTables(TableDestination:="STOCK ADJUSTMENTS REPORT!" & myDestinationRange, DefaultVersion:="PivotTable1") 的数据透视缓存集合,使用它来创建新的数据透视缓存,并使用它来创建数据透视表。

Excel ActiveWorkbook没有PivotCache成员 - 因此,对象不支持此属性或方法

将其拆分,并使用正确声明的变量。

CreatePivotTables

如果可以,那么您可以使用它来创建数据透视表 - 如果工作,至少现在您知道哪个部分失败了(您对单个指令的填充越多) ,指令变得越难调试):

Dim cache As PivotCache
Set cache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="STOCK ADJUSTMENTS REPORT!" & mySourceData)

注意在Dim pivot As PivotTable Set pivot = cache.CreatePivotTable(TableDestination:="STOCK ADJUSTMENTS REPORT!" & myDestinationRange, DefaultVersion:="PivotTable1") 之后输入.点时VBE为您提供的就地下拉(“IntelliSense”):听取编辑告诉您的内容将避免这种情况错字。