暂停VBA代码而不暂停电子表格

时间:2015-05-07 16:01:27

标签: excel vba excel-vba

我有一个VBA代码,它从电子表格中复制和粘贴数据,从外部服务器提取数据。因此,该电子表格需要一段时间(从10-30秒)来加载数据。

我已经研究了如何暂停宏 - 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

1 个答案:

答案 0 :(得分: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