问题描述
我正在尝试在Excel工作簿中使用VBA修改瀑布图的数据标签的数字格式。由于数字格式的复杂性,我需要使用两种不同的数字格式模式,并有条件地将必要的一种应用于每个数据点的标签。
在下面的代码中,尝试读取或写入数据标签的.NumberFormat
属性时收到错误消息。我可以读取和写入.NumberFormatLinked
和.NumberFormatLocal
,尽管.NumberFormatLinked
在再次检查时已经恢复到其原始值True
,并且.NumberFormatLocal
极为脆弱。我发现如果我打开VBA编辑器有时会打开新的数字格式“ sticks”,而当未打开编辑器时,数字格式不会“ stick”。
我怀疑问题可能归结于对Excel中较新的图表类型缺乏VBA支持。如果有任何方法可以解决此问题,或者我的代码有任何问题(除了valuesArray
之外,我将为之寻找更好的解决方案),我将不胜感激!
Dim mws_Data As Worksheet: Set mws_Data = ThisWorkbook.Worksheets("Waterfall Graph")
Dim endRow As Integer: endRow = mws_Data.Cells(mws_Data.Rows.Count,"G").End(xlUp).row
Dim pt As Integer
Dim chartPoint As Point
Dim mws_Chart As Excel.Shape: Set mws_Chart = mws_Data.Shapes(1)
Dim valuesArray As Variant: valuesArray = mws_Data.Range("G37:G" & endRow).value
With mws_Chart.Chart.FullSeriesCollection(1)
.Values = mws_Data.Range("G37:G" & endRow)
.XValues = mws_Data.Range("H37:H" & endRow)
For pt = 1 To .dataLabels.Count
Set chartPoint = .Points(pt)
With chartPoint
.dataLabel.NumberFormatLinked = False
Debug.Print .dataLabel.NumberFormat ' Raises an error
Debug.Print .dataLabel.NumberFormatLinked
Debug.Print .dataLabel.NumberFormatLocal
If valuesArray(pt,1) < 0 Then
.dataLabel.NumberFormat = "[<=-0.5](#,##0);(<1)" ' Raises an error
Else
.dataLabel.NumberFormat = "[=0]-;[>=0.5]#,##0;<1" ' Raises an error
End If
Next pt
End With
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)