友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
飞读中文网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

excel_vba_编程教程(完整版)-第103章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



                                        ElseIf Button = 2 Then  
                                            283 

… 页面 300…

                                       MsgBox 〃You pressed the right mouse button。 〃  
                              Else  
                                  MsgBox 〃You pressed the middle mouse button。 〃  
                                   End If  
                                End Sub  
 按键参数决定哪个鼠标键被按下(MouseDown事件),或者释放(MouseUp事件)了:  
 1 – 鼠标左键,2 – 鼠标右键,4 – 鼠标中键  
 Shift参数明确Shift键,Ctrl键和Alt键的状态:  
 1… 选择了Shift键,2 – 选择 
 了Ctrl键,以及4 – 选择了Alt 
 键 参数x; y 分别明确鼠标指 
 针坐标  
 ouseMove                      当鼠标指针坐标在图表之上变化时,引发该事件  
 MouseUp                       当鼠标按键在图表之上释放时,引发该事件  

7。内嵌图表事件  

  想要捕捉工作表内嵌图表的事件的话,那么你首先要在类模块里使用关键字WithEvents创建一个 
 新的对象。我们按照下述步骤 来看看如何实现它:  
 1。 激活VB编辑器窗口  
 2。  在工程浏览器里,选择VBAProject(ChartEvents。xls)  
 3。  选择插入|类模块  
 4。  在类模块文件夹里,你将看到一个名叫Class1的模块  
 5。  在属性窗口,将Class1重命名为clsChart  
 6。  在类模块的代码窗口里,声明一个对象变量,它将代表产生事件的图表对象  
     Public WithEvents xlChart As Excel。Chart 关键字Public将使对象变量xlChart可用于当 
     前VBA工程里的所有模块。使用WithEvents关键字声明一个对象变量,将暴露 该被定义对象 
     类型的所有事件。输入上述声明之后,对象变量xlChart就会添加到代码窗口左上角地对象 
     下拉列表中去,而 与该对象变量相对应的事件就会出现在代码窗口右上角的过程下拉列表 
     里面。  
 7。  打开对象下拉列表框并选择变量xlChart名称,现在代码窗口将出现xlChart_Activate过程的 
 构架:    
      Private Sub xlChart_Activate()  
      End Sub  
 8。  在该事件过程里添加你的代码。在本练习中,我们将添加一条语句,显示一个信息框。添 
     加完语句后,VBA过程应该像这 样:     
      Private Sub xlChart_Activate()  
        MsgBox 〃You’ve activated a chart embedded in 〃 & _  
          ActiveSheet。Name  
      End Sub  
      输入完事件过程后,你仍然需要通知VB,你计划使用它。  
 9。  在工程浏览器窗口,双击ThisWorkbook对象,并且输入下述语句来创建名为clsChart的新示例:  
     Dim myChart As New clsChart 上面显示的指令声明一个名为myChart的对象变量,该变量将 
     指向位于类模块clsChart里的对象xlChart。关键字New告诉VB 去创建特定对象的新示例。  
 10。   在ThisWorkbook代码窗口输入下述过程,以初始化对象变量myChart:  
      Sub InitializeChart()  
        ' connect the class module and its objects with the Chart object  
        Set myChart。xlChart = _  
             Worksheets(1)。ChartObjects(1)。Chart  
      End Sub  
 11。   运行InitializeChart过程。运行该过程之后,输入在类模块里的事件过程就会被相应的事件 
 引发  
 12。   激活Excel窗口,并且点击内嵌图表。这次,你在第七步输入的xlChart_Activate事件将会 
 被引发  
 13。   现在,你可以在类模块里给内嵌图表输入其它的事件过程了。  

                                           284 

… 页面 301…

