Excel 工作表\u打开工作簿时不触发激活

Excel 工作表\u打开工作簿时不触发激活,excel,vba,events,activation,Excel,Vba,Events,Activation,两天前,当我打开文档时,在Excel工作表中填充ActiveX组合框的代码停止运行。我发现当我打开工作表时,工作表_Activate()不再触发 现在,即使我在工作表1中创建了一个只包含以下代码的简单工作簿,打开工作簿时也不会触发它 Private Sub Worksheet_Activate() MsgBox ("Worksheet has been activated") End Sub 但是,如果我单击另一个选项卡并单击返回到包含代码的工作表,它确实会触发 我尝试过添加Applic

两天前,当我打开文档时,在Excel工作表中填充ActiveX组合框的代码停止运行。我发现当我打开工作表时,工作表_Activate()不再触发

现在,即使我在工作表1中创建了一个只包含以下代码的简单工作簿,打开工作簿时也不会触发它

Private Sub Worksheet_Activate()
   MsgBox ("Worksheet has been activated")
End Sub
但是,如果我单击另一个选项卡并单击返回到包含代码的工作表,它确实会触发

我尝试过添加Application.EnableEvents=True和工作表(“Sheet1”)。激活到打开的工作簿(确实会触发),但仍然没有成功


我们正在运行Excel 2010,同样的问题也发生在我同事的机器上。有什么想法吗?

在您的
工作簿中
打开事件关闭
屏幕更新
,激活另一张工作表,激活您希望事件触发的工作表,重新打开
屏幕更新

我知道这是一个老问题,但无需先激活另一个工作表,然后再重新激活所需的工作表:

Private Sub Workbook_Open()
    ' Bug in Excel:
    ' The Worksheet_Activate event does not fire for the sheet that is active
    ' when the workbook is opened, so call it explicitely. Make sure that
    ' Worksheet_Activate() is declared as Public.
    ' Ignore ActiveSheets without (Public) Worksheet_Activate()
    On Error Resume Next
    Call ActiveSheet.Worksheet_Activate
    On Error GoTo 0
End Sub

工作表(“Sheet1”)
中按名称引用工作表也是不好的做法,除非您有很好的理由这样做。最好使用代码名。有关详细信息,请参阅。

非常感谢,这似乎解决了问题!你能解释为什么/如何解决问题吗?也就是说,问题的原因是什么,为什么会突然出现?再次感谢@jaegee,如果工作表是当前激活的工作表,则不会发生激活事件。这只是Excel中的一个bug。另外,请用绿色复选标记将我的答案标记为正确。旧帖子,但如果有人查找,建议阅读的内容只是强调/重申将激活子例程声明从private(默认)更改为public很重要。e、 g.“私有子工作表\u Activate()”应更改为“公共子工作表\u Activate()”,否则,这将不起作用。@JohnJoseph:这正是我在回答中工作簿\u Open()子的注释中所写的。错误处理程序只是用来捕获“对象不支持此属性或方法”——调用私有或不存在的工作表_Activate()例程会引发错误。是的,我知道——这就是为什么我说“下划线/重新显示”——这很重要,但很容易出错。很好的回答-它帮助了我!我投了赞成票。