在一张图表上绘制两个系列

问题描述 投票:0回答:1

我试图在一张图表上绘制两个系列,第一个显示随时间变化的实际值,第二个显示它们正在接近的最大值。

第一行出现。
第二个系列已创建并显示在图例中,但绘图上没有显示任何数据。

简化示例:

Sub SimpleDebug()
    Dim test_sheet As Worksheet
    Set test_sheet = ThisWorkbook.Worksheets("TestData")
    Dim ch As Chart
    test_sheet.ChartObjects.Add Left:=750, Top:=50, Width:=400, Height:=300
    Set ch = test_sheet.ChartObjects(1).Chart
    Dim ser As Series
    Set ser = ch.SeriesCollection.NewSeries
    ser.ChartType = xlLine
    ser.XValues = test_sheet.Range("F2:F278")
    ser.Values = test_sheet.Range("K2:K278")
    ser.name = "Running Total"
    
    Dim max_val As Double
    max_val = 175000
    Set ser = ch.SeriesCollection.NewSeries
    ser.ChartType = xlLine
    Dim min_date As Date
    Dim max_date As Date
    min_date = test_sheet.Range("F2").Value
    Debug.Print "min_date: " & min_date
    max_date = test_sheet.Cells(278, 6).Value
    Debug.Print "max_date: " & max_date
    ser.XValues = Array(min_date, max_date)
    ser.Values = Array(max_val, max_val)
    ser.name = "Maximum"
End Sub

调试打印语句确认我从表格中获得了所需的 min_date 和 max_date 值。

结果如下:
Chart generated by code

第二个系列没有出现。

我尝试将第二个系列设置为自变量,而不是重新使用“ser”,但它没有产生任何影响。

excel vba charts
1个回答
4
投票

不要使用最小和最大日期,只需使用与第一个

XValues
相同的
Series
,并为
Values
创建一个相同大小的数组:

Dim arr() As Double
ReDim arr(1 To test_sheet.Range("F2:F278").Count)
Dim i As Long
For i = LBound(arr) To UBound(arr)
    arr(i) = max_val
Next

ser.XValues = test_sheet.Range("F2:F278")
ser.Values = arr
© www.soinside.com 2019 - 2024. All rights reserved.