Excel VBA-单击饼图的不同部分以运行不同的宏
不确定是否可以使用VBA,但我想使用饼图的每个部分作为按钮来运行四个不同的宏 此外,每次值发生变化时(代码如下所示)都会重新创建饼图,因此切片的大小不是固定的。因此,我不认为我可以在切片的顶部放置一个类似的形状并为其指定一个宏Excel VBA-单击饼图的不同部分以运行不同的宏,excel,vba,pie-chart,Excel,Vba,Pie Chart,不确定是否可以使用VBA,但我想使用饼图的每个部分作为按钮来运行四个不同的宏 此外,每次值发生变化时(代码如下所示)都会重新创建饼图,因此切片的大小不是固定的。因此,我不认为我可以在切片的顶部放置一个类似的形状并为其指定一个宏 您可以将其设置为图表工作表并使用图表选择事件 选择您的数据范围并按F11。 将图表类型更改为圆形 打开VBA编辑器,打开图表代码并粘贴以下内容: Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 A
您可以将其设置为图表工作表并使用图表选择事件 选择您的数据范围并按F11。
将图表类型更改为圆形 打开VBA编辑器,打开图表代码并粘贴以下内容:
Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)
Debug.Print ElementID
Debug.Print Arg1
Debug.Print Arg2
Debug.Print ""
End Sub
这三个参数告诉您按下了图表的哪一部分。当我点击黄色较大的图表对象时,我得到:
3
1
4
蓝色:
3
1
1
我没有做过更多的调试,但我假设3是图表区域,因为如果我点击白色区域,我得到2,0,0。不管怎样,我想你会找到解决你的工作问题的办法
找到一个包含有关图表事件的某些信息的页面请尝试下一种方法:
Private
变量:Sheet\u Activate
):子部分
可将事件分配给所有现有图表。运行它并尝试在图表切片上单击播放。事件将返回切片标签
请测试并发送一些反馈。很好!投票通过。但我认为也可以使用类包装器为工作表上的字符创建事件。我记得我在过去的一段时间里做过那件事。现在没有太多时间,但我会尝试一些东西…完全按照预期工作!非常感谢您将解释分解为易于理解的内容parts@Randy赵:很高兴我能帮忙!
3
1
1
Option Explicit
Public WithEvents EvtChart As Chart
Private Sub EvtChart_MouseUp(ByVal Button As Long, ByVal Shift As Long, ByVal x As Long, ByVal y As Long)
Dim elementId As Long, arg1 As Long, arg2 As Long
Dim arrDL, i As Long
ReDim arrDL(1 To ActiveChart.SeriesCollection(1).DataLabels.count)
For i = 1 To ActiveChart.SeriesCollection(1).DataLabels.count
arrDL(i) = Split(ActiveChart.SeriesCollection(1).DataLabels(i).Text, vbLf)(0)
Next i
With ActiveChart
.GetChartElement x, y, elementId, arg1, arg2
Call DoSomething(Application.Index(arrDL, arg2))
End With
End Sub
Private clsEventCharts() As New ChartEvClass
Sub ActivateChartsEvent()
If ActiveSheet.ChartObjects.count > 0 Then
ReDim clsEventCharts(1 To ActiveSheet.ChartObjects.count)
Dim chtObj As ChartObject, i As Long: i = 1
For Each chtObj In ActiveSheet.ChartObjects
Set clsEventCharts(i).EvtChart = chtObj.Chart
i = i + 1
Next
End If
End Sub
Sub DoSomething(strLabel As String)
MsgBox strLabel
'use the label to run whatever you need...
End Sub