如何在vba中使用图表Chart对象的事件?

如下图所示

vba 中图表对象chart有Activate、BeforeDoubleClick、Select、MouseDown等事件。

这些事件要如何才能启用呢?

在vba中有许多对象具有内置事件,但是只有Workbook、Worksheet对象在vba中可以直接使用它们的事件。

对于其它的具有内置事件对象,如chart对象,这里介绍两种启用事件的方法。

方法1:在“工程资源管理器”中插入“类模块”,然后使用WithEvents关键字声明一个图表chart对象变量,即可使用图表chart对象的所有事件,如下图所示:

方法2:在Sheet1或者ThisWorkbook等内置的文档模块中使用WithEvents关键字声明一个图表chart对象变量,也可使用图表chart对象的所有事件,如下图所示:

利用上述的两个方法本质上都是在类模块中创建一个带事件的图表chart对象变量。

定义了具有事件的图表对象变量后,该变量并未赋值给任何一个实际存在的图表,所以还不能响应事件,如果要使具体的某个图表启用其对应的事件,可以将具体的图表对象赋值给该变量,使得该变量实例化。

比如可以在Workbook_Open事件中添加如下的代码,将当前工作表的第一个内嵌图表赋值给可以响应事件的图表chart对象变量oChart。

Private Sub Workbook_Open()
    Dim oWk As Worksheet
    Set oWk = Excel.ActiveSheet
    '将当前工作表中的第一个内嵌图表赋值给带事件的图表对象变量oChart,使其实例化
    Set oChart = oWk.ChartObjects(1).Chart
End Sub

然后在类模块或者文档模块中添加如下的代码:

Public WithEvents oChart As Chart
Private Sub oChart_Activate()
    MsgBox "你选中了" & oChart.Name
End Sub

当选中当前工作表的第一个内嵌图表时,将触发图表的Activate事件,弹出提示选中的图表名称。

       

发表评论