靠谱电子书 > 经管其他电子书 > excel_vba_编程教程(完整版) >

第81部分

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

小说: excel_vba_编程教程(完整版) 字数: 每页4000字

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



                                          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  
                               End Sub  
 WorkbookBeforePrint           该事件发生在以大开工作簿被打印之前  
                               Private Sub App_WorkbookBeforePrint(ByVal _  
                                 Wb As Workbook; Cancel As Boolean)  
                                               Wb。PrintOut   
                                            Copies:=2  
                               End Sub  
 WorkbookBeforeClose           该事件发生于关闭工作簿之前  
                               Private Sub App_WorkbookBeforeClose( ByVal _  
                                 Wb As Workbook; Cancel As Boolean)  
                                      Dim r As Integer  
                                          Sheets。Add  
                                         r = 1  
                               For Each p In Wb。BuiltinDocumentProperties  
                               On Error GoTo ErrorHandle  
                               Cells(r; 1)。Value = p。Name & 〃 = 〃 &   
                                   ActiveWorkbook。 _  
                              BuiltinDocumentProperties _  
                                          。Item(p。Name)。Value  
                                            r = r + 1  
                                          Next  
                                            Exit Sub  
 ErrorHandle:  
                                    Cells(r; 1)。Value = p。Name  
                                              Resume Next  
                               End Sub  
 WorkbookAddInInstall          该事件发生于用户安装加载宏之时  
 WorkbookAddInUninstall        该事件发生于用户卸载加载宏之时  
 SheetActivate                 当用户激活开启工作簿中某个工作表时引发该事件  
 SheetDeactivate               当用户离开某个工作表时引发该事件  
 SheetSelectionChange          当用户改变选择工作表上的区域时引发该事件  
                               Private Sub App_SheetSelectionChange( _  
                                 ByVal Sh As Object; ByVal Target As Range)  
                              If Selectionunt 》 1 Or _  
                               (Selectionunt 《 2 And _  
                              IsEmpty(Target。Value)) Then  
                                             Application。StatusBar = Target。Address  
                                     Else  
                                               
                                     End If  Application。StatusBar = Target。Address & _  
                               End Sub         〃(〃 & Target。Value & 〃)〃  

  
 SheetChange                   当用户在一个打开的工作簿里改变单元格里的内容时引发该事 
 件  
 SheetCalculate                当用户重新计算某个开启的工作簿里的工作表时引发该事件  
 SheetBeforeDoubleClick        当用户双击工作表时引发该事件  
 SheetBeforeRightClick         当用户右键单击工作表单元格时引发该事件  
 WindowActivate                当用户激活一个打开的窗口时引发该事件  
Private Sub App_WindowActivate(ByVal _  
  Wb As Workbook; ByVal Wn As Window)  
                              Wn。DisplayFormulas = True  

                                          286 

… 页面 303…

                                 End Sub  
WindowDeactivate                 当用户将焦点从开启的窗口移走时引发该事件  
WindowResize                     当用户调整开启的窗口的大小时引发该事件  
WorkbookPivotTableClose…         在数据透视表报告连接被断开后,引发该事件  
Connection                         
 (Excel 2002的新事件)          在数据透视表报告连接被打开后引发该事件  

WorkbookPivotTableOpen…  
Connection  
 (Excel 2002的新事件)  

                                             287 

… 页面 304…

  

