2017-07-24 63 views
0

我想执行一个宏,它基本上是从一个动态范围创建一个数据透视表,然后利用这些数据。Excel VBA数据透视表缓存方法错误

枢轴表保持在片材,每宏执行它一次删除所述枢轴表在于片材,然后更新数据范围,并用新范围再次生成数据透视表。

但是,尝试生成缓存部分代码导致错误:

"Invalid procedure call or argument".

起初,它失败了,所以我加了一块刷新现有的(我是这么认为的)高速缓存。但我仍然收到提到的错误。

代码如下。

Sub Weeks_Coverage_Calc() 
'Creates a pivot table to calculate stock weeks coverage for every item 

Dim sht As Worksheet 
Dim Activesht As Worksheet 
Dim pvtCache As PivotCache 
Dim pvt As PivotTable 
Dim StartPvt As String 
Dim SrcData As String 
Dim lastRow As Integer 
Dim Rng As Range 
Dim Row As Range 

'Clear the worksheet for pivot table 
    Set sht = ActiveWorkbook.Sheets("Weeks Coverage") 
    For Each pvt In sht.PivotTables 
    pvt.PivotSelect "", xlDataAndLabel, True 
    Selection.Delete Shift:=xlToLeft 
    Next pvt 
'Set Transfer sheet as active sheet 
Set Activesht = ActiveWorkbook.Sheets("Transfer") 

'Determine the dynamic range 
lastRow = Activesht.Range("B1000000").End(xlUp).Row 
Set Rng = Activesht.Range("B4:AF" & lastRow) 


'Determine the data range you want to pivot 
    SrcData = ActiveSheet.Name & "!" & Rng.Address(ReferenceStyle:=xlR1C1) 

'Initialize the cell to start the table 
    StartPvt = sht.Name & "!" & sht.Range("A3").Address(ReferenceStyle:=xlR1C1) 

'Create Pivot Cache from Source Data 
    Set pvtCache = ActiveWorkbook.PivotCaches.Create(_ 
    SourceType:=xlDatabase, _ 
    SourceData:=SrcData) 


    'Refresh pivot cache 
     For i = 1 To Worksheets("Weeks Coverage").PivotTables.Count 
     Worksheets("Weeks Coverage").PivotTables(i).PivotCache.Refresh 
     Next i 


'Create Pivot table from Pivot Cache 
    Set pvt = pvtCache.CreatePivotTable(_ 
    TableDestination:=StartPvt, _ 
    TableName:="PivotTable1") 

'Add fields to Pivot Table 

    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Item ID") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTable1").PivotFields("Stok"), "Sum of Stok", xlSum 

    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTable1").PivotFields("Sales"), "Sum of Sales", xlSum 
+0

应该是'SrcData = ActiveSht.Name'不'SrcData = ActiveSheet.Name' – Rory

回答

0

尝试建立PivotTablePivotCache与下面的代码:

'Determine the data range you want to pivot 
SrcData = Rng.Address(False, False, xlA1, xlExternal) 

'Create Pivot Cache from Source Data 
Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _ 
      SourceData:=SrcData) 

'Create Pivot table from Pivot Cache 
Set pvt = sht.PivotTables.Add(PivotCache:=pvtCache, TableDestination:=sht.Range("A3"), _ 
      TableName:="PivotTable1") 
+0

谢谢你,是行之有效 – osygl

+0

但是,出现了一个新问题。当向数据表添加透视字段时,它说“无法获得透视类的工作表函数”。我试图将名字更改为表名,但无法修复它。我试图将评论代码放在评论中,但可以在问题本身中找到它。 – osygl

+0

'字段添加到透视表 ' 工作表( “涵盖周”)。激活 随着表( “涵盖周”)。数据透视表( “PivotTable1”)。透视字段( “项目ID”) .Orientation = xlRowField 。位置= 1 结束随着 ActiveSheet.PivotTables( “PivotTable1”)。AddDataField ActiveSheet.PivotTables(_ “PivotTable1”)。透视字段( “斯托克”), “斯托克的总和”,xlSum ActiveSheet.PivotTables(“PivotTable1 “).AddDataField ActiveSheet.PivotTables(_ ”PivotTable1“)。透视字段(” 销售“), ”销售总额“,xlSum – osygl