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

下载本书

添加书签

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


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
  
  
当工作簿被打开时,示例过程在单元格A1里放置当前日期  
示例12 – 试验:打开一个新工作簿,在VB编辑器窗口,激活工程浏览器窗口,并且打开Excel对 
象文件夹。双击ThisWorkbook, 并输入示例过程。保存并且关闭该工作簿。当你再次打开该工作 
簿时,当前日期就会被放置在当前活动工作表地单元格A1里。  
  
  
  
事件名称                           保存前  
事件描述                           示例13  

                                               273 

… 页面 290…

 该事件发生在工作簿被保存之 前。参数SaveAsUI是只读的,指 向SaveAs对话框。如果该工作簿 并 
 没有被保存过,那么SaveAsUI 参数的值就是True,否则为False  
  
Private Sub Workbook_BeforeSave(ByVal _  
 SaveAsUI As Boolean; Cancel As Boolean)  
  If SaveAsUI = True And _  
   ThisWorkbook。Path = vbNullString Then  
     MsgBox 〃This document has not yet 〃 _  
      & 〃been saved。〃 & vbCrLf _  
      & 〃The Save As dialog box will be displayed。〃  
  ElseIf SaveAsUI = True  
    Then MsgBox 〃You are not allowed to use 〃 _  
     & 〃the SaveAs option。 〃  
    Cancel = True  
  End If  
End Sub  
 如果该工作簿没有被保存过,那么示例程序将显示另存为对话框。如果该文 
 件没有被保存过,那么该  
 工作 簿的路径名将为字符串NULL(vbNullString)。过程不允许用户将该工 
 作簿保存为一个不同的名  
 称;另存 为操作将通过设置参数Cancel为True而中断。用户将需要选择保存 
 选项来保存该工作簿。  
 示例13 – 试验:打开一个新工作簿,在VB编辑器窗口,激活工程浏览器窗口并打开Excel对象文 
 件夹。双击ThisWorkbook  
 并且 在该代码窗口里输入示例程序。点击“If SaveASUI…”语句旁边的页边以放置一个断点。切 
 换到Excel窗口,并且在任意单元格 输入一些数据。点击工具栏上保存按钮。Workbook_BeforeSave 
 事件过程将会被激活。执行If SaveAsUI后面的语  
 句。在另存为 对话框里输入SaveEvent。xls作为该工作簿的名称。在保存(并命名)该工作簿之 
 后,对该工作簿作一些更改,  
 然后选择文件|另 存为。这次ElseIf子句将会被执行,并且你不会被允许通过使用SaveAs选项来 
 保存该工作簿。  
 事件名称                       打印前  
 事件描述                       示例8  
 该工作簿发生工作簿打印之前,  Private Sub Workbook_BeforePrint(Cancel _  
 以及打印对话框出现之前           As Boolean)  
                                  Dim response As Integer  
                                  response = MsgBox(〃Do you want to 〃 & vbCrLf & _  
                                    〃print the workbook's full name in the footer?〃; _  
                                     
                                    vbYesNo)  
                                  If response = vbYes Then  
                                    ActiveSheet。PageSetup。LeftFooter = _  
                                    ThisWorkbook。FullName  
                                  Else  
                                    ActiveSheet。PageSetup。LeftFooter = 〃〃  
                                  End If  
                                End Sub  
  
 在打印之前,如果用户点击了信息框的“是”,那么示例程序就会将工作簿的完整名称放入文件的 
 脚注里  
 示例14 – 试验:打开一个新工作簿,在VB编辑器窗口,激活工程浏览器窗口并打开Excel对象文 
 件夹。双击ThisWorkbook并且 在该代码窗口里输入示例程序。然后,切换到Excel窗口,并激活 
 任意工作表。在任意单元格里输入你想要输入的任意内容。当 你按下工具栏上的打印预览按钮时, 
 Excel将会询问你是否想要将工作簿名称和路径放入到脚注里。  
 事件名称                       关闭前  
 事件描述                       示例8  

                                           274 

… 页面 291…

 该事件发生在工作簿关闭之前, 并且在系统询问用户是否保存变 化之前  
Private Sub Workbook_BeforeClose(Cancel _  
  As Boolean)  
    If MsgBox(〃Do you want to change 〃 & vbCrLf _  
      & 〃 workbook properties before closing?〃; _  
      vbYesNo) = vbYes Then  
        Application。Dialogs(xlDialogProperties)。Show  
    End If  
