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

时间:2016-03-22 12:05:49

标签: excel vba excel-vba charts

有没有办法在不使用Select的情况下向图表中的某个点添加标注标签?

录制宏,我明白了:

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只需添加数据标签。

选择该点然后在图表上使用SetElement是否有任何变通方法,或者我是否需要解决类似上述宏的问题?

3 个答案:

答案 0 :(得分:8)

这是你在尝试什么?在下面的代码中,我们完全避免了 at most 10% of space will be wasted by obsolete rows. :)

随意使用.Activate/.Select财产。您还可以格式化数据标签,以便以您想要的任何格式显示值。

.AutoShapeType

<强>截图

enter image description here

答案 1 :(得分:3)

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

原来我没有成功!

但是让我们来介绍一个边缘案例,对于某些用途来说,这将是一个非常简单的解决方案;假设您不需要数据标签除了以用于您想要标注的实例:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<div class="areaChartTwoWay" style="min-width: 150px; height: 200px;"></div>
<div class="areaChartTwoWay" style="min-width: 150px; height: 200px;"></div>
<div class="areaChartTwoWay" style="min-width: 150px; height: 250px;"></div>

对于任何绝望的人,我最接近的是使用原始图表作为模板创建叠加层。但是,由于标注框的定位问题,它无法准确地对任意图表起作用。

但是在这一点上,您可能刚刚添加了一个文本框或者比复制图表更少的内容,删除其中一半的内容并使其余部分不可见...

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

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

结果:DataLabels完整,只有1个点有标注。

enter image description here

答案 2 :(得分:0)

尝试以下代码

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