我在 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/