有没有办法添加标注到图表中的一个点,而不使用select?

有没有办法添加标注到图表中的一个点,而不使用Select

录制一个macros,我得到了这个:

 Sub Macro9() ActiveSheet.ChartObjects("SPC").Activate ActiveChart.FullSeriesCollection(1).Select ActiveChart.FullSeriesCollection(1).Points(4).Select ActiveChart.SetElement (msoElementDataLabelCallout) End Sub 

但是我宁愿避免使用Select 。 我试图简单地使用SetElement方法,但是失败了。 使用HasDataLabel = True -method只需添加一个数据标签。

是否有任何解决方法来select点,然后在图表上使用SetElement ,或者我将不得不解决类似于上述macros?

这是你正在尝试? 在下面的代码中,我们避免了。 .Activate/.Select完全select:)

随意玩.AutoShapeType属性。 您还可以格式化数据标签以显示您想要的任何格式的值。

 Sub Sample() Dim objC As ChartObject, chrt As Chart, dl As DataLabel Dim p As Point Set objC = Sheet1.ChartObjects(1) Set chrt = objC.Chart Set p = chrt.FullSeriesCollection(1).Points(4) p.HasDataLabel = True Set dl = p.DataLabel With dl .Position = xlLabelPositionOutsideEnd .Format.AutoShapeType = msoShapeRectangularCallout .Format.Line.Visible = msoTrue End With End Sub 

截图

在这里输入图像说明

正如我在评论中所说:我找不到直接做这件事的方法,但认为我可以解决这个问题。

原来我不成功!

但是,我们来介绍一个用于某些用途的边缘案例,它将有一个相当简单的解决scheme 说你不需要数据标签, 除了你想要标注的地方:

 Sub chartTest() Dim co As ChartObject Dim ch As Chart Dim i As Integer ' The point index we want shown i = 2 Set co = Worksheets(1).ChartObjects(2) Set ch = co.Chart co.Activate ch.SetElement (msoElementDataLabelCallout) For j = 1 To s.Points.Count ' We can change this to an array check if we want several ' but not all points to have callout If j <> i Then s.Points(j).HasDataLabel = False Next j End Sub 

对于任何绝望的人来说,最接近的是用原始图表作为模板创build一个覆盖图。 但是,由于定位问题与标注框,它不能准确地为任意图表工作。

但在这一点上,你可能刚刚添加了一个文本框或者比复制一个图表要less得多的东西,删除其中一半的内容,并使其余部分不可见。

但是为了克苏尔 – 我的意思是科学:

 Sub pTest() Dim co As ChartObject Dim ch As Chart Dim s As Series Dim p As Point Set co = Worksheets(1).ChartObjects(1) Set ch = co.Chart Set s = ch.SeriesCollection(1) i = 2 Call copyChartTest(co, ch, i) End Sub Sub copyChartTest(ByRef co As ChartObject, ByRef cht As Chart, ByVal i As Integer) Dim ch As Chart ' The overlay chart Set ch = co.Duplicate.Chart ' Set callout ch.SetElement (msoElementDataLabelCallout) ' Invisibil-ate! With ch .ChartArea.Fill.Visible = msoFalse .SeriesCollection(1).Format.Line.Visible = False .ChartTitle.Delete .Legend.Delete For j = 1 To .SeriesCollection(1).Points.Count .SeriesCollection(1).Points(j).Format.Fill.Visible = msoFalse If j <> i Then .SeriesCollection(1).Points(j).HasDataLabel = False Next j End With ' Align the charts With ch .Parent.Top = cht.Parent.Top .Parent.Left = cht.Parent.Left End With End Sub 

结果是:DataLabels完好无损,只有1个点标注。

在这里输入图像描述

你有没有试过Rob Bovey的免费工具http://www.appspro.com/Utilities/ChartLabeler.htm

有一个选项“手动标签”,这似乎是非常接近你想要的。 我正在使用具有可见VBA代码的1996-97版本。 我没有检查是否有最新版本。

尝试下面的代码

 Sub Macro9() ActiveSheet.ChartObjects("SPC").Activate ActiveChart.SeriesCollection(1).Points(4).HasDataLabel = True ActiveChart.SeriesCollection(1).Points(4).DataLabel.Text = "Point 4 Test" End Sub