【发布时间】:2018-06-10 13:35:11
【问题描述】:
Excel 2010。
问题:我需要通过 VBA* 在 XY 散点图中绘制一个 *single* *discontinuous* 系列而不引用工作表中的范围。
当 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 中两个垂直绿色段之间的间隙(只有一个系列并且没有参考工作表范围)?
【问题讨论】:
-
我意识到这个OP 有类似的问题,但没有得到任何答案。
-
不确定是否在 Excel 2010 中可用,但对于 2016,
vy = Array(-1, 1, CVErr(xlErrNA), -1, 1, CVErr(xlErrNA))与chrt.DisplayValueNotAvailableAsBlank = True结合使用。 -
谢谢!在 Excel 2010 中似乎不存在 DisplayValueNotAvailableAsBlank 属性,因此很遗憾,这可能是 2010 年之后的升级。
-
是的,找到 Display empty cells, null (#N/A) values, and hidden worksheet data in a chart:“将 #N/A 显示为空单元格选项:此功能仅在您订阅了 Office 365 且当前仅适用于预览体验成员时可用。如果您是Office 365 订阅者,请确保您拥有最新版本的 Office。”所以不在 Excel 2010 中。
-
当有一个空值时,你能不能不把数组分成两个单独的系列?我知道这不是你问的,但它会达到相同的视觉效果。