如果希望在 Excel 中使用 Application 级别的事件过程,则需要在某个类模块中声明一个带事件驱动的 Application 类型对象。在 Excel 中,该类型对象可以在标准的类模块中声明,也可以在 Workbook、Worksheet 或 UserForm 等代码窗口中声明。
示例:修改新建工作簿的工作表的默认名称
新建工作簿的工作表的默认名称为“Sheet+索引号”的形式,本示例将其名称自动地更改为“果果云课堂+索引号”的形式。步骤如下:
添加声明
在 ThisWorkbook
代码窗口输入下面的语句,声明一个 xlApp
对象。
'------------------ ThisWorkbook ------------------
Private WithEvents xlApp As Application
选择事件过程
添加了声明后,在 ThisWorkbook
代码窗口的【对象】列表中可以看到刚才声明的 xlApp
对象已经出现在对象列表中,在对象列表中选择 xlApp
对象后,在代码窗口的【事件】列表中列出了该对象的事件,本示例由于是要修改新建工作簿的工作表的默认名称,这里选择 NewWorkbook
事件,选择好事件后,代码窗口自动输入事件的框架,我们只需添加代码即可,完整代码如下:
'------------------ ThisWorkbook ------------------
Private Sub xlApp_NewWorkbook(ByVal Wb As Workbook)
Dim i As Integer
For i = 1 To Wb.Sheets.Count
Wb.Sheets(i).Name = "果果云课堂" & i
Next
End Sub
xlApp_NewWorkbook
事件过程在新建工作簿时,将工作簿中所有的工作表的名称修改为“果果云课堂+索引号”的形式。
建立对象关联
在完成上面的操作之后,还必须建立对象关联。为了保证每次都能自动执行代码,可以将关联代码输入到工作簿的 Workbook_Open
事件中。
'------------------ ThisWorkbook ------------------
Private Sub Workbook_Open()
Set xlApp = Application
End Sub
释放对象
最后在工作簿的 BeforeClose
事件中添加释放对象的代码。
'------------------ ThisWorkbook ------------------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Set xlApp = Nothing
End Sub
保存工作簿
保存并关闭该工作簿后再重新打开示例文件(也可以在 VBE 窗口内,将光标放于 Workbook_Open
事件内,按 F5 键运行。),这时我们再新建一个工作簿,我们可以看到新工作簿中的工作表的默认名称已更改。
示例:禁止新建工作簿
将上述示例的 xlApp_NewWorkbook
事件代码更改为下列代码,其它代码不变,即可实现禁止新建工作簿的目的。
'------------------ ThisWorkbook ------------------
Private Sub xlApp_NewWorkbook(ByVal Wb As Workbook)
Wb.Close False
End Sub
示例:禁止重命名工作表
更多的示例请参考:在 Excel 中重命名工作表事件。