2011-03-25 165 views
8

我有一个Workbook_Open事件宏(它在ThisWorkbook中)并不总是运行。Excel工作簿打开事件宏并不总是运行

  • 如果Excel已关闭,并且双击Windows资源管理器中的.xls文件,它会运行。
  • 如果我从启动/程序(没有.xls文件)启动Excel,然后打开文件,它会运行。
  • 如果我已经在Excel中打开文件,但是关闭文件(保持Excel打开)并重新打开它,那么宏不会运行。

我将安全设置设置为中等,每当它打开时启用宏。

我需要做些什么才能让宏在我打开它时运行,而不仅仅是这次Excel会话的第一次?

(顺便说一句,这是Excel 2003中)

+0

所有我可以告诉你的是,它在Excel 2010中的工作:( – 2011-03-25 22:01:13

+0

你有Workbook_BeforeClose事件? – 2011-03-25 22:37:16

+0

后,你的情况下,3打开工作簿时,将任何其他宏工作? – 2011-03-25 22:43:36

回答

4

我认为这是 the most cogent article这个问题(这是一个长期没有解释完全不稳定的错误,Excel中的展品)。 (无效链接)

总之,在许多情况下,这是一个计时事件,因为工作簿在打开时计算东西,并妨碍Workbook_Open事件。对你的测试方法是,首先重命名单元所调用的任何UDF或宏,以便它们不会被调用,看看它是否会改变任何内容。

+0

也许改变计算为手动也无法做到这一点? – 2011-03-26 01:26:37

+0

我刚刚尝试添加您提到的文章中的代码;似乎没有帮助。 :-(有很多标签和很多代码......很难重命名所有内容......关于如何启动的任何建议? – ScottSM 2011-03-26 20:53:46

+0

哦 - 但非常感谢您发布该文章的链接!知道我不是一个人在这! – ScottSM 2011-03-26 22:01:32

0

几点建议:

  1. 尝试用数字证书签名簿。将此证书添加到“受信任的证书”存储中,然后重试。
  2. 如果这是针对计算机的,请尝试重新安装Office。

确保您已应用最新的Service Pack。

2

我遇到了同样的问题。

我在我的电脑上测试了一个工作簿,没有任何问题。在发给我的客户后,我被告知,一些组合框保持空着。这些通常从workbook_open例程中填充。 我尝试了不同的事情来启用workbook_open -Event - 没有成功。

最后,我发现禁用所有用户定义函数(UDF)会导致正确执行workbook_open

由于我的工作簿是从另一个文件打开的,因此我会尝试将计算设置为手动,然后手动运行workbook_open。这可以通过定义它

public sub workbook_open 

代替

private sub workbook_open 

怪来完成,即Excel不通过本身这个时间......

+2

我想出了一个解决方案考虑对类似[链接]的答案(http://stackoverflow.com/questions/9006902/workbook-open-is-not-executed-with -excel-already-running)。工作簿中的私有布尔变量用于确定工作组ok_open事件被解雇了。如果不是,我将处理程序添加到workbook_activate和workbook_sheet_change,如果未设置该变量,则重新运行workbook_open事件。 – DrMarbuse 2014-09-12 12:40:26

2

一个迟到的回答(聊胜于无)。

我已经有这个问题现在几次(与Excel 2010)。 迄今一直工作的解决方案是:删除条件格式,特别是如果它包含UDF作为条件。正如@LanceRoberts在上述文章中写到的,最终由于UDF计算“覆盖”了Open事件,但我发现如果以条件格式使用,这些特别有害。

+0

Spot on - 删除条件格式中使用的UDF为我解决了它。 – assylias 2017-11-29 10:02:51

0

我遇到了同样的问题,我避免使用安全设置。 我使用的选项设置,然后保密中心,然后在“保密中心PARAMS”(抱歉,但它的法文版:-P的翻译) 然后在“文件approuved”或这样的事情。 并添加包含excel工作簿的文件。 之后,它的finnaly工作。

随处看,永远找不到解决方案。

希望它能帮助别人

0

有同样的问题,我想我有它。如果它不是只读的,我必须将Workbook_BeforeClose private子放到保存工作簿的位置;和确保Application.EnableEvents = True的Workbook_BeforeSave。这似乎允许Workbook_Open触发。不是100%肯定为什么但似乎可重复,包括在一个空白的新工作簿。

2

我正经历着几乎相同的行为,并发现它是由于如果条件格式规则的示数出发生了错误。事实证明,如果条件格式化规则基于宏的任何设置,并且导致条件格式错误,则Workbook_Open宏甚至不会尝试运行。

要进行测试,让你的文件的副本,并删除工作簿中所有条件格式。保存并重新打开。如果它解决了您的问题,那么请重新修改条件格式规则,以使其不依赖于在Workbook_Open宏运行之前将被中断的函数/值。

+0

但我需要我的条件格式。我如何才能在文件加载完成之后不再做它的事情。 – Bigtree 2017-03-22 20:51:45

+0

似乎没有办法做到这一点。再说一次,如果你愿意你的条件规则不依赖那些依赖于宏的值(如果你想通过这个问题,通常可以做到这一点,但是每个案例都是特定的),你可以解决问题。删除条件格式只是测试步骤,用于确定造成问题的特定格式规则。 – 2018-01-24 21:43:52

0

这发生在一个工作簿设置为false的Application.EnableEvents关闭,然后打开另一个工作簿在Excel的同一实例打开。为避免这种情况,请确保所有禁用事件的进程在终止之前重新启用它们。特别注意程序中间的“结束”命令,错误处理程序和“退出子句”。

0

是什么原因引起的是,你的其他存档,您openned第一的人,有一个Workbook_Open程序; Excel不会第二次执行它。

0

这也发生在我身上,花了我数小时才弄清楚。

变成了今天()函数在Excel中导致了问题。 一旦从我的工作表中删除一切再次工作。非常奇怪的错误。

0

为了增加阿图罗·拉诺后:下面的代码被用于监控Workbook_Open事件,然后运行ProcessX每当打开工作簿。

ProcessX包含一个End语句。结果是它只能第一次工作。结束了AppX,所以没有进一步的事件监控。移除End修复了这个问题。 (无论如何,使用End都是不好的做法,因为它会在没有任何清理或终止其他资源的情况下停止所有操作)。

'Code in: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 
相关问题