Can';t使用Excel瀑布图中的VBA更改单个数据标签的数字格式
我试图在Excel工作簿中使用VBA修改瀑布图数据标签的数字格式。由于数字格式的复杂性,我需要使用两种不同的数字格式模式,并有条件地将必要的模式应用于每个数据点的标签 在下面的代码中,我在尝试读取或写入数据标签的Can';t使用Excel瀑布图中的VBA更改单个数据标签的数字格式,excel,vba,excel-charts,Excel,Vba,Excel Charts,我试图在Excel工作簿中使用VBA修改瀑布图数据标签的数字格式。由于数字格式的复杂性,我需要使用两种不同的数字格式模式,并有条件地将必要的模式应用于每个数据点的标签 在下面的代码中,我在尝试读取或写入数据标签的.NumberFormat属性时出错。我可以读写。NumberFormatLinked和。NumberFormatLocal,尽管。NumberFormatLinked在再次选中时已恢复为其原始值True。NumberFormatLocal非常脆弱。我发现,如果打开VBA编辑器,有时新的
.NumberFormat
属性时出错。我可以读写。NumberFormatLinked
和。NumberFormatLocal
,尽管。NumberFormatLinked
在再次选中时已恢复为其原始值True
。NumberFormatLocal非常脆弱。我发现,如果打开VBA编辑器,有时新的数字格式会“粘滞”,而当编辑器未打开时,数字格式不会“粘滞”
我怀疑问题可能是由于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
Dim mws\u数据作为工作表:设置mws\u数据=此工作簿。工作表(“瀑布图”)
Dim endRow作为整数:endRow=mws_Data.Cells(mws_Data.Rows.Count,“G”).End(xlUp).row
将pt变为整数
点作为点
将mws\U图表设置为Excel。形状:设置mws\U图表=mws\U数据。形状(1)
Dim valuesArray作为变量:valuesArray=mws_数据范围(“G37:G”和endRow).值
带mws_图表。图表。完整系列集合(1)
.Values=mws_数据范围(“G37:G”和endRow)
.XValues=mws_数据范围(“H37:H”和endRow)
对于pt=1到.dataLabels.Count
设置图表点=.Points(pt)
用chartPoint
.dataLabel.NumberFormatLink=False
Debug.Print.dataLabel.NumberFormat'引发错误
Debug.Print.dataLabel.NumberFormatLinked
Debug.Print.dataLabel.NumberFormatLocal
如果值ray(pt,1)<0,则
.dataLabel.NumberFormat=“[似乎我没有真正理解您的问题。就通用数据标签的答案而言,它似乎不是瀑布图的答案。因此,我收回我的答案。