VBA事件:使用workbook_open运行代码之前加载工作簿

sam*_*r11 2 excel vba excel-vba

我希望在工作簿完成打开后运行VBA宏.我尝试使用workbook_open,但这在工作簿完成打开之前运行.这对我不起作用,因为我需要像这样循环遍历每张纸...

Private Sub Workbook_Open()

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets
'do stuff on each sheet
Next ws

End Sub
Run Code Online (Sandbox Code Playgroud)

有没有人知道是否有一个事件在工作簿完成后才会运行?或者就如何实现这一目标提出任何其他建议?

Rob*_*ert 7

我有一个类似的问题,我用Application.OnTime解决了.

来自链接的MSDN Library文章:

安排程序在将来的指定时间运行(在特定时间或在特定时间段过后).

在运行该DoStuff过程之前,您可以尝试使用此方法为工作簿提供足够的时间打开:

Private Sub Workbook_Open()

    Application.OnTime Now + TimeValue("00:00:01"), "DoStuff"

End Sub
Run Code Online (Sandbox Code Playgroud)

确保该DoStuff过程不在工作表模块中:

Private Sub DoStuff()
    'Implementation...
End Sub
Run Code Online (Sandbox Code Playgroud)

时间可以调整,但一秒钟对我来说是令人满意的.

  • "DoStuff"子或函数不能在工作表模块中! (4认同)

Mic*_*ael 6

将您的代码放在Workbook_Activate事件中.它发生在Open事件之后.

Private Sub Workbook_Activate()
    ' Code goes here
End Sub
Run Code Online (Sandbox Code Playgroud)