以我过去后Auto refresh pivottables data in excel on first run内的外部数据源和数据透视表一起,我发现我的第一执行的查询从外部数据源被刷新,需要大约1分钟执行。并在我的第二次运行中,数据透视表被更新。刷新两个时间表
是否有解决方案(VBA代码)以刷新两个时间表内外部数据源和数据透视表一起通过点击command button
(如果假设我们设定一个计时器)?
以我过去后Auto refresh pivottables data in excel on first run内的外部数据源和数据透视表一起,我发现我的第一执行的查询从外部数据源被刷新,需要大约1分钟执行。并在我的第二次运行中,数据透视表被更新。刷新两个时间表
是否有解决方案(VBA代码)以刷新两个时间表内外部数据源和数据透视表一起通过点击command button
(如果假设我们设定一个计时器)?
在连接属性下,取消选中“启用后台刷新”。这将在连接被告知时刷新,而不是在其他进程发生的背景中。
在禁用后台刷新的情况下,您的VBA过程将等待您的外部数据刷新,然后再移至下一行代码。
然后你只需修改下面的代码:
ActiveWorkbook.Connections("CONNECTION_NAME").Refresh
Sheets("SHEET_NAME").PivotTables("PIVOT_TABLE_NAME").PivotCache.Refresh
您也可以关闭后台刷新在VBA:
ActiveWorkbook.Connections("CONNECTION_NAME").ODBCConnection.BackgroundQuery = False
我用上面的答案,但利用了RefreshAll方法。我也改变了它,以允许多个连接,而不必指定名称。然后我将它链接到电子表格上的按钮。
Sub Refresh()
Dim conn As Variant
For Each conn In ActiveWorkbook.Connections
conn.ODBCConnection.BackgroundQuery = False
Next conn
ActiveWorkbook.RefreshAll
End Sub
自动刷新工作簿例如每5秒。 应用到模块
Public Sub Refresh()
'refresh
ActiveWorkbook.RefreshAll
alertTime = Now + TimeValue("00:00:05") 'hh:mm:ss
Application.OnTime alertTime, "Refresh"
End Sub
应用到工作簿上打开
Private Sub Workbook_Open()
alertTime = Now + TimeValue("00:00:05") 'hh:mm:ss
Application.OnTime alertTime, "Refresh"
End Sub
:)
我认为这是一个简单的使Excel等到刷新完成的方式,而不必将Background Query属性设置为False。为何混淆了人们的喜好?
Excel 2010(及更高版本)具有称为CalculateUntilAsyncQueriesDone的此方法,您必须在调用RefreshAll方法后调用它。 Excel将等待计算完成。
ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
我通常把这些东西一起做高手全算不中断,发送我的模型给别人之前。这样的事情:
ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
Application.CalculateFullRebuild
Application.CalculateUntilAsyncQueriesDone
'第一件事第一'这意味着你应该确保你的查询刷新之前,你更新PT。取决于你创建查询的方式,你可以像描述的那样控制'AfterRefresh事件'(或类似)[该描述](http://msdn.microsoft.com/en-us/library/ff835922%28v=office.14 %29.aspx)...比你能刷新你的PT确保你的数据是最新的。 – 2013-04-25 18:53:08
我的数据每晚更新。 – user42995 2013-04-25 19:03:09
'Application.OnTime'怎么样? – 2013-04-25 19:14:34