End Sub  
  
 如果用户对信息框响应“是”时,示例程序将显示属性对话框  
 示例15 – 试验:在VB编辑器窗口,激活工程浏览器窗口并打开Excel对象文件夹。双击 
 ThisWorkbook并且在该代码窗口里输入 示例程序。然后,切换到Excel窗口,并关闭包含 
 BeforeClose事件程序的工作簿。在关闭之前,你将看到一个信息框,询问你是 否要更改文件属性。 
 在察看和修改工作簿属性之后,该过程关闭该工作簿。如果有些改变你还没有保存,那么你还有机 
 会去保存 该工作簿,取消该更改或者干脆终止该关闭操作。  
 事件名称                        安装加载宏  
 事件描述                        示例8  
 当用户安装该工作簿为一个加载 宏时,引发该事件  
   
 Private Sub Workbook_AddinInstall()  
  MsgBox 〃To create a calendar; 〃 & vbCrLf _  
    & 〃enter CalendarMaker in the 〃 & vbCrLf _  
    & 〃Macros dialog box。〃  
End Sub  
  
 请参考下述详细指导来引发Workbook_AddinInstall事件过程  
 示例16 – 试验:  
 1。  打开一个新工作簿  
 2。  切换到VB编辑器,激活工程浏览器窗口,并打开Excel对象文件夹  
 3。  双击ThisWorkbook并且输入示例16和示例17程序在ThisWorkbook代码窗口  
 4。  在当前VBA工程插入一个新模块,并且输入过程CalendarMaker,显示于示例17之后  
 5。  切换到Excel窗口,并选择文件|属性,在属性对话框里输入下述内容:标题:Calendar Maker 备注: 
      Create a monthly calendar in an Excel spreadsheet。当你加亮该加载宏名称时,上面 
      的信息将出现在加载宏对话框里面  
 6。  点击确定以退出属性对话框  
 7。  选择文件|另存为并且将该工作簿保存为Calendar。xls  
 8。  现在,选择文件|另存为,将Calendar。xls保存为一个加载宏。从另存为类型下拉清单,选 
      择Microsoft Excel加载宏。输入一 个新名称(CalendarMaker。xla)然后点击保存  
 9。  关闭Calendar。xls工作簿  
 10。   打开一个新工作簿  
 11。   选择工具|加载宏。使用浏览按钮将CalendarMaker加入到加载宏清单里面。勾选列表框里的 
      CalendarMaker加载宏。当你点 击确定后,Workbook_AddInInstall过程就会被引发。点击信 
      息框上的确定  
 12。   想要创建一个日历的话,可以选择工具|宏|宏,在宏名称文本框里输入CalendarMaker然后 
      点击运行,你将会被询问年和月, 输入年和月(例如,Nov 2005)并点击确定,将出现一日 
      历页,如图14…5所示  

                                             275 

… 页面 292…

                                                                               
     图14…5 由过程CalendarMaker创建的月历  
 13。   想要引发示例17中示范的AddInUninstall事件过程的话,可以选择工具|加载宏,并清除 
     CalendarMaker加载宏前面的勾选标 志就可以了。  
 事件名称                       卸载加载宏  
 事件描述                       示例17  
 当用户卸载一个加载宏时,引发 该事件  
   
 Private Sub Workbook_AddinUninstall()  
  MsgBox 〃The CalendarMaker 〃 & vbCrLf _  
    & 〃add…in was unloaded。〃  
End Sub  
  
 一旦该工作簿作为一个加载宏被卸载后,示例程序将显示一个信息  
 示例17 – 试验:参见示例16  
 下述过程CalendarMaker可在CodeLibrarian 加载宏里获得,这里用来示范工作簿对象的安装加载 
 宏和卸载加载宏事件的使用(参 见示例16和17)。  
 Sub CalendarMaker()  
      Dim MyInput As String  
      Dim StartDay As Date  
      Dim DayofWeek As Integer; CurYear As Integer; CurMonth As Integer  
      Dim FinalDay As Long  
      Dim cell As Range  
      Dim RowCell As Integer; ColCell As Integer  
      Dim x As Integer  
       ‘以上变量声明为译者加上的,以确保程序正常运行  
      ' protect sheet if had previous calendar to prevent error。 保护工作表,以避免之前 
      日历 带来的错误(原文误为Unprotect)  

       ActiveSheet。Protect DrawingObjects:=False; Contents:=False; _       
        Scenarios:=False  
      ' Prevent screen flashing while drawing calendar。 制作日历时防止屏幕闪烁  
      Application。ScreenUpdating = False  
      ' Set up error trapping。 设置错误陷阱  
      On Error GoTo MyErrorTrap  
      ' Clear area a1:g14 including any previous calendar。 清除a1:g14单元格区域的内容  
      Range(〃a1:g14〃)。Clear  
      ' Use InputBox to get desired month and year and set variable  
      ' MyInput。 使用输入框从用户获得年月,并赋予变量MyInput  
      MyInput = InputBox(〃Type in Month and year for Calendar 〃)  
      ' Allow user to end macro with Cancel in InputBox。 允许用户点击取消以终止宏  
      If MyInput = 〃〃 Then Exit Sub  
      ' Get the date value of the beginning of input month。 获取输入年月的日期序号  
      StartDay = DateValue(MyInput)  

                                           276 

… 页面 293…

     ' Check if valid date but not the first of the month 检查是否是有效日期,但不是当 
     月第一天  
     '  if so; reset StartDay
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架