9。查询表时间  

  查询表是Excel工作表里代表从外部数据源得来的数据,例如SQL服务器数据库,Access数据 
 库,网页,或者文本文件。查询表 用对象QueryTable代表。Excel为QueryTable对象提供了两 
 种事件:BeforeRefresh和AfterRefresh。想要试验一下本章后面示范 的这些示例过程的话, 
 那么请执行下面的这些操作。本示例假设你的机器上安装了Access以及其例子Northwind数据 
 库。  
 1。  在Excel应用软件窗口,选择数据|导入外部数据,并且选择新建数据库查询以创建一个新 
 数据库查询  
 2。  在数据源对话框里,选择新数据源,并点击确定  
 3。  在创建新数据源对话框里,输入SampleDb作为数据源名称  
 4。  在创建新数据源对话框上,从第二步旁边的下拉列表里,选择Microsoft Access driver  
  (*。mdb)  
 5。  点击连接按钮  
 6。  在ODBC Microsoft Access安装对话框上点击选择按钮  
 7。  在选择数据库对话框上,找到文件Northwind。mdb。该文件通常可以在C:Program  
     FilesMicrosoft OfficeOfficeSamples文 件夹找到(译者用的是Office 2003,没有 
      该文件,有一个类似的Nwind。mdb文件。大家可以在电脑上查找一下)  
 8。  选择该文件并且点击确定以关闭该选择数据库对话框  
 9。  在点击确定退出ODBC Microsoft Access安装对话框  
 10。   在创建新数据源对话框的第四步,在下拉列表框里选择Categories  
 11。   点击确定以关闭创建新数据源对话框  
 12。   在选择数据源对话框上,数据源名称SampleDb现在应该被加亮了,点击确定  
 13。   在查询向导 – 选择列对话框里,点击》按钮,将Categories表中所有的区域移到查询框 
 的列中去  
 14。   点击下一步,直到你看到查询向导 – 完成对话框  
 15。   在查询向导 – 完成对话框上,确保将数据返回到Microsoft Excel选项按钮是被勾选上 
 的,并且点击完成  
 16。   在导入数据对话框,当前电子表格单元格是被选中的,点击单元格A1并点击确定关闭对 
 话框。 完成上述步骤后,Northwind数据库里Catetory表中的数据应该被放置在当前工作表里 
 面了。重新获得数据是得花费好些步骤的。 在下章,你将学习如何编程创建查询表。想要给 
 查询表对象编写事件过程的话,你就必须创建一个类模块并且使用WithEvents 关键字声明一 
 个QueryTable对象。  
 1。  插入类模块到当前VBA工程并重命名为clsQryTbl  
 2。  在clsQryTbl代码窗口,输入下述语句:  
     Public WithEvents qrytbl As QueryTable  
      当你使用WithEvents关键字声明完新对象qrytbl后,它就会出现在类模块的对象下拉列表 
      中  
 3。  在clsQryTbl代码窗口,输入两个事件过程,如下面的表格所示:QryTbl_BeforeRefresh 
     和QryTbl_AfterRefresh。在你能够 引发这些事件过程之前,你必须将你在类模块里声 
      明的对象和某个特定的QueryTable对象连接起来  
 4。  插入一个标准模块,并输入下述代码:         
      Public Sub Auto_Open()  
         ' connect the class module and its objects with the Query object  
         Set sampleQry。qrytbl = ActiveSheet。QueryTables(1)  
      End Sub 上面的程序创建了一个QueryTable类(clsQryTbl)的新示例,并且将它和活动 
      工作表里的第一个查询表连接起来。当你打开 该工作簿时,Auto_Open过程会自动执行。 
      因此你不必手动运行它,以确保当数据被刷新时,查询事件将会被引发。  
 5。  运行第四步输入Auto_Open过程,在你运行完该初始化过程后,你在类模块里声明的对象就 
 会指向特定的查询表对象  
 6。  在你放置从Access里导入的Category的工作表里,更改某个类别。选择查询表中的任意单 
     元格,并且点击外部数据工具栏 上的刷新数据,或者选择数据|刷新数据。这次,事件过程 
      qrytbl_BeforeRefresh将会被引发了,你将看到一个自定义信息框。 如果你点击是,该 
      数据将会被数据库里存在的数据刷新掉,你更改过的数据将会被覆盖掉。  
   
   
 事件名称                        描述  

                                           288 

… 页面 305…

 BeforeRefresh                  该事件发生在查询表被刷新数据之前  
                                Private Sub qryTbl_BeforeRefresh(Cancel As Boolean)  
                                  Response = MsgBox(〃Are you sure you 〃 _  
                                    & 〃 want to refresh now?〃; vbYesNoCancel)  
                                  If Response = vbNo Then Cancel = True  
                                End Sub  
 AfterRefresh                   该事件发生在查询完成或者被取消。如果查询成功完成则参 
 数Success  
                                为True。  
                                Private Sub qryTbl_AfterRefresh(ByVal Success As  
                                Boolean)  
                                  If Success Then  
                                      MsgBox 〃The data has been refreshed。〃  
                                  Else  
                                  MsgBox 〃The query failed。〃  
                                 End If  
                                End Sub  

10。接下来……   

     在本章中,你获得

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的