2017-03-23 273 views
0

我有一个宏在excel中运行工作表,其中显示的数据连接到外部数据库。我试图在数据源更新时刷新显示的数据,而这些数据都是在宏运行时显示的。要清楚,通过“运行”,我的意思是宏在工作簿中显示每张表几秒钟,然后循环。VBA excel运行宏

下面是代码:

Option Explicit 
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As    
Long) As Integer 


Public Sub Switch() 
Dim ws As Worksheet 

    Do 
     For Each ws In ThisWorkbook.Worksheets 
     ws.Activate 
     Application.Wait Now() + TimeValue("00:00:05") 
     If GetAsyncKeyState(vbKeyShift) Then Exit Sub 
     DoEvents 
     Next ws 
    Loop 

End Sub 

我曾尝试之前“下一步WS”插入ActiveWorkbook.RefreshAll,我也试过ThisWorkbook.RefreshAll在同一位置。到目前为止,当我被告知数据已经更新时,我停止了宏的运行,这可以让数据刷新,然后再次运行宏。这是我想要避免必须做的。

非常感谢您的帮助。

感谢,

德里克

+2

我几次读到你的问题,我仍然不确定你想要做什么。如果您想等到查询刷新并继续,请在查询表上调用'.Refresh False'。如果您异步刷新不受控制的查询,请[订阅他们的'AfterRefresh'事件](http://stackoverflow.com/q/26983053/11683)。 – GSerg

+0

嗨GSerg,所以当我运行这个宏时,它通过每张表单播放5秒,然后循环播放,就像看幻灯片一样。在运行时,来自服务器的数据(即正在床单上显示的数据)每天更新一次或两次。我希望宏在运行时刷新以显示新数据。 –

回答

0

您可以打开屏幕宏的执行过程中更新或关闭。宏随着它运行会变慢。

Application.ScreenUpdating = True 
+0

嗨Kev,好的,谢谢!我会尝试一下。 –