8。可为应用软件对象识别的事件  

  如果你想要你的事件过程无论在哪个当前活动的Excel工作簿上都能执行的话,那么你需要创建 
 应用软件对象的事件过程。应用 软件对象的事件过程具有全局性。这意味着只要Excel应用软件 
 是开启的,那么该过程代码就会响应某个事件被执行。 Application对象的事件列在接下来的表 
 格中。和内嵌图表类似,Application对象的事件过程要求你在类模块里使用关键字 WithEvents 
 创建一个新的对象。表格中示范的事件事例程序应该在类模块里面输入。如何操作呢?在VB编辑 
 器窗口选择插入|类 模块,在属性窗口重命名类模块为clsApplication。在clsApplication代码 
 窗口声明一个对象变量来代表Application对象,如下所 示:  
 Public WithEvents App As Application 在声明语句下面,输入下述事件过程,如表格所示: 
 App_NewWorkbook,App_WorkbookOpen,App_WorkbookBeforeSave, App_WorkbookBeforeClose, 
 App_Sheet… SelectionChange和 App_WindowActivate事件过程。你输入完这些过程在类模块里  
 之后,插入一个标准模块到当前VBA工程里(选择插入|模块)。在标准模块里,创建一个类 
 clsApplication的新示例,并且将位 于类模块clsApplication里的对象和代表Application对象 
 的对象变量App连接起来,如下所示:  
 Dim DoThis As New clsApplication  
 Public Sub InitializeAppEvents ()  
       Set DoThis。App = Application            
 End Sub 现在将鼠标光标置于过程InitializeAppEvents里并且按下F5键运行它。运行过程 
 InitializeAppEvents的结果是类  
 模块的对象App 将会指向Excel应用软件。从现在开始,当某个具体事件发生时,你已经输入在 
 类模块里的事件过程就会被执行。如果你不想相 应Application对象产生的事件的话,你可以通 
 过在一个标准模块里输入下述过程(并运行它):  
 Public Sub CancelAppEvents()  
       Set DoThis。App = Nothing  
 End Sub  
   
 当你设置对象变量为Nothing的时候,你实际上释放了内存,并且断开了对象变量和该变量指向的 
 对象之间的连接。当你运行过 程CancelAppEvents后,写在类模块里面的事件过程在某个事件发 
 生就不会自动执行。 注意:所有在本表格里示范的事件过程,都需要你在类模块里使用关键字 
 WithEvents声明个对象变量。  
 事件名称                      描述  
 NewWorkbook                   当用户创建一个新工作簿时引发该事件  
                               Private Sub App_NewWorkbook(ByVal _  
                                 Wb As Workbook)  
                                   Application。DisplayAlerts = False  
                                   If Wb。Sheetsunt = 3 Then  
                                       Sheets(Array(2; 3))。Delete  
                                   End If  
                                   Application。DisplayAlerts = True  
                               End Sub  
 WorkbookOpen                  该事件发生于用户打开一个工作簿  
                               Private Sub App_WorkbookOpen(ByVal Wb As Workbook)  
                                 If Wb。FileFormat = xlCSV Then  
                                     If MsgBox(〃Do you want to save 〃 & vbCrLf _  
                                       & 〃 this file as an Excel workbook?〃; vbYesNo; _  
                             〃Original file format: 〃 _  
                                       & 〃ma delimited file〃) = vbYes Then  
                                          Wb。SaveAs FileFormat:=xlWorkbookNormal  
                                         End If  
                                 End If  
                               End Sub  
 WorkbookActivate              当用户将焦点移到一个开启的工作簿时引发该事件  
 WorkbookDeactivate            当用户将焦点从一个开启的工作簿移开时引发该事件  
 WorkbookNewSheet              当用户在一个打开的工作簿上新建一个工作表时引发该事件  
 WorkbookBeforeSave            该事件发生在以大开工作簿被保护之前  

                                          285 

… 页面 302…

                               Private Sub App_WorkbookBeforeSave(ByVal _  
                                 Wb As Workbook; _  
                                 ByVal SaveAsUI As Boolean; _  
                                 Cancel As Boolean)  
                                If Wb。Path  vbNullString Then  
                                 ActiveWindow。Caption = Wb。FullName & _  
                                             〃 'Last Saved: 〃 & Time & 〃'〃  
                                                End If  
                           
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!