处理图表时避免使用“激活”和“select”(Excel)

我知道在Excel VBA中使用“ Activate和“ Select并不是最佳实践。 在处理范围时,我已经看到了如何避免它们的引用(例如: LINK )。 在处理ChartObjects (或一般情况下,除Range之外的其他任何东西)时如何避免它们?

例如,使用ActivateSelect修改y轴上的最大值的方法看起来像这样(工作):

  ActiveSheet.ChartObjects("MyChart").Activate ActiveChart.Axes(xlValue).Select ActiveChart.Axes(xlValue).MaximumScale = Range("MaxVal").Value 

为了避免使用ActivateSelect ,我厌倦了声明variables,并与那些工作,但这是行不通的:

  Dim ws As Worksheet Set ws = Worksheets("Chart") With ws.ChartObjects("MyChart").Axes(xlValue) .MaximumScale = Range("MaxVal").Value End With 

上面的代码运行(即不会抛出错误),但轴上的比例不会改变。 我错过了什么?


编辑:得到它与这个“longwinded”版本工作:

  With Worksheets("Chart").ChartObjects("MyChart").Chart.Axes(xlValue) .MaximumScale = Range("MaxVal").Value End With 

至于你的问题#1: 在处理ChartObjects(或一般情况下,除Range之外的其他任何东西)时如何避免它们? ,您使用的方法是正确的。 你的结论不起作用是由另一个错误带来的。

至于你的问题#2: 我错过了什么?ChartObject没有Axes方法。 你所说的“longwinded”版本实际上这样做方式。

PS:我可以考虑的非工作代码运行没有错误的唯一原因是忽略错误的error handling程序。 我得到预期的“运行时错误438”:对象不支持此属性或方法“。

这终于奏效了:

  With Worksheets("Chart").ChartObjects("MyChart").Chart.Axes(xlValue) .MaximumScale = Range("MaxVal").Value End With