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

excel_vba_编程教程(完整版)-第60部分

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



                                Application或者 Workbook类型对象。 
                                 (参见“图表事件”和“应用程序对象识 
                                别的事 件”部分有关该关键字使用的示 
                                例)  
 SheetPivotTableUpdate          当数据透视表报告被更新后发生该事件。该事件要求你在类模块里使 
 需要下述两个参数:             用 关键字WithEvents声明一个Application或者Workbook的type对 
 Sh – 被选择的工作表           象(参 见示例 9,需要使用关键字WithEvents设置事件处理的相关 
 Target – 被选择的数据透视表  信息)。该 事件处理可以在附带CD里的PivotReport。xls里找到。  
 报 告                          Private Sub App_SheetPivotTableUpdate( _  
                                  ByVal Sh As Object; ByVal Target As PivotTable)  
                                    MsgBox 〃Pivot Table has been updated。〃  
                                End Sub  

                                           281 

… 页面 298…

  

6。图表事件  

  众所周知,你可以创建一个内嵌在工作表里的图表,也可以创建一个单独的图表工作表。在本节, 
 你将学习如何控制图表事件, 不管你决定了将你的图表放在哪里。在你试验图表事件之前,做以 
 下几件事情:  
 1。  打开一个新Excel工作簿,并且保存为ChartEvents。xls  
 2。  输入示例数据,如图14…6所示  
 3。  选择单元格区域A1:D4,并点击工具栏上的图表按钮  
 4。  准备一个柱型图,如图14…6所示,并将其内嵌于工作表内  
 5。  使用相同的数据,创建一个折线图于一个单独的图表工作表(参见图14…7)  
 6。  将图表工作表名称改为Sales Analysis Chart。  
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
                                                                     
   
 图14…6 内嵌于工作表的柱型图  

                                                                                             
 图14…7 置于图表工作表里的折线图  
 下面的表格列出了图表对象的事件。在该表格里示范的示例程序应该在你刚才放置在图表工作表里 
 的折线图上试验(参见图  
 14…7)。内嵌于工作表里的图表的事件需要特别设置,本章稍候将讲解。  
 1。  在VB编辑器窗口,激活工程浏览器窗口并打开Excel对象文件夹  
 2。  双击图表对象Chart1 (Sales Analysis Chart)  
 3。  在代码窗口,输入事件程序,如下表所示  
 4。  激活图表工作表,并执行一些将引发事件过程的操作。例如,点击图表标题后, 
                                          282 

… 页面 299…

    Chart_MouseDown和Chart_Select事件就 会被引发。  
事件名称                        描述  
Activate                        当用户激活图表工作表时引发该事件  
                                Private Sub Chart_Activate()  
                                  MsgBox 〃You've activated the chart sheet。〃  
                                End Sub  
Deactivate                      当用户离开该图表时引发该事件(进入其它工作表)  
                                Private Sub Chart_Deactivate()  
                                  MsgBox 〃It looks like you want to leave the chart sheet。〃  
                                End Sub  
Select                          当用户选择了某个图表成员时引发该事件  
                                Private Sub Chart_Select(ByVal ElementID As Long; _  
                                  ByVal Arg1 As Long; ByVal Arg2 As Long)  
                                    If Arg1  0 And Arg2  0 Then  
                                      MsgBox ElementID & 〃; 〃 & Arg1 & 〃; 〃 & Arg2  
                                    End If  
                                    If ElementID = 4 Then  
                                   MsgBox 〃You've selected the chart title。〃  
                                    ElseIf ElementID = 24 Then  
                                      MsgBox 〃You've selected the chart legend。〃  
                                    ElseIf ElementID = 12 Then  
                                      MsgBox 〃You've selected the legend key。〃  
                                    ElseIf ElementID = 13 Then  
                                      MsgBox 〃You've selected the legend entry。〃  
                                    End If  
                                End Sub  
ElementId返回一个代表所选图表成员的常数。参数Arg1和Arg2用于某些相关的 
图表成员上。例如,图表坐 标轴(ElementId=21),可以明确是主坐标轴(Arg1=0) 
或者次坐标轴 (Arg1=1),而坐标轴的类型则由 参数Arg2确定,它可以是下述 
三种之一:  
0 – 分类轴,1 – 数值轴,或者3 – 系列轴  
SeriesChange                    当用户更改图表数据点时,引发该事件。图表对象应该在类模块 
                                里使用 关键字WithEvents进行声明。  
Calculate                       当用户选择新数据或者改变图表数据时,引发该事件。  
                                Private Sub Chart_Calculate()  
                                  MsgBox 〃The data in your spreadsheet has 〃 & vbCrLf _  
                                    & 〃changed。 Your chart has been updated。〃  
                                End Sub  
Resize                          当用户改变图表大小时,引发该事件。该图表对象应该在类模块 
                                里面使 用WithEvents关键字来声明  
DragOver                        当用户拖曳数据到该图表时,引发该事件。该图表对象应该在类 
                                模块里 面使用WithEvents关键字来声明  
DragPlot                        当用户拖曳单元格区域到图表时,引发该事件。该图表对象应 
                                该在类模 块里面使用WithEvents关键字来声明  
BeforeDoubleClick               当用户双击图表时,引发该事件  
BeforeRightClick                当用户右键单击图表时,引发该事件  
                                Private Sub Chart_BeforeRightClick(Cancel As Boolean)  
                                  Cancel = True  
                                End Sub  
当你将参数Cancel设置为True后,你就不能访问图表区域快捷菜单了  
MouseDown                       当光标在图表之上并按下鼠标时,引发该事件  
                                Private Sub Chart_MouseDown(ByVal Button As Long; _  
                                  ByVal Shift As Long; ByVal x As Long; ByVal y As _  
                                         Long)  
                                        If Button = 1 Then  
                                        MsgBox 〃You pressed the left mouse button。 〃  
                                        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:=xlWorkbookN
返回目录 上一页 下一页 回到顶部 1 2
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!