步骤1,打开VBE窗口,单击菜单“插入”->“类模块”,然后在“属性”窗口修改类模块的名称为“clsChart”;
步骤2,接着在代码区中输入以下代码,
Public WithEvents objChart As Chart
这样便创建了一个带有事件的Chart类型对象。如下图:
打开代码区左上方的“对象”下拉列表框,可以看到刚刚创建的Chart对象objChart,如图:
在“对象”下拉列表框中选择对象objChart后,代码区右上方的“过程”下拉列表框中则列出该对象的所有事件,如图:
步骤3,选择BeforeDoubleClick事件,然后插入以下代码,此代码在用户双击图表的某个系列时将改变该系列的背景色;
Public WithEvents objChart As Chart
Private Sub objChart_BeforeDoubleClick(ByVal ElementID As Long, _
ByVal Arg1 As Long, ByVal Arg2 As Long, Cancel As Boolean)
Select Case ElementID
Case xlSeries
' Arg2表示PointIndex,
' 指定某个系列之一个特定点在Points集合中的偏移量。-1表示选择所有数据点
If Arg2 = -1 Then
' Arg1表示SeriesIndex,指定特定系列之Series集合中的偏移量
With objChart.SeriesCollection(Arg1)
If .MarkerBackgroundColorIndex = xlColorIndexAutomatic Then
.MarkerBackgroundColorIndex = 1
Else
.MarkerBackgroundColorIndex = (.MarkerBackgroundColorIndex Mod 56) + 1
End If
End With
Cancel = True
End If
'Case xlChartArea
' 你的事件处理代码
' Cancel = True
'Case xlLegend
' 你的事件处理代码
' Cancel = True
'Case xlAxis
' 你的事件处理代码
' Cancel = True
End Select
End Sub
步骤4,这时事件过程运行还没有完成,必须就是将嵌入的图表和类模块中的objChart对象相关联起来。可以在工作表的Active事件中添加如下代码。
Private firstChartEvent As New clsChart
Private Sub Worksheet_Activate()
If Me.ChartObjects.Count > 0 Then
' 如果Chart对象已经存在,重设
If Not firstChartEvent.objChart Is Nothing Then
Set firstChartEvent = Nothing
End If
' 仅对第1个图表对象设置事件
Set firstChartEvent.objChart = Me.ChartObjects(1).Chart
End If
End Sub
除了BeforeDoubleClick事件外,Chart对象还有很多其它的事件,从帮助文件中可以获得所有的事件过程以及参数的说明: Activate 事件
激活该图表或嵌入图表时产生此事件。
语法:
Private Sub object_Activate()
BeforeRightClick 事件
当用鼠标右键单击一个嵌入图表时发生此事件,此事件先于默认的右键单击操作。
语法:
Private Sub expression_BeforeRightClick(Cancel As Boolean)
Deactivate 事件
图表从活动状态转为非活动状态时产生此事件。
语法:
Private Sub object_Deactivate()
DragOver 事件
当将一个单元格区域拖过图表时产生此事件。
语法:
Private Sub object_DragOver()
DragPlot 事件
将一个单元格区域拖放到图表上时产生此事件。
语法:
Private Sub object_DragPlot()
MouseDown 事件
当在图表上按下鼠标按钮时,产生此事件。
语法:
Private Sub object_MouseDown(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
参数:
object 在类模块中带有事件声明的 Chart 类型对象
Button 按下的鼠标按钮。可为以下 XlMouseButton 常量之一: xlNoButton、xlPrimaryButton、xlSecondaryButton 或 xlMiddleButton。
Shift 此事件产生时 Shift、Ctrl 和 Alt 的状态。可以是下列值之一或者某几个值的和。 值 含义
0(零) 没有键按下
1 Shift
2 Ctrl
4 Alt
X 鼠标指针在图表对象的客户坐标系中的 X 坐标,以Pixel为单位。
Y 鼠标指针在图表对象的客户坐标系中的 Y 坐标,以Pixel为单位。 MouseMove 事件
当鼠标指针在图表上的位置改变时产生此事件。
语法:
Private Sub object_MouseMove(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
参数说明和MouseDown事件相同。 MouseUp 事件
当在图表上释放鼠标按钮时产生此事件。
语法:
Private Sub object_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal X As Long, ByVal Y As Long)
参数说明和MouseDown事件相同。 Resize 事件
调整图表大小时,将产生本事件。
语法:
Private Sub object_Resize()
SeriesChange 事件
当用户更改图表数据点的值时,产生此事件。
语法:
Private Sub object_SeriesChange(ByVal SeriesIndex As Long, ByVal PointIndex As Long)
参数:
object 在类模块中带有事件声明的 Chart 类型对象。
SeriesIndex 表示已更改的系列在 Series 集合中的偏移量。
PointIndex 表示已更改的数据点在 Points 集合中的偏移量。 Select 事件
选定图表元素时,将产生本事件。
语法:
Private Sub object_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
参数说明和下面介绍的BeforeDoubleClick事件相同。 BeforeDoubleClick 事件
当双击一张嵌入图表时产生此事件,并且此事件先于默认的双击操作。
语法:
Private Sub object_BeforeDoubleClick(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long, Cancel As Boolean)