我知道在Excel VBA中使用Activate
和Select
不是最佳做法。我在处理Ranges时看到过如何避免它们的参考文献(例如:LINK)。在处理ChartObjects
时(或者除了Ranges之外的其他任何东西),如何避免它们?
例如,使用Activate
和Select
修改y轴上的最大值的方法看起来像这样(有效):
ActiveSheet.ChartObjects("MyChart").Activate
ActiveChart.Axes(xlValue).Select
ActiveChart.Axes(xlValue).MaximumScale = Range("MaxVal").Value
为了避免使用Activate
和Select
,我厌倦了声明变量,并使用它们,但这不起作用:
Dim ws As Worksheet
Set ws = Worksheets("Chart")
With ws.ChartObjects("MyChart").Axes(xlValue)
.MaximumScale = Range("MaxVal").Value
End With
上面的代码运行(即不会抛出错误),但轴上的比例不会改变。我错过了什么?
With Worksheets("Chart").ChartObjects("MyChart").Chart.Axes(xlValue)
.MaximumScale = Range("MaxVal").Value
End With
答案 0 :(得分:2)
关于你的问题#1:在处理ChartObjects时(或者除了Ranges之外的其他任何东西),我怎么能避免它们?,你使用的方法是正确的。你的结论不起作用是由另一个错误带来的。
关于你的问题#2:我缺少什么?,ChartObject
没有方法Axes
。
您所谓的“longwinded”版本实际上是 方式。
PS:我可以考虑让非工作代码无错误运行的唯一原因是忽略错误的错误处理程序。 我得到了预期的“运行时错误'438':对象不支持此属性或方法”。
答案 1 :(得分:1)
这终于奏效了:
With Worksheets("Chart").ChartObjects("MyChart").Chart.Axes(xlValue)
.MaximumScale = Range("MaxVal").Value
End With