【问题标题】:Avoiding the use of Activate and Select when working with charts (Excel)使用图表 (Excel) 时避免使用激活和选择
【发布时间】:2013-12-27 01:56:34
【问题描述】:

我知道在 Excel VBA 中使用 ActivateSelect 并不是最佳做法。我已经看到有关在处理范围时如何避免它们的参考资料(例如:LINK)。在处理ChartObjects(或除 Ranges 之外的任何东西,一般来说)时,我该如何避免它们?

例如,使用 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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

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

    至于您的问题 #2:我错过了什么?ChartObject 没有方法 Axes。 您所谓的“冗长”版本实际上是的方法。

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

    【讨论】:

      【解决方案2】:

      这终于奏效了:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多