从Excel 2003升级到2007,结果为;堆栈溢出错误“;关于以前工作的vba
以下VBA代码在Excel2003中运行良好,但在Excel2007中会导致堆栈溢出错误。根据下拉菜单选择,解锁或锁定某些单元格需要该代码。我需要能够在Excel2003和2007中运行代码。请帮忙从Excel 2003升级到2007,结果为;堆栈溢出错误“;关于以前工作的vba,vba,excel-2007,locking,cells,Vba,Excel 2007,Locking,Cells,以下VBA代码在Excel2003中运行良好,但在Excel2007中会导致堆栈溢出错误。根据下拉菜单选择,解锁或锁定某些单元格需要该代码。我需要能够在Excel2003和2007中运行代码。请帮忙 Private Sub Worksheet_Change(ByVal Target As Range) If [E28] = "NO" Then ActiveSheet.Unprotect ("PASSWORD") [K47:K53].Locked = False
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
堆栈溢出几乎肯定来自递归。不确定为什么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
只要工作表中的任何单元格发生更改,就会调用您的方法。“否”块更改目标单元格的内容,从而导致再次调用该方法 选项:
这个网站的完美问题!