【问题标题】:Upgrade from Excel 2003 to 2007 results in "stack overflow error" on previously working vba从 Excel 2003 升级到 2007 会导致以前工作的 vba 出现“堆栈溢出错误”
【发布时间】:2010-09-25 21:33:58
【问题描述】:

以下 VBA 代码在 Excel 2003 中运行良好,但在 Excel 2007 中导致堆栈溢出错误。根据下拉菜单选择解锁或锁定某些单元格需要该代码.我需要能够在 Excel 2003 和 2007 中运行代码。请帮忙。

Private Sub Worksheet_Change(ByVal Target As Range)
   If [E28] = "NO" Then
     ActiveSheet.Unprotect ("PASSWORD")
     [K47:K53].Locked = False
     [K47:K53].Interior.ColorIndex = 16
     [K47:K53].ClearContents
     ActiveSheet.Protect ("PASSWORD")
   Else
     ActiveSheet.Unprotect ("PASSWORD")
     [K47:K53].Interior.ColorIndex = 0
     'Next line is optional, remove preceding apostrophe if protection should stay on.
     ActiveSheet.Protect ("PASSWORD")
   End If
End Sub

【问题讨论】:

  • 这个网站的完美问题!

标签: vba excel-2007 locking cells


【解决方案1】:

堆栈溢出几乎肯定来自递归。不知道为什么您在 Excel 2003 中没有出现堆栈溢出 - 可能在堆栈溢出之前引发了错误。

您可以防止无限递归,如下所示:

Private m_bInChange As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
If m_bInChange Then Exit Sub
On Error GoTo ErrHandler
    m_bInChange = True
    If [E28] = "NO" Then
        ActiveSheet.Unprotect ("PASSWORD")
        [K47:K53].Locked = False
        [K47:K53].Interior.ColorIndex = 16
        [K47:K53].ClearContents
        ActiveSheet.Protect ("PASSWORD")
    Else
        ActiveSheet.Unprotect ("PASSWORD")
        [K47:K53].Interior.ColorIndex = 0
        'Next line is optional, remove preceding apostrophe if protection should stay on.
        ActiveSheet.Protect ("PASSWORD")
    End If

    m_bInChange = False
    Exit Sub
ErrHandler:
    m_bInChange = False
    Exit Sub
End Sub

【讨论】:

    【解决方案2】:

    只要工作表中的任何单元格发生更改,就会调用您的方法。您的“NO”块会更改目标单元格的内容,从而导致再次调用该方法。

    选项:

    1. 按照 Joe 的建议使用标志变量,查看您是否已经在执行
    2. 测试“目标”值以查看它是否为 E28,如果这是您要捕获的单元格更改。类似的东西

      If Target.Address "$E$28" Then Exit Sub

    【讨论】:

      猜你喜欢
      • 2011-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 2015-05-21
      • 2014-02-14
      • 1970-01-01
      相关资源
      最近更新 更多