ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何利用类模块给所有打开的工作簿定义双击图表的事件程序?

如何利用类模块给所有打开的工作簿定义双击图表的事件程序?

作者:绿色风 分类: 时间:2022-08-17 浏览:133
楼主
amulee
Q:如何利用类模块给所有打开的工作簿定义双击图表的事件程序?
A:如本例,原工作表中有两个图表,利用类模块对该图表设置了事件程序。类模块MyCht代码:
  1. Public WithEvents Cht As Chart

  2. Private Sub Cht_BeforeDoubleClick(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long, Cancel As Boolean)
  3.     Cancel = True
  4.     myclr1 = 7 '天蓝色
  5.     myclr2 = 21
  6.     For Each Series In Cht.SeriesCollection '遍历所有的系列
  7.    
  8.      myclr1 = myclr1 + 1 ' 每一次运行自动换色
  9.      myclr2 = myclr2 + 1
  10.      '给柱形图自动换色
  11.       If Series.ChartType = xlColumnClustered Then
  12.    
  13.         For Each pt In Series.Points
  14.           pt.Interior.ColorIndex = myclr1
  15.         Next pt
  16.      
  17.       End If
  18.       '给折线图上颜色
  19.       If Series.ChartType = xlLine Then
  20.         Series.Border.ColorIndex = myclr2
  21.       End If
  22.     Next
  23. End Sub


在标准模块中的语句:
  1. Public Chat() As MyCht


在Thisworkbook中的语句:
  1. Private Sub Workbook_Open()
  2.     Dim K%
  3.     Dim Sht As Worksheet
  4.     Dim Cht As ChartObject
  5.     For Each Sht In Worksheets
  6.         For Each Cht In Sht.ChartObjects
  7.             K = K + 1
  8.             ReDim Preserve Chat(1 To K)
  9.             Set Chat(K) = New MyCht
  10.             Set Chat(K).Cht = Cht.Chart
  11.         Next
  12.     Next
  13. End Sub


这一系列的语句实现了打开工作簿即将工作簿中所有的图表进行绑定,使之具备双击时变色的事件。

若将该工作簿定义为加载宏,如何利用类模块使所有打开的工作簿中的图表都具有该事件呢?

对于Application对象,有一个WorkbookOpen事件,当该Application打开工作簿时就执行该事件程序。利用它,可以实现所有打开工作簿都运行上述单个工作簿的事件程序。

添加一个类模块MyApp,代码如下:
  1. Public WithEvents ExlApp As Application
  2. Private K As Long
  3. Private Chat() As MyCht
  4. Private Sub ExlApp_WorkbookOpen(ByVal Wb As Workbook)
  5.     Dim Sht As Worksheet
  6.     Dim Cht As ChartObject
  7.     For Each Sht In Wb.Worksheets
  8.         For Each Cht In Sht.ChartObjects
  9.             K = K + 1
  10.             ReDim Preserve Chat(1 To K)
  11.             Set Chat(K) = New MyCht
  12.             Set Chat(K).Cht = Cht.Chart
  13.         Next
  14.     Next
  15. End Sub


将模块中的代码更改如下:
  1. Public NewApp As New MyApp


Thisworkbook中代码更改如下:
  1. Private Sub Workbook_Open()
  2.     Set NewApp.ExlApp = ThisWorkbook.Application
  3. End Sub


之后将工作簿保存为加载宏,并加载该工作簿。当该加载宏打开后即绑定当前Excel程序,使该程序具有WorkbookOpen事件程序,当打开其他工作簿时都会执行该程序即使该工作簿中所有的图表具备双击事件。


图表事件.rar
2楼
fx1986112
谢谢lz帮忙,这代码从头到尾都是lz帮忙完成,我只负责提问,哈哈,只是现在我还有个问题,本代码是在thisworkbook的open事件中运行的,所以如果在excel中新添加一张图表的话,是不能立即双击改色的,必须关闭当前工作簿然后再打开才能运行程序,现在我想不用重启直接双击,不知道应该怎么样实现?我用过thisworkbook中的active何sheetactive好像都不行?

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap