2017-08-04 31 views
0

我有一个问题,我的宏没有正确刷新连接和/或数据透视表运行时,并保存工作簿。如何确保连接和数据透视表刷新完成之前的代码进一步

一直在阅读有关它,尝试设置backgroundquery = false(即使我已将微软脚本运行时添加到引用中,我也无法完成工作)以及不同类型的刷新,但问题仍然存在。 连接只是链接到不同工作簿中工作表的表。

这里是我的刷新,这是一个工作簿保存尾随其后的代码(同时是一个更大的程序的一部分,因此,私人潜艇):

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 

回答

0

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

看看这个question

+0

刚刚尝试过,在连接刷新后添加了'DoEvents',并且在每次数据透视表刷新之后,都无济于事。我还阅读了你已经链接的其他文章,但既然他们也说过“DoEvents”不起作用,直到现在我都没有尝试过。 –

+0

感谢您对帖子的提示,尝试了更多,终于找到了我的背景查询一开始不工作的原因。 “DoEvents”本身似乎不起作用,但与禁用后台查询相结合,它似乎有诀窍。 –

0

我建议你添加数据科拉姆的计数在数据透视的价值观和配合枢轴计数总数的记录。 如果匹配则罚款或再次刷新枢纽。

+0

对不起,不完全确定你的意思。还没有真正与VBA中的数据透视表一起工作,所以我不确定如何实现你的建议。 –

相关问题