如何确保在代码进一步移动之前完成连接和数据透视表刷新

问题描述 投票:0回答:3

我的宏在运行和保存工作簿时没有正确刷新连接和/或数据透视表时出现问题。

一直在阅读它,尝试设置 backgroundquery = false(即使我将 Microsoft Scripting Runtime 添加到参考文献中,我也没有成功)和不同类型的刷新,但问题仍然存在。 连接只是一个链接到不同工作簿中工作表的表格。

这是我的刷新代码,随后是工作簿保存(两者都是更大例程的一部分,因此是私有潜艇):

Private Sub RefreshPivotTables()

Dim WkC As PivotTable, WkAC As PivotTable

Set WkC = ThisWorkbook.Worksheets("Contracts").PivotTables("Contracts")
Set WkAC = ThisWorkbook.Worksheets("All Contracts").PivotTables("All Contracts")

ThisWorkbook.Connections("Contracting Expiry Report Master File").Refresh
'Reading about it, I was using both Refresh Table and Cache Refresh together with Update thinking it might help
With WkC
    .RefreshTable
    .PivotCache.Refresh
    .Update
End With
With WkAC
    .RefreshTable
    .PivotCache.Refresh
    .Update
End With

End Sub

Private Sub SaveWorkbookNewMonth()

Dim dt As String

dt = Format(CStr(Now), "mmmm yyyy")
ThisWorkbook.SaveAs Filename:="C:\Users\" & Environ$("username") & "\Desktop\Expiry Report Aviation, Asphalt, BS and International Marine - " & dt & ".xlsm", _
    FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

End Sub

任何关于如何确保在代码不向前移动的情况下完成刷新的想法将不胜感激。

编辑:

最后后台查询是解决方案,没有意识到由于工作簿被保护,它不起作用。

新工作代码:

Private Sub RefreshConnectionAndPivotTables()

Dim WkC As PivotTable, WkAC As PivotTable

Set WkC = ThisWorkbook.Worksheets("Contracts").PivotTables("Contracts")
Set WkAC = ThisWorkbook.Worksheets("All Contracts").PivotTables("All Contracts")

ThisWorkbook.Protect Password:="pass", Structure:=False, Windows:=False
ThisWorkbook.Connections("Contracting Expiry Report Master File").OLEDBConnection.BackgroundQuery = False
ThisWorkbook.Connections("Contracting Expiry Report Master File").Refresh
ThisWorkbook.Connections("Contracting Expiry Report Master File").OLEDBConnection.BackgroundQuery = True
ThisWorkbook.Protect Password:="pass", Structure:=True, Windows:=True
DoEvents
WkC.RefreshTable
WkAC.RefreshTable

End Sub
vba excel
3个回答
0
投票

您可以在调用查询刷新后使用

DoEvents
文档在这里)。这将等到刷新完成,然后再进入下一行 VBA 代码。

看看这个问题.


0
投票

我建议您在数据透视表的值中添加一个数据列计数,并将总计数记录与数据透视表计数相匹配。 如果匹配则很好或再次刷新数据透视表。


0
投票

我有同样的问题.. DoEvents 没有帮助等待数据透视表刷新完成。整个脚本就像往常一样从头到尾运行。

© www.soinside.com 2019 - 2024. All rights reserved.