2016-01-11 578 views
1

在Excel工作表上,我使用Microsoft Power Query創建了多個SQL查詢, 這些查詢應每5秒刷新一次,以便從SQ數據庫中檢索新信息。每5秒運行一次宏

刷新,我去Excel中的數據標籤並點擊刷新按鈕,所有這些刷新所有workbooks.This做工不錯

我想每5秒 理想的情況下自動完成這一要求,宏應運行在後臺每5秒鐘命令Ctrl + Alt + F5。

我怎樣才能做到這一點

回答

0

的ThisWorkbook模塊

Option Explicit 
Private Sub Workbook_Open() 
    Call StartTimer 
End Sub 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Call StopTimer 
End Sub 

通用模塊

Option Explicit 
Dim RunTime 

Sub StartTimer() 
    Application.ScreenUpdating = False 
    ActiveWorkbook.RefreshAll 
    RunTime = Now + TimeValue("00:00:15") 
    Application.OnTime RunTime, "RefreshTime" 
    Application.ScreenUpdating = True 
End Sub 

Sub StopTimer() 
' http://www.cpearson.com/excel/OnTime.aspx 
    On Error Resume Next 
    Application.OnTime RunTime, "RefreshTime", Schedule:=False 
    On Error GoTo 0 
End Sub 

Sub RefreshTime() 
    ActiveWorkbook.Save 
    StartTimer 
End Sub 
+0

感謝Jeeped!我在Om3r的解決方案中找到了我的答案。 – Sequel3

2

只需添加一個Application.OnTime method到自身重新運行在5秒鐘內宏結束。

Option Explicit 

Public bWORKING As Boolean 
Public bKEEPWORKING As Boolean 

Sub deja_vu() 
    'never let it run on top of itself 
    If bWORKING Then Exit Sub 
    bWORKING = True 

    'do something here; refresh connections or whatever 

    Debug.Print Now 'just to show it did something 

    If bKEEPWORKING Then _ 
     Application.OnTime Now + TimeSerial(0, 0, 5), "deja_vu" 
    bWORKING = False 
End Sub 

將值爲True並運行Deja_vu子過程。它會繼續運行,直到您將bKEEPWORKING設置爲False。偶爾,我可能會跳過bKEEPWORKING並讓它在特定工作表單元格上查找值。如果值爲0那麼該過程不會重新安排自己。