【问题标题】:Chart code does not run when protection is on保护开启时图表代码不运行
【发布时间】:2018-05-25 14:58:49
【问题描述】:

Excel 给了我

运行时错误'-2147467259 (80004005):方法'Maximumscale' 对象“轴”失败

但只有当我的工作表受到保护时。
现在,我在ThisWorkbok excel 对象上也有取消保护代码,如下所示:

Sheets("Charted").Protect Password:="123", UserInterFaceOnly:=True

我的代码如下:

Sub SetAxes()

   Dim objCht As ChartObject, AxisOne As Long, AxisTwo As Long, RangeMin As Double
   Dim RangeMax As Double, rng As Range       

   For Each objCht In Sheets("Charted").ChartObjects

   AxisOne = Sheets("Charted").Range("$H$32").Value
   AxisTwo = Sheets("Charted").Range("$H$6").Value
   Set rng = Sheets("Charted").Range("H7:H31")

   RangeMin = Application.WorksheetFunction.Min(rng)
   RangeMax = Application.WorksheetFunction.Max(rng)

      With objCht.Chart

            With .Axes(xlValue)
                If AxisOne > AxisTwo Then
                .MaximumScale = AxisOne + 2000000 + RangeMax
                .MinimumScale = AxisTwo - 2000000
                Else
                .MaximumScale = AxisTwo + 500000 - RangeMin  'Error Occurs on this line
                .MinimumScale = AxisOne - 2000000
                End If
              End With

      End With
   Next objCht
   Call HideZeroRows
End Sub

这段代码有什么不寻常的地方吗? 这一切都发生在同一张纸上,我有它,所以允许运行宏,这是怎么回事? 这是一个瀑布条形图,这就是为什么我首先需要它来全面披露。

提前致谢。

【问题讨论】:

  • 您必须取消保护、编辑图表并重新保护,或者允许在保护设置中编辑对象。
  • UserInterFaceOnly 仅适用于当前会话。关闭并重新打开工作簿,此设置将被忽略,因此 VBA 无法对受保护的对象进行操作。

标签: excel vba


【解决方案1】:

如果工作表保护配置为不允许编辑,则您无法修改受保护的工作表:无论您是用户还是 VBA 程序都没有区别:您需要先取消保护工作表,然后才能对它:

Dim wasProtected As Boolean
If theSheet.ProtectionMode Then
    wasProtected = True
    theSheet.Unprotect '...args...
End If

'modify everything you need to modify

If wasProtected Then theSheet.Protect '...args...

【讨论】:

  • 在这种情况下,不需要检查ProtectionMode。如果工作表不受保护,取消保护不会引发任何错误(就像这条线从未存在过一样)。
  • @JohnyL 该标志不适用于 before 进行更改,而是用于 after,以避免在未受保护的情况下保护工作表首先。在工作中解决这个问题,系统地保护工作表在您测试事物并且不希望它无条件地保护它时让 AF 很烦。
  • @MathieuGuindon 这可以在ThisWorkbook 上工作吗?我有很多针对该工作表的宏,可能还有更多要遵循的宏。
  • @Remi wotkbook 没有工作表保护,工作表保护是工作表的东西 ;-)
  • @MathieuGuindon 我知道,但我的 OP 询问为什么我的保护在 ThisWorkbook 中不起作用。我有 7 个在该页面上运行的宏,我尝试了你的方法。它部分工作。你的帖子是一个答案,但我希望有一个好的选择。我可能会把它变成一个单独的模块,然后调用你的代码来节省时间......
【解决方案2】:

您必须允许用户在保护中“编辑对象”。

【讨论】:

  • @Remi 取消保护、修改、重新保护。
猜你喜欢
  • 1970-01-01
  • 2018-02-18
  • 2022-07-07
  • 2016-09-16
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-05
相关资源
最近更新 更多