检查是否需要刷新数据透视表(或具有基础数据)的方法

时间:2018-07-23 07:32:35

标签: excel-vba

我在工作表中有几个要点,并且已经在RefreshTable上设置了Workbook_Open

但是,我想通过在“组合框控件更改”中添加验证来检查枢轴是否已刷新,以确保强制用户刷新它(一次)。这就是我坚持的地方。

顺便说一句,所有枢轴上的.SaveData都设置为False以节省文件大小。我知道如果打开此按钮,我的问题将得到解决。但我想看看是否还有其他选择。

是否可以检查枢纽是否已更新/刷新?

For Each ws In Worksheets
    Set rng = Sheets(ws.Name).Range("A1:" & Col_Letter(LastColumn) & LastRow)
    For Each pvt In shSource.PivotTables
       'confirm here if pivot has been refreshed or not
       If '???  
           'do nothing
       Else:
           pvt.ChangePivotCache ThisWorkbook.PivotCaches.Create (SourceType:=xlDatabase, SourceData:=rng)
           pvt.SaveData = False
           pvt.RefreshTable
       End if
    Next pvt
Next ws

编辑#1: 我不能依靠以前的SourceData进行比较,因为数据可能没有变化,但仍需要在打开文件时刷新数据透视表(由于.SaveData设置为{{ 1}})

编辑#2: 似乎我有一个临时的解决方法。这有点混乱,但可以。我通过寻找False来获取它,并在确认枢轴未刷新后对其进行刷新。

Err.Description

1 个答案:

答案 0 :(得分:0)

您可以检查数据中心最近一次用pvt.RefreshDate刷新的日期时间-因此可以将其与“ now”进行比较,然后:

检查自上次刷新以来已经过了多长时间-在此示例中,如果距十多分钟之前:

For Each ws In Worksheets
    Set Rng = Sheets(ws.Name).Range("A1:" & Col_Letter(LastColumn) & LastRow)
    For Each pvt In shSource.PivotTables
       If ((Now() - pvt.RefreshDate) * 3600) < 10 Then
           'Do nothing
       Else:
           pvt.ChangePivotCache ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Rng)
           pvt.SaveData = False
           pvt.RefreshTable
       End If
    Next pvt
Next ws

或者,您可以创建一个Workbook.Open事件来将工作簿的打开时间存储在某个地方,并将其与.RefreshDate进行比较-但是您需要考虑工作簿之间的时间差打开并刷新。