以我過去後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