Excel图表 - 如何在没有范围参考的情况下在VBA中绘制不连续系列

时间:2017-12-30 12:32:02

标签: excel vba excel-vba charts

Excel 2010。

问题:我需要通过VBA *在XY散点图*中绘制*单* *不连续*系列,而不引用工作表中的范围。

通过在不连续处插入空白值,很容易实现当Y值在布局范围内布局时;只要在选择数据>中选择“将空单元格显示为:间隙”;隐藏和空单元格。这是一个例子(红色的Series2是重要的一个):

enter image description here

所以我试图通过VBA重现同样的事情:

Sub addDiscountinuousSingleSeries()
    Dim vx As Variant, vy As Variant
    Dim chrtObj As ChartObject, chrt As Chart, ser As Series

    Set chrtObj = ActiveSheet.ChartObjects("MyChart"): Set chrt = chrtObj.Chart

    Set ser = chrt.SeriesCollection.NewSeries

    vx = Array(0.3, 0.3, 0.3, 0.7, 0.7, 0.7)
    vy = Array(-1, 1, vbNullString, -1, 1, vbNullString)
    'vy = Array(-1, 1, CVErr(xlErrNA), -1, 1, CVErr(xlErrNA)) 'doesn't work either
    'vy = Range(RANGE_YVALUES_WITH_BLANK) 'this would work, but I do not want to reference a range

    chrt.DisplayBlanksAs = xlNotPlotted 'VBA equivalent to 'Show empty cells as: Gaps'

    With ser
        ser.Name = "VBA Series"
        .XValues = vx
        .Values = vy
    End With

End Sub

但是vy数组中的空白值似乎被忽略了,现在连接了两个垂直条,我试图避免(绿色系列)。

enter image description here

我知道我可以通过编程方式删除中间行,但在我试图解决的现实问题中,它不是正确的解决方案(太复杂,太慢)。

我的问题:有没有办法指定系列'.Values数组来获得预期的行为,并在vba中获得两个垂直绿色段之间的间隙(只有一个系列而没有对工作表范围的引用)?< / p>

1 个答案:

答案 0 :(得分:1)

您可以只格式化您不想要的行。也许不是最漂亮的方式,但它会实现你的目标。

ser.Points(3).Format.Line.Visible = msoFalse
ser.Points(4).Format.Line.Visible = msoFalse
ser.Points(6).Format.Line.Visible = msoFalse

或者:

For i = 1 To ser.Points.Count
    If i <> 1 Then k = i - 1 Else k = i
    If ser.Values(i) = 0 Or ser.Values(k) = 0 Then
        ser.Points(i).Format.Line.Visible = msoFalse
    End If
Next