gpt4 book ai didi

excel - 捕获图表上的事件点击

转载 作者:行者123 更新时间:2023-12-02 10:53:49 25 4
gpt4 key购买 nike

当我单击图表时,我需要在 Excel VBA 中捕获事件。

我想在激活图表时将其置于最前面,但我找不到合适的事件。

对于不在工作表上的图表(单独的全屏图表),有 Chart_Activate() 事件。

当图表位于某个工作表上时,如何调用相同的事件?

最佳答案

如果您有一组要自动化的图表,无论是在特定工作表上还是在整个工作簿上,那么我建议您使用类模块来捕获而不是逐个图表地绑定(bind)代码

Jon Peltier(按正常情况)已详细介绍了此图表代码选项,请参阅 Chart Events in Microsoft Excel .

在名为 CEventChart 的类模块中放置:

Option Explicit
' Declare object of type "Chart" with events
Public WithEvents EvtChart As Chart

Private Sub EvtChart_Activate()
EvtChart.ChartObjects msoBringToFront
End Sub

在普通模块中放置

Option Explicit

Dim clsEventChart As New CEventChart
Dim clsEventCharts() As New CEventChart

Sub Set_All_Charts()
' Enable events on sheet if it is a chart sheet
If TypeName(ActiveSheet) = "Chart" Then
Set clsEventChart.EvtChart = ActiveSheet
End If

' Enable events for all charts embedded on a sheet
' Works for embedded charts on a worksheet or chart sheet
If ActiveSheet.ChartObjects.Count > 0 Then
ReDim clsEventCharts(1 To ActiveSheet.ChartObjects.Count)
Dim chtObj As ChartObject
Dim chtnum As Integer

chtnum = 1
For Each chtObj In ActiveSheet.ChartObjects
' Debug.Print chtObj.Name, chtObj.Parent.Name
Set clsEventCharts(chtnum).EvtChart = chtObj.Chart
chtnum = chtnum + 1
Next ' chtObj
End If
End Sub

Sub Reset_All_Charts()
' Disable events for all charts previously enabled together
Dim chtnum As Integer
On Error Resume Next
Set clsEventChart.EvtChart = Nothing
For chtnum = 1 To UBound(clsEventCharts)
Set clsEventCharts(chtnum).EvtChart = Nothing
Next ' chtnum
End Sub

然后运行 ​​Set_All_Charts 并选择您希望将图表发送到前面的工作表,Jon 使用这些工作表事件来设置和禁用特定工作表上的图表代码

Private Sub Worksheet_Activate()
Set_All_Charts
End Sub

Private Sub Worksheet_Deactivate()
Reset_All_Charts
End Sub

关于excel - 捕获图表上的事件点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7431586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com