Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA事件:在运行代码之前使用工作簿\u open加载工作簿_Vba_Excel - Fatal编程技术网

VBA事件:在运行代码之前使用工作簿\u open加载工作簿

VBA事件:在运行代码之前使用工作簿\u open加载工作簿,vba,excel,Vba,Excel,我想在工作簿完成打开后运行VBA宏。我尝试使用工作簿_open,但此操作在工作簿完成打开之前运行。这对我不起作用,因为我需要像这样在每张纸上循环 Private Sub Workbook_Open() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets 'do stuff on each sheet Next ws End Sub 有人知道工作簿打开后是否会运行事件吗?或者对如何实现此目标有任何其他建议?尝试使用此工作

我想在工作簿完成打开后运行VBA宏。我尝试使用工作簿_open,但此操作在工作簿完成打开之前运行。这对我不起作用,因为我需要像这样在每张纸上循环

Private Sub Workbook_Open()

Dim ws As Worksheet

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

End Sub

有人知道工作簿打开后是否会运行事件吗?或者对如何实现此目标有任何其他建议?

尝试使用此工作簿而不是Active工作簿:

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

将代码放入工作簿\激活事件中。它发生在公开赛之后

Private Sub Workbook_Activate()
    ' Code goes here
End Sub

我有一个类似的问题,我解决了使用

从链接的MSDN库文章:

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

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

Private Sub Workbook_Open()

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

End Sub
确保
DoStuff
程序不在工作表模块中:

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

时间可以调整,但一秒钟对我来说很满意。

谢谢你的回复,因为某些原因,这根本没用。加载工作簿后,它不会启动此操作吗?这可能与安全设置有关吗?请尝试此工作簿\u激活而不是工作簿\u激活。这可能是安全问题。我刚刚在那个事件中测试了代码,它似乎在我的机器上运行得很好。似乎工作正常。我有一个可下载的电子表格,最初我写了一些关于开放事件的代码。我有一些代码试图检索工作表的最后一行,但它告诉我它是空的,我假设工作表在运行方法调用时没有100%加载。使用Activate时,它会等待整个工作表加载后再运行。谢谢你的提示。出于某种原因,这是失败的,告诉我宏dos不存在!“DoStuff”子模块或函数不得位于工作表模块中!是的,调用函数可以是@Robert;一个救命的答案:)只是一个简短的提示:无论您选择下面的答案是什么,代码都不能放在模块中,它必须位于VBA项目窗口中的
此工作簿中。(或者可能在工作表对象内部?)