excel - Worksheet.Activate 不会触发 Worksheet_Activate 事件

标签 excel vba

我在 vba 中创建了宏,但它们不起作用。
在我写的 ThisWorkbook 代码中:

Private Sub Workbook_Open()
    Worksheets("Sheet1").Activate
End Sub
在 Sheet1 (Sheet1) 的代码中,我写道:
Private Sub Worksheet_Activate()
    MsgBox ("hello")
End Sub
但是当我打开文件时没有任何 react ......

最佳答案

如果 Sheet1打开工作簿时已经处于事件状态,然后

Worksheets("Sheet1").Activate
什么都不做。因为你不能激活已经激活的东西。
通过添加 2 张 Sheet1 来测试它和 Sheet2 .然后选择Sheet2保存文件并关闭它。现在再次打开它,它将运行Worksheets("Sheet1").Activate这将触发 Worksheet_Activate适本地。
另请注意 MsgBox ("hello")应该没有括号,因为它不会将值返回给变量:MsgBox "hello"
另一种解决方案是:
写在一个模块中:
Public Sub Sheet1_Activate()
     MsgBox "Sheet1 Activate"
End Sub
在 Sheet1 中写:
Private Sub Worksheet_Activate()
    Sheet1_Activate
End Sub
在 ThisWorkbook 中写道:
Private Sub Workbook_Open()
    If ThisWorkbook.ActiveSheet.Name = "Sheet1" Then
        Sheet1_Activate
    Else
        ThisWorkbook.Worksheets("Sheet1").Activate
    End If
End Sub
这个想法是有一个新的程序Sheet1_Activate它采用实际代码并由 Worksheet_Activate 触发以及Workbook_Open如果工作表已经是事件工作表。

关于excel - Worksheet.Activate 不会触发 Worksheet_Activate 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68481744/

相关文章:

excel - 在使用 Excel 中的自定义函数计算 IRR 时需要帮助

excel - 防止循环更新所有子字典值

c# - 为什么此代码会导致 Excel 无法正常关闭?

excel - VBA将列表变成5列表

vba - 如何在 VBA 中创建列表(而不是字典)?

excel - 删除所有重复行Excel vba

excel - 识别不包含 "formula"的单元格

c# - 如何在 MVC 中使用 EPPlus 从服务器下载 .xlsx 文件

excel - 引用表定义的范围内的一列

sql - 如何在 MakeTable 查询 - Access 2000 中添加虚拟行?