《excel_vba_编程教程(完整版)》

下载本书

添加书签

excel_vba_编程教程(完整版)- 第86节


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!

                                          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窗口出现后, 
打开收藏菜单,就会发现Wordware网址已经被添加到该菜单里了。  
事件名称                      更新数据透视表  
事件描述                      示例9  
工作表中的数据透视表被更新      
后,就会发生该事件。它是Excel Private Sub pivTbl_PivotTableUpdate( _  
2002的新事件。参数Target明确    ByVal Target As PivotTable)  
所选地数据透视表。 pivTbl是个     MsgBox Target。Name & _  
                                    〃 report has been updated。〃 & vbCrLf _  
变量,指向类模块里使 用             & 〃The PivotReport is located in cells 〃 & _  
WithEvents关键字声明的工作        Target。DataBodyRange。Address  
表的对象                      End Sub  
  
示例程序显示一信息,描述被更新的数据透视表的名称和发生在工作表上报告的单元格区域地址。  
示例9 – 试验:打开位于本书附带光盘上的文件PivotReport_2。xls,点击数据透视表上的任意 
单元格,并且点击数据透视表工具 栏上的更新数据按钮。图14…3和14…4示范了如何创建 
PivotTableUpdate事件句柄。  

                                         271 

… 页面 288…

  
 图14…3 你必须使用类模块来捕捉PivotTableUpdate事件。该类模块可以是任何有效的模块名称。 
 对象变量名称pivTbl,也可以是 任何有效的变量名称  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 图14…4 你在能够捕捉PivotTableUpdate事件之前,必须在标准模块里设立类模块的示例,并且将 
 对象Worksheet赋予新对象的属 性pivTbl。  

5。工作簿事件  

  当用户执行一些操作,如打开,激活,打印,保存以及关闭工作簿时,发生工作簿对象事件。工 
 作簿事件不会创建在标准VBA 模块里,想要编写响应工作簿事件的代码的话,那么需要双击VB编辑 
 器里的工程浏览器中的ThisWorkbook。在出现的代码窗口, 打开对象下拉清单并且选择Workbook 
 对象。在过程下拉清单里选择你想要地事件。被选择的事件过程将出现在代码窗口。例如:          
 Private Sub Workbook_Open()  
       在此放置你的事件处理代码  

                                           272 

… 页面 289…

End Sub  
本节描述工作簿一些可用的事件。  
事件名称                           激活  
事件描述                           示例10  
当用户激活该工作簿时,引发该 Private Sub Workbook_Activate()  
事件。当用户从其它应用程序切   MsgBox 〃This workbook contains 〃 & _  
换到Excel工作簿时,不会引发该          ThisWorkbook。Sheetsunt & 〃sheets。〃  
                                   End Sub  
事件  
当用户激活包含Workbook_Activate事件过程的工作簿时,示例程序显示该工作簿含有的工作表数 
 目  
示例10 – 试验:在VB编辑器窗口,激活工程浏览器窗口并且打开Excel对象文件夹,双击 
ThisWorkbook并且在其代码窗口里输 入示例过程。然后,切换到Excel窗口并且打开一个新工作 
簿。切换到你输入了Workbook_Activate过程的工作簿,这时,Excel 将显示该工作簿里的工作 
表总数。  
事件名称                           失活  
事件描述                           示例11  
当用户激活Excel的其它工作簿  Private Sub Workbook_Deactivate()  
时,引发该事件。当用户切换到         For Each cell In _  
其它应用软件时,不会发生该事           ActiveSheet。UsedRange  
件。                                      If Not IsEmpty(cell) Then  
                                            Debug。Print cell。Address & _  
                                              〃:〃 & cell。Value  
                                         End If  
                                     Next  
                                   End Sub  
  
  
当用户激活其它工作簿时,示例程序将在立即窗口里打印当前工作簿里有输入的单元格地址和数值  
示例11 – 试验:在VB编辑器窗口,激活工程浏览器窗口并且打开Excel对象文件夹。双击 
ThisWorkbook,然后输入示例程序于 代码窗口。切换到Excel窗口,并且在活动工作表里输入一 
些东西。然后,激活某个不同的工作簿。该动作将激发 Workbook_Deactiate事件过程。切换到 
VB编辑器窗口,并打开立即窗口察看什么单元格输入有了报告。  
事件名称                           打开  
事件描述         示例12  
当用户打开工作簿时引发该事件 Private Sub Workbook_Open()  
                                     ActiveSheet。Range(〃A1〃)。Value = Format _  
                                        (Now(); 〃mm/dd/yyyy〃)  
                                   End Sub  
  
  
当工作簿被打开时,示例过程在单元格A1里放置当前日期  
示例12 – 试验:打开一个新工作簿,在VB编辑器窗口,激活工程浏览器窗口,并且打开Excel对 
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架