2015-05-07 57 views
0

我有一個VBA代碼,用於從電子表格中複製和粘貼來自外部服務器的數據。因此,該電子表格需要一段時間(從10到30秒)才能加載數據。在不暫停電子表格的情況下暫停VBA代碼

我研究瞭如何暫停宏 - application.wait,sleep等 - 但它們也會暫停電子表格函數,以使外部服務器的數據無法加載。因此,當代碼複製數據時,它將粘貼#DIV/0!。是否有一個函數可以中斷/停止/暫停宏以給服務器數據加載時間?

我也希望這個宏運行時不需要用戶輸入(網上有些建議讓用戶每次迭代都推進代碼)。

Sub all() 

    Dim wb1 As Workbook 
    Set wb1 = Workbooks("all") 

    Dim wb2 As Workbook 
    Set wb2 = Workbooks("other") 

    For i = 2 To 5 

     Application.Wait Now() + TimeValue("00:01:00") 

     wb2.Sheets("Sheet1").Cells(4, 2).Copy 
     wb1.Sheets("Sheet1").Cells(i, 18).PasteSpecial xlPasteValues 

    Next i 
End Sub 
+0

難道'application.wait'不行?或者只是不夠停頓?你現在的代碼有什麼'錯誤'? – BruceWayne

+0

如果宏可以告訴「拉」完成時,這很容易做到。是否有一些單元格開始爲空,但在「拉」完成時會獲得一個值? –

+0

你真的想要解決什麼問題?我們如何重現它?你暫停VBA的是什麼?暫停時你期望發生什麼? –

回答

1

Application.Wait在Excel中暫停處理。這意味着您的後臺處理也會暫停。

相反,試試這個:

Dim WaitTime as Date 
For i = 2 To 5 

    WaitTime = Now() + TimeValue("00:01:00") 
    While Now() < WaitTime 
     DoEvents 
    Wend 

    wb2.Sheets("Sheet1").Cells(4, 2).Copy 
    wb1.Sheets("Sheet1").Cells(i, 18).PasteSpecial xlPasteValues 

Next i 
+0

感謝您的幫助!我正在使用Excel 2010 - Application.DoEvents導致錯誤438:對象不支持此屬性或方法 - 那麼是否有替代方法可以使用? – kidEd2

+0

我的不好。刪除'Application.'它應該只是'DoEvents'。我正在看你的'Application.Wait'並且跟着去了。我更新了代碼。 – FreeMan

+0

我試過你的代碼,它和'Application.Wait'有相同的問題,因爲它不會讓其他電子表格更新,直到一分鐘後。有任何想法嗎?如果用戶在宏繼續之前需要按下或輸入內容,它會有幫助嗎? – kidEd2