excel_vba_编程教程(完整版)-第76部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
作簿里添加新工作表以及关闭工 作簿时事件的顺序。
动作 对象 事件顺序
打开一个新工作簿 Workbook NewWorkbook;
WindowDeactivate;
WorkbookDeactivate;
WorkbookActivate;
WindowActivate
往工作簿添加新工作表 Workbook WorkbookNewSheet; SheetDeactivate;
SheetActivate
关闭工作簿 Workbook WorkbookBeforeClose;
WindowDeactivate;
WorkbookDeactivate;
WorkbookActivate; WindowActivate
4。工作表事件
工作表对象相应例如工作表激活和失活事件,计算工作表事件,工作表更改事件和双击或右键单
击事件。本节讨论一些工作表对 象能够响应的事件。
事件名称 激活
事件描述 示例1
当用户激活工作表时,发生该 Dim shtName As String ‘declared at the top 在模块上部声明
事 件 ‘ of the module
Private Sub Worksheet_Activate()
shtName = ActiveSheet。Name
Range(〃B2〃)。Select
End Sub
示例程序中,每次该工作表被激活时,选择单元格B2
示例1 – 试验:在VB编辑器窗口,激活工程浏览器窗口并打开Excel对象文件夹。双击Sheet2(Sheet2),
并且输入示例程序到Sheet2
268
… 页面 285…
代码窗口。接下来,切换到Excel窗口并激活Sheet2。注意,当Sheet2被激活时,被选择的总是单
元格B2。
事件名称 失活
事件描述 示例2
当用户激活不同的工作表时,发 Worksheet_Deactivate()
生该事件 MsgBox 〃You deactivated 〃 & _
shtName & 〃。〃 & vbCrLf & _
〃You switched to 〃 & _
ActiveSheet。Name & 〃。〃
End Sub
Private Sub
示例程序中,当Sheet2失活时,显示一个信息框
示例2 – 试验:在VB编辑器窗口,激活工程浏览器窗口并且打开Excel对象文件夹,双击Sheet2
(Sheet2),然后输入示例程序。 接下来,切换到Excel应用程序窗口并且激活Sheet2。你在示例1
里创建的Worksheet_Activate过程将会运行,Excel会选中单元 格B2并且将工作表名称存储于你
在Sheet2的代码模块上面声明的全局变量shtName里面。现在,点击当前工作簿里的其它工作 表,
注意,Excel将显示你离开的工作表名称和你要切换到的工作表名称。
事件名称 选择变化
事件描述 示例3
当用户选择工作表单元格时,发 Private Sub Worksheet_SelectionChange(ByVal Target As
生该事件 Excel。Range) ‘可省略Excel,下同。
On Error Resume Next
Set myRange = Intersect(Range(〃A1:A10〃); Target)
If Not myRange Is Nothing Then
MsgBox 〃Data entry or edits are not permitted。〃
End If
End Sub
示例程序中,当用户选择任何myRange中的单元格或区域时,显示一个信息框
示例3 – 试验:在VB编辑器窗口,激活工程浏览器窗口并且打开Excel对象文件夹,双击Sheet3
(Sheet3),并且在Sheet3代码窗 口里输入该示例程序。然后切换到Excel窗口并激活Sheet3。点
击给定区域A1:A10中的任何单元格。注意,Excel将显示一个信 息。
Private Sub Worksheet_Change(ByVal Target _
事件名称 变化
As Excel。Range)
事件描述 例4
Application。EnableEvents = False
当用户更改单元格内容时,引发 Target = UCase(Target)
该事件 Columns(Targetlumn)。AutoFit
Application。EnableEvents = True
End Sub
示例程序中,你输入的内容会自动变为大写,并且该列列宽将自动适应内容文本长短
(Sheet1),并且在Sheet1代码窗 口里输入该示例程序。然后切换到Excel窗口并激活Sheet1。在
任意单元格里输入任何文本,注意,你一旦按下回车键,Excel 就会将该文本变为大写,然后该
列自动适应文本长度。
事件名称 计算
事件描述 示例5
当用户重新计算工作表时,引发 Private Sub Worksheet_Calculate()
该事件 MsgBox 〃The worksheet was recalculated。〃
End Sub
一旦工作表重新计算,示例程序就会弹出一信息
示例5 – 试验:在当前工作簿里添加一个新工作表,练习假定Excel会在你的工作簿里放置Sheet4。
往Sheet4的单元格A2里输入1,B2里输入2。在单元格C2里输入下述公式:= A2 + B2。在VB编辑器
窗口,激活工程浏览器窗口并且打开Excel对象文件夹, 双击Sheet4 (Sheet4),并且输入如上所
269
… 页面 286…
示得Worksheet_Calculate事件程序。切换到Excel窗口并激活Sheet4,在B2单元格里输 入任何数
字。注意,当退出编辑模式后,Worksheet_Calculate事件就被引发了,你也就看到了一个自定义
的信息。
事件名称 双击前
事件描述 示例6
当用户双击工作表单元格时,引 Private Sub Worksheet_BeforeDoubleClick(ByVal _
发该事件 Target As Range; Cancel As Boolean)
If Target。Address = Range(〃C9〃) Then
MsgBox 〃No double…clicking; please。〃
Cancel = True
Else
MsgBox 〃You may edit this cell。〃
End If
End Sub
示例程序不允许双击时单元格内部直接编辑C9
示例6 – 试验:在VB编辑器窗口,激活工程浏览器窗口并且打开Excel对象文件夹,双击Sheet2
(Sheet2),并且在Sheet2代码窗 口里输入该示例程序。然后切换到Excel窗口并激活Sheet2。当
你双击单元格C9时,该事件过程取消了内置的Excel行为,用户 不允许进行单元格内部直接编辑。
然而,用户可以绕过该限制,点击编辑栏或者按下F2键。当你编写一些事件程序来禁止访问 某
些功能时,请编写一些额外的代码以禁止一些工作区。 (如隐藏编辑栏,隐藏工作表标签等)
事件名称 右键单击前
事件描述 示例7
当用户右键单击工作表单元格 Private Sub Worksheet_BeforeRightClick(ByVal _
时,引发该事件 Target As Range; Cancel As Boolean)
With ApplicationmandBars(〃Cell〃)
。Reset
If Target。Rowsunt 》 1 Or _
Targetlumnsunt 》 1 Then
With ntrols。Add(Type:=msoControlButton; _
before:=1; temporary:=True)
。Caption = 〃Print。。。〃
。OnAction = 〃PrintMe〃
End With
End If
270
… 页面 287…
End With
End Sub
Sub PrintMe()
Application。Dialogs(xlDialogPrint)。Show arg12:=1
End Sub
示例程序中,当用户选择区域不止一行一列时,就会在单元格快捷菜单上添加一个Print选项
示例7 – 试验:在VB编辑器窗口,激活工程浏览器窗口并且打开Excel对象文件夹,双击Sheet2
(Sheet2),并且在Sheet2代码窗 口里输入该示例程序。在当前工程里添加一个新模块,并且输入
PrintMe过程,如上所示。当用户从快捷菜单上选择Print选项时, 该过程就会被
Worksheet_BeforeRightClick事件调用。注意,对话框的Show方法后面带了个名为arg12:=1的参
数。该参数让打 印对话框显示时,勾选“所选区域”(通常是“所选工作表”)。在适当的模块
里输入完两个过程后,切换到Excel窗口并激活 Sheet2。在任何单个单元格上单击右键,注意,
这时出现的快捷菜单为缺省选项。现在,我们重新选择,这次包括多个单元格, 并且在所选区域
上单击右键,你将看到Print…选项出现在第一位置。点击Print选项,注意,打印对话框显示的
是所选区域,而 不是缺省的所选工作表。
注意:参见第十章中使用快捷菜单的更多信息,还有,参见图10…3,如何定位Excel的内置参数列
表。
事件名称 跟踪链接
事件描述 示例8
当用户点击Excel工作表中的 Private Sub Worksheet_FollowHyperlink(ByVal _
链 接时,引发该事件 Target As Hyperlink)
Target。AddToFavorites
End Sub
示例程序将用户点击的链接添加到IE的收藏夹里
示例8 – 试验:在VB编辑器窗口,激活工程浏览器窗口并且打开Excel对象文件夹,双击Sheet1
(Sheet1),并且在Sheet1代码窗 口里输入该示例程序。切换到Excel窗口,并在任何单元格里输
入一网址,比如wordware然后回车。现在,点击该链 接激活该网址,当IE窗口出现后,
打开收藏菜单,就会发现Word