使用图表时避免使用激活和选择(Excel)

Mr.*_*inn 5 excel vba excel-vba

我知道在Excel 中使用ActivateSelectVBA不是最佳实践.我已经看过在处理Ranges时如何避免它们的参考文献(例如:LINK).在处理时ChartObjects(或者除了Ranges之外的其他任何东西),我怎么能避免它们呢?

例如,一种修改y轴上最大值的方法Activate,Select看起来像这样(有效):

        ActiveSheet.ChartObjects("MyChart").Activate
        ActiveChart.Axes(xlValue).Select
        ActiveChart.Axes(xlValue).MaximumScale = Range("MaxVal").Value
Run Code Online (Sandbox Code Playgroud)

为了避免使用ActivateSelect,我厌倦了声明变量,并使用它们,但这不起作用:

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

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


编辑:使用这个"longwinded"版本:

    With Worksheets("Chart").ChartObjects("MyChart").Chart.Axes(xlValue)
        .MaximumScale = Range("MaxVal").Value
    End With
Run Code Online (Sandbox Code Playgroud)

san*_*ica 2

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

至于你的问题#2:我错过了什么?,aChartObject没有办法Axes。您所谓的“冗长”版本实际上就是这样做的方法

PS:我能想到的非工作代码运行时没有错误的唯一原因是错误处理程序忽略了错误。我收到预期的“运行时错误‘438’:对象不支持此属性或方法”。