首页 文章

使用VBA刷新数据透视表

提问于
浏览
0

我正在尝试使用Powershell脚本自动刷新数据透视表,该脚本调用excel中的vba代码 . 我的powershell代码如下 .

$excel = new-object -comobject excel.application
$workbook = $excel.workbooks.open("$para_temp\RapportPalettes.xlsm")
$worksheet = $workbook.worksheets.item("source")
$excel.Run('Import')
$worksheet = $workbook.worksheets.item("TCD")
$excel.Run('MAJ')

第一个宏“导入”工作正常 . 但第二个使用源中的新数据刷新Pivot表的“MAJ”却没有

我在maj中首先尝试了这个宏:

Sub maj()

Dim pt As PivotTable



    Set pt = ActiveSheet.PivotTables("TCD")

    pt.RefreshTable

End Sub

我没有得到任何错误,但我的枢轴表没有刷新,我必须手动完成 .

然后我尝试了这个来改变数据透视表的数据来源:

Sub MAJ()

Dim sht As Worksheet
Dim SrcData As String
Dim pvtCache As PivotCache

'Determine the data range you want to pivot
  Set sht = ThisWorkbook.Worksheets("Source")
  SrcData = sht.Name & "!" & Range("A1:Z10000").Address(ReferenceStyle:=xlR1C1)

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

'Change which Pivot Cache the Pivot Table is referring to
  Worksheets("TCD").Activate
  ActiveSheet.PivotTables("TCD").ChangePivotCach (pvtCache)

End Sub

但我在VBA中有438错误:对象不支持此行的此属性或方法

ActiveSheet.PivotTables("TCD").ChangePivotCach (pvtCache)

能否请你帮忙 ?

EDIT :

如您所见,我有一个工作表和一个名为TCD的数据透视表 .
Worsheet

Pivot table

EDIT : 实际上宏正在工作,我通过创建一个调用它的按钮来测试它 . 当我用powershell调用它时,它不起作用

2 回答

  • 2

    尝试使用下面的代码刷新工作表 "TCD" 中名为 "TCD"PivotTable ,其中包含更新的 PivotCache .

    Code

    Option Explicit
    
    Sub MAJ()
    
    Dim sht As Worksheet
    Dim SrcData As String
    Dim pvtCache As PivotCache
    Dim pvtTbl As PivotTable
    
    'Determine the data range you want to pivot
    Set sht = ThisWorkbook.Worksheets("Source")
    SrcData = sht.Range("A1:Z10000").Address(False, False, xlA1, xlExternal)
    
    'Create New Pivot Cache from Source Data
    Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData)
    
    'Set the pivot table object
    Set pvtTbl = ThisWorkbook.Worksheets("TCD").PivotTables("TCD")
    With pvtTbl
        .ChangePivotCache pvtCache 'Change which Pivot Cache the Pivot Table is referring to
        .RefreshTable ' refresh the Pivot Table
    End With
    
    End Sub
    
  • 0

    我终于找到了一个有点愚蠢的问题 . 事实上,我正在刷新数据透视表,但我没有保存更改 . 这是我最终使用的宏,我使用了相同的PowerShell脚本

    Sub Test()
    Application.DisplayAlerts = False
    Dim TCD As PivotTable
         For Each TCD In Worksheets("TCD").PivotTables
              TCD.RefreshTable
         Next
         ThisWorkbook.Save
    
         Application.DisplayAlerts = False
    End Sub
    

    谢谢大家

相关问题