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

时间:2010-10-18 09:10:54

标签: vba excel-vba excel

我希望在工作簿完成打开后运行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

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

3 个答案:

答案 0 :(得分:7)

我遇到了类似的问题,我使用Application.OnTime解决了这个问题。

来自链接的MSDN Library文章:

  

计划将来在指定时间运行的过程   (在一天中的特定时间或在特定时间之后   已经过去了。

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

Private Sub Workbook_Open()

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

End Sub

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

Private Sub DoStuff()
    'Implementation...
End Sub

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

答案 1 :(得分:6)

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

Private Sub Workbook_Activate()
    ' Code goes here
End Sub

答案 2 :(得分:1)

尝试使用ThisWorkbook而不是ActiveWorkbook:

Private Sub Workbook_Open()
    Dim osht As Worksheet
    For Each osht In ThisWorkbook.Worksheets
        Debug.Print osht.Name
    Next osht
End Sub