两天前,当我打开文档时,我在Excel工作表中填充ActiveX组合框的代码停止运行。我发现当我打开工作表时,Worksheet_Activate()不再触发。
现在即使我在Sheet 1中创建了一个只有以下代码的简单工作簿,当我打开工作簿时它也不会触发。
Private Sub Worksheet_Activate()
MsgBox ("Worksheet has been activated")
End Sub
但是,如果我单击另一个选项卡并单击返回包含代码的工作表,则会触发。
我尝试过添加Application.EnableEvents = True和Worksheets(“Sheet1”)。激活Workbook_Open(触发)但仍然没有运气。
我们正在运行Excel 2010,同样的问题也发生在同事的机器上。有什么想法吗?
答案 0 :(得分:5)
我知道这是一个较旧的问题,但是没有必要先激活另一个工作表,然后重新激活你想要的那个:
>>=
在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
中引用 Name 的工作表也不是一个好习惯,除非你有充分的理由这样做。更好的是使用 CodeName 。有关详细信息,请参阅this post。
答案 1 :(得分:2)
在Workbook_Open
事件中,关闭ScreenUpdating
,激活另一张表,激活您希望事件触发的工作表,然后重新开启ScreenUpdating
。
答案 2 :(得分:0)
此设置也可能在起作用:
Application.ScreenUpdating = true