Excel图表超链接

我使用下面的代码将超链接添加到图表,将其链接到不同的工作表:

ActiveSheet.ChartObjects("Chart 3").Activate ActiveChart.Hyperlinks.Add Anchor:=Selection.ShapeRange.Item(1), Address:="", SubAddress:= _ "'Sheet2'!A1" 

但是这会创build一个点击整个图表时激活的链接。 饼图有4个部分(每个部分涉及不同的系列),我希望每个部分链接到不同的工作表。 所以第一部分将转到Sheet2,第二部分转到Sheet3等等。

有没有一种方法可以将锚点添加到每个单独的分段,而不是将整个图表添加到整个图表中?

我花了12个小时,因为我有同样的问题。 下面是我如何从一个全新的Excel工作簿开始工作:

1)组成饼图的数据

 Name Score Art 20 Bob 15 Joe 19 Tim 5 

2)插入饼图,使其在同一工作表中显示为对象

3)右键单击Sheet1选项卡上的“查看代码”。

4)插入一个“Class Module” – 默认情况下可能被称为“Class1”

5)将以下代码粘贴到类模块中:


 Option Explicit Public WithEvents ChartObject As Chart Private Sub ChartObject_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 myX As Variant, myY As Double With ActiveChart ' Pass x & y, return ElementID and Args .GetChartElement x, y, ElementID, Arg1, Arg2 ' Did we click over a point or data label? If ElementID = xlSeries Or ElementID = xlDataLabel Then If Arg2 > 0 Then ' Extract x value from array of x values myX = WorksheetFunction.Index _ (.SeriesCollection(Arg1).XValues, Arg2) ' Extract y value from array of y values myY = WorksheetFunction.Index _ (.SeriesCollection(Arg1).Values, Arg2) ' Display message box with point information MsgBox "Series " & Arg1 & vbCrLf _ & """" & .SeriesCollection(Arg1).Name & """" & vbCrLf _ & "Point " & Arg2 & vbCrLf _ & "X = " & myX & vbCrLf _ & "Y = " & myY Range("A1").Select ' Don't crash if chart doesn't exist On Error Resume Next ' Activate the appropriate chart ' ThisWorkbook.Charts("Chart " & myX).Select Sheets("Series " & myX & " Detail").Select Range("A1").Select On Error GoTo 0 End If End If End With End Sub 

6)上面的代码只有在我们可以把excel当作“图表”处理“图表对象”时才起作用。 要做到这一点:使用视图代码打开代码“This Workbook”。 7)粘贴以下内容:

Dim ChartObjectClass作为新的Class1

Private Sub Workbook_Open()Set ChartObjectClass.ChartObject = Worksheets(1).ChartObjects(1).Chart End Sub

8)将类模块中的编码操纵到名为“系列艺术细节”,“系列乔细节”,“系列鲍勃细节”和系列“细节”系列的标签创build这4个选项卡。 类切片到选项卡的映射接近类代码的底线。

9)testing并享受!

使用下面的代码:

 Option Explicit Public WithEvents CHT As Chart Private Sub Workbook_Open() Set CHT = ActiveSheet.ChartObjects(1).Chart End Sub Private Sub CHT_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long) On Error GoTo Fin If Selection.Name = "Series1" Then Application.Goto ActiveWorkbook.Sheets("Sheet2").Range("A1") End If Fin: End Sub