Excel VBA图表,只显示最后一点的数据标签

我想添加数据标签只有在我的线图上的最后一点,在我使用下面的时刻,这工作正常,但只有当我知道最后一点是什么数字。 我已经做了很多search,并发现在Excel中的points(points.count)对象的帮助,但我似乎无法使它为我工作。 请你可以build议一种方法,只显示我的图表上的最后一点或(理想情况下)工作表上的所有图表。

Sub Data_Labels() ' ' Data_Labels Macro ActiveSheet.ChartObjects("Menck Chart").Activate ActiveChart.SeriesCollection(1).DataLabels.Select Selection.Delete ActiveSheet.ChartObjects("Menck Chart").Activate ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).Points(59).Select ActiveChart.SeriesCollection(1).Points(59).ApplyDataLabels ActiveChart.SeriesCollection(1).DataLabels.Select Selection.Format.TextFrame2.TextRange.Font.Size = 9 End Sub 

尝试这个。 首先它将数据标签应用到所有点,然后从除最后一个点以外的每个点中删除它们。

我使用Points.Count - 1这样For/Next循环在最后一个点之前停止。

 Sub Data_Labels() ' Data_Labels Macro Dim ws As Worksheet Dim cht as Chart Dim srs as Series Dim pt as Point Dim p as Integer Set ws = ActiveSheet Set cht = ws.ChartObjects("Menck Chart") Set srs = cht.SeriesCollection(1) '## Turn on the data labels srs.ApplyDataLabels '## Iterate the points in this series For p = 1 to srs.Points.Count - 1 Set pt = srs.Points(p) '## remove the datalabel for this point p.Datalabel.Text = "" Next '## Format the last datalabel to font.size = 9 srs.Points(srs.Points.Count).DataLabel.Format.TextFrame2.TextRange.Font.Size = 9 End Sub 

简答

  Dim NumPoints as Long NumPoints = ActiveChart.SeriesCollection(1).Count ActiveChart.SeriesCollection(1).Points(NumPoints).ApplyDataLabels 

长答案

ActiveChart的使用是模糊的,并且需要额外的步骤来select感兴趣的图表。 如果您明确指定了您感兴趣的图表,那么您的macros将更健壮,更易于阅读。 我还build议使用With块或创build中间variables,因为读取ActiveChart.SeriesCollection(1).PointsActiveChart.SeriesCollection(1).Points很痛苦的ActiveChart.SeriesCollection(1).Points ,而且会让你的代码ActiveChart.SeriesCollection(1).Points 。 尝试后面的方法如下:

  Dim chartMenck As Chart, menckPoints as Points, menckDataLabel as DataLabel Set chartMenck = Sheet1.ChartObjects("Menck Chart").Chart Set menckPoints = chartMenck SeriesCollection(1).Points menckPoints(menckPoints.Count).ApplyDataLabels Set menckDataLabel = menckPoints(menckPoints.Count).DataLabel menckDataLabel.Font.Size = 9 

在我看来,这几乎是原来的一半,而且更容易阅读。