我在vba中创建了宏,但是它们不能工作。
在我编写的ThisWorkbook代码中:
Private Sub Workbook_Open()
Worksheets("Sheet1").Activate
End Sub在Sheet1 (Sheet1)的代码中,我写道:
Private Sub Worksheet_Activate()
MsgBox ("hello")
End Sub但当我打开文件什么都不会发生..。
发布于 2021-07-22 09:00:38
如果打开工作簿时Sheet1已处于活动状态,则
Worksheets("Sheet1").Activate什么都不做。因为您不能激活已经激活的内容。
通过添加两个工作表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触发,以防工作表已经是活动的工作表。
发布于 2021-07-22 09:02:30
Sub auto_open()
MsgBox "HueHueHue"
End Sub你不能激活同样的东西两次。
https://stackoverflow.com/questions/68481744
复制相似问题