在使用Excel图表时,避免使用“激活”和“选择”功能

5
我知道在Excel VBA中使用ActivateSelect并不是最佳实践。我看过有关如何避免处理范围时的参考资料(例如:链接)。当处理ChartObjects(或一般情况下除了范围之外的任何内容)时,我该如何避免它们?
例如,使用ActivateSelect来修改y轴上的最大值的方法如下(可以正常工作):
        ActiveSheet.ChartObjects("MyChart").Activate
        ActiveChart.Axes(xlValue).Select
        ActiveChart.Axes(xlValue).MaximumScale = Range("MaxVal").Value

为了避免使用ActivateSelect,我尝试声明变量并与之一起操作,但这并不行:
     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
2个回答

2
关于您的第一个问题:“我如何在处理ChartObjects(或除范围以外的任何其他内容)时避免它们?”,您使用的方法是正确的。您得出“不起作用”的结论是由另一个错误引起的。
关于您的第二个问题:“我错过了什么?”。一个ChartObject没有Axes方法。您所谓的“冗长版本”实际上是做到这一点的方法。
PS:我能想到代码未能正常工作但未出现错误的唯一原因是忽略错误的错误处理程序。我得到了预期的“运行时错误'438':对象不支持此属性或方法”。

1
这最终起作用了:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接