有没有办法在不使用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
是否有任何变通方法,或者我是否需要解决类似上述宏的问题?
答案 0 :(得分:8)
这是你在尝试什么?在下面的代码中,我们完全避免了 at most 10% of space will be wasted by obsolete rows.
:)
随意使用.Activate/.Select
财产。您还可以格式化数据标签,以便以您想要的任何格式显示值。
.AutoShapeType
<强>截图强>
答案 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个点有标注。
答案 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