首页 > Excel专区 > Excel函数 >

Excel2007中输入事件处理程序的VBA代码

Excel函数 2023-01-13

每个事件处理程序必须存放在特定类型的代码模块中。工作簿级别事件的代码应该放在ThisWorkbook代码模块中,工作表级别事件的代码应该放在特定工作表的代码模块中(例如,命名为Sheet1的代码模块)。
 此外,每个事件处理程序都有预先确定的名称。可以通过键入名称来声明过程,但是更好的方法是让VB编辑器做这项工作。如图显示了ThisWorkbook对象的代码模块。要插入过程声明,从左侧的对象列表中选择Workbook。然后从右侧的程序列表中选择事件。完成上述工作时,就得到了包含过程声明行和End Sub语旬的过程“shell”
 例如,如果从对象列表中选择了“Workbook”,从程序列表中选择了Open,则“VB编辑器”将插入下列(空)过程代码:

Private Sub Workbook Open()

End Sub

 事件处理程序的VBA代码将置于上述两行之间。
  一些事件处理程序包括参数列表。例如,您可能需要创建事件处理程序来监控工作簿的SheetActivate事件。如果使用前面部分讨论的技术,VB编辑器将创建以下事件过程:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

End Sub

 该过程使用了一个参数(Sh),它代表了激活的表。在这种情况下,Sh被声明为。object数据类型而非Worksheet 数据类型,因为被激活的表也可能是一个图表。
 当然,代码也可利用信息作为一个参数进行传递。下面的例子就是通过访问参数的Name属性,来显示被激活表的名称。参数成为Worksheet对象或是Chart对象。

private Sub Workbook_SheetActivate(ByVal Sh As Object)
MsgBox Sh.Name & " was activated."
End Sub

  一些事件处理程序使用被命名为Cancel的“布尔”参数。例如,工作簿的BeforePrint事件的声明如下:

private Sub Workbook BeforePrint(Cancel As Boolean)

  传递给过程的Cancel值为False。然而,代码可将Cancel的值设为True,这就取消了打印。下面的例子对此进行了演示:

Private Sub Workbook BeforePrint(Cancel As Boolean)
Msg= "Have you loaded the 5164 label stock? "
Ans=MsgBox(Msg,vbYesNo, "About to print…" )
If Ans =vbNo Then Cancel= True
End Sub

  这个Workbook BeforePrint过程在打印工作簿之前执行。此过程将显示一个消息框,询问用户是否确认装载了正确的标签系列。如果单击No按钮,则Cancel将被设为True,不进行打印工作。


Copyright © 2016-2023 office学习教程网 office.tqzw.net.cn. All Rights Reserved.