[英]Label the last value in chart
我試圖在 Excel 中創建一個 VBA 以避免進度圖表中最后一個標記值的問題。 我在儀表板中有幾個圖表,每次我用新值更新進度時,我必須將最后一個值設為 select,然后將 label 添加到折線圖中。 我已經找到一種方法來刪除一個 go 中的所有最后一個標簽,現在的挑戰是將標簽添加到最后一個值。
要刪除我使用以下代碼的所有標簽:
Sub RemoveDataLabelsFromEightCharts()
Dim vChartNames As Variant
Dim vChartName As Variant
Dim wksChart As Worksheet
Set wksChart = ActiveSheet
vChartNames = Array("Chart 1", "Chart 2", "Chart 3", "Chart 4")
For Each vChartName In vChartNames
wksChart.ChartObjects(vChartName).Chart.SetElement msoElementDataLabelNone
Next vChartName
End Sub
我還找到了一個在我 select 添加標簽的圖表中有效的方法,在這種情況下,它也添加到不需要的條形圖中。
Sub LastPointLabel()
Dim mySrs As Series
Dim iPts As Long
Dim vYVals As Variant
Dim vXVals As Variant
If ActiveChart Is Nothing Then
MsgBox "Select a chart and try again.", vbExclamation
Else
Application.ScreenUpdating = False
For Each mySrs In ActiveChart.SeriesCollection
With mySrs
vYVals = .Values
vXVals = .XValues
.HasDataLabels = False
For iPts = .Points.Count To 1 Step -1
If Not IsEmpty(vYVals(iPts)) And Not IsError(vYVals(iPts)) _
And Not IsEmpty(vXVals(iPts)) And Not IsError(vXVals(iPts)) Then
mySrs.Points(iPts).ApplyDataLabels _
ShowSeriesName:=False, _
ShowCategoryName:=False, ShowValue:=True, _
AutoText:=True, LegendKey:=False
Exit For
End If
Next
End With
Next
ActiveChart.HasLegend = False
Application.ScreenUpdating = True
End If
End Sub
(a) 不要對ActiveChart
進行硬編碼,而是將圖表作為參數傳遞給設置 label 的例程。您已經有一個循環遍歷所有感興趣圖表的例程,因此您可以使用它:
Sub RemoveDataLabelsFromEightCharts()
Dim vChartNames As Variant
Dim vChartName As Variant
Dim wksChart As Worksheet
Set wksChart = ActiveSheet
vChartNames = Array("Chart 1", "Chart 2", "Chart 3", "Chart 4")
For Each vChartName In vChartNames
LastPointLabel wksChart.ChartObjects(vChartName).Chart
Next vChartName
End Sub
現在您所要做的就是將圖表聲明為參數並使用它代替 ActiveChart。
(b) 如果您只想在線上顯示 label,請檢查系列的Type
-property。
Sub LastPointLabel(chart As chart)
Dim mySrs As Series
Dim iPts As Long
Dim vYVals As Variant
Dim vXVals As Variant
chart.SetElement msoElementDataLabelNone
For Each mySrs In chart.SeriesCollection
If mySrs.Type = xlLine Then ' Check for "Line"-type
vYVals = mySrs.Values
vXVals = mySrs.XValues
mySrs.HasDataLabels = False
For iPts = mySrs.Points.Count To 1 Step -1
If Not IsEmpty(vYVals(iPts)) And Not IsError(vYVals(iPts)) _
And Not IsEmpty(vXVals(iPts)) And Not IsError(vXVals(iPts)) Then
mySrs.Points(iPts).ApplyDataLabels _
ShowSeriesName:=False, _
ShowCategoryName:=False, ShowValue:=True, _
AutoText:=True, LegendKey:=False
Exit For
End If
Next
End If
Next
chart.HasLegend = False
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.