簡體   English   中英

Label 圖表中的最后一個值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM