- 如果Excel已关闭,并且我从Windows资源管理器双击.xls文件,则会运行。
- 如果我从“开始/程序”中启动Excel(没有.xls文件),然后打开该文件,它会运行。
- 如果我已经在Excel中打开了文件,但是关闭了该文件(保留Excel打开状态),然后重新打开它,则该宏不会运行。
我需要做什么才能使宏在每次打开文件时运行,而不仅仅是在本次Excel会话的第一次打开时运行?
(顺便说一下,这是Excel 2003)
我认为这是关于这个问题最有说服力的文章(这是Excel表格一直存在的、从未完全解释过的错误)。(链接失效)
简而言之,在许多情况下,这是一个时间问题,因为工作簿在打开时尝试计算内容,这会干扰Workbook_Open事件。要测试你的文件是否是这种情况,请先重命名由单元格调用的任何UDF或宏,以免被调用,并查看是否改变了任何内容。
我遇到了同样的问题。
在我的电脑上测试了一个工作簿没有任何问题。分发给客户后,有人告诉我,一些组合框保持为空白。这些通常是从 workbook_open
程序中填充的。
我尝试了不同的方法来启用 workbook_open
事件 -但均未成功。
最终,我发现禁用所有用户定义函数 (UDF) 可以正确执行 workbook_open
。
由于我的工作簿是从另一个文件中打开的,因此我将首先将计算设置为手动,然后手动运行 workbook_open
。可以通过定义它来实现。
public sub workbook_open
替代
private sub workbook_open
晚来的回答(总比没有好)。
我现在已经遇到了这个问题几次(使用Excel 2010)。 迄今为止一直有效的解决方案是:删除条件格式,特别是如果它包含UDF作为条件。 正如@LanceRoberts在上面的帖子中写道,这最终是由于UDF计算“覆盖”了打开事件,但我发现如果在条件格式中使用它们,则尤其有害。
确保已应用最新的服务包。
这也发生在我身上,花了我几个小时才找出问题所在。
原来是 Excel 中的 TODAY() 函数导致了问题。一旦从我的工作表中删除,一切又恢复正常了。非常奇怪的错误。
Workbook_Open
程序;Excel 不会再次执行它。补充Arturo Llano的帖子:以下代码用于监视Workbook_Open事件,每次打开工作簿时运行ProcessX。
ProcessX包含一个End语句。结果是它只在第一次工作。End清除了AppX,因此不再监视事件。删除End解决了问题。(使用End是不好的做法,因为它会停止所有操作而没有任何清理或终止其他资源的方式)。
'代码位于:Personal.xlsb ThisWorkbook
Public WithEvents AppX As Application
Private Sub Workbook_Open()
Set AppX = Application
End Sub
Private Sub AppX_WorkbookOpen(ByVal wb As Workbook)
'A 1-second delay to allow opening to complete before ProcessX starts.
Application.OnTime Now + TimeValue("00:00:01"), "ProcessX"
End Sub