Excel 2010。
问题:我需要通过VBA *在XY散点图*中绘制*单* *不连续*系列,而不引用工作表中的范围。
通过在不连续处插入空白值,很容易实现当Y值在布局范围内布局时;只要在选择数据>中选择“将空单元格显示为:间隙”;隐藏和空单元格。这是一个例子(红色的Series2是重要的一个):
所以我试图通过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数组中的空白值似乎被忽略了,现在连接了两个垂直条,我试图避免(绿色系列)。
我知道我可以通过编程方式删除中间行,但在我试图解决的现实问题中,它不是正确的解决方案(太复杂,太慢)。
我的问题:有没有办法指定系列'.Values数组来获得预期的行为,并在vba中获得两个垂直绿色段之间的间隙(只有一个系列而没有对工作表范围的引用)?< / p>
答案 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