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

时间:2017-08-04 06:24:17

标签: excel vba excel-vba

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

一直在阅读它,尝试设置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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以在调用查询刷新后使用DoEventsdocumentation here)。这将等到刷新完成后再进入下一行VBA代码。

查看此question