我在工作表中有几个要点,并且已经在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
答案 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
进行比较-但是您需要考虑工作簿之间的时间差打开并刷新。