【问题标题】:Refreshing a Pivot table with VBA使用 VBA 刷新数据透视表
【发布时间】:2020-05-14 09:14:54
【问题描述】:

我正在尝试使用在 Excel 中调用 vba 代码的 Powershell 脚本自动刷新数据透视表。 我的 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')

第一个宏“导入”工作得很好。但是用源中的新数据刷新数据透视表的第二个“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)

你能帮忙吗?

编辑:

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

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

【问题讨论】:

  • 不应该是 '.ChangePivotCache' 而不是 '.ChangePivotCach'?
  • 是的,这只是一个小费错误。我仍然得到同样的错误:object doesn't support this property or method, and for the same line

标签: vba excel powershell


【解决方案1】:

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

代码

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

【讨论】:

  • 感谢您的回答。现在我收到错误 1004:无法读取此行上 Worsheet 类的属性数据透视表:Set pvtTbl = ThisWorkbook.Worksheets("TCD").PivotTables("TCD")
  • @SouhailOuabi 所以要么你没有名为“TCD”的工作表,要么你在该工作表中没有名为“TCD”的数据透视表
  • 我确实有展位,正如您在我的编辑中看到的那样(抱歉是法语)
  • @SouhailOuabi iv'e 编辑了我的代码试试吧,我已经测试过了,它对我有用。确保您有从 A 列到 Z 列的有效数据,直到第 10000 行! (中间不能有空行)
  • 它没有给出任何错误但仍然没有刷新数据透视表!
【解决方案2】:

我终于找到了一个有点愚蠢的问题。事实上,我正在刷新数据透视表,但没有保存更改。

这是我最终使用的宏,我使用了相同的 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

谢谢大家

【讨论】:

    猜你喜欢
    • 2021-04-12
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2016-09-07
    • 2010-11-03
    相关资源
    最近更新 更多