我有一个很大的VBA宏,其中包含一个大的Private Sub Worksheet_Change(ByVal目标为范围)。
它首先给我带来了太大的错误,因为它确实很大。
当我尝试将其分为3个私有子Worksheet_Change(ByVal目标为范围)时。
出现此错误:
检测到模糊名称worksheet_change
我可以解决这两个错误的任何线索吗?
预先感谢
这是我的代码,实际代码中有很多条件和针对每个目标地址的文字检查
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = [rng_opt1].Address Then
If [rng_opt1] = "x" Then
If [rng1_1] = "z" then
[rng1_1] = " "
End if
End If
End if
End sub
感谢@urdearboy,我解决了,我的最终代码是这样的(简化了很多)。这很棘手,我花了一段时间,因为我的目标定义了名称
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo Whoa
Application.EnableEvents = False
If Target.Address = [rng_opt1].Address Then
Call Opt1(Target)
ElseIf Target.Address = [rng1_1].Address Then
Call Opt11(Target)
End if
LetsContinue:
Application.EnableEvents = True
Exit Sub
Whoa:
MsgBox Err.Description
Resume LetsContinue
End Sub
Sub Opt1(Target As Range)
If Target.Address = [rng_opt1].Address Then
If [rng_opt1] = "x" Or [rng_opt1] = "y" Then
If [rng1_1] = "z"
[rng1_1] = " "
End If
End if
End if
End Sub
Sub Opt11(Target As Range)
If Target.Address = [rng1_1].Address Then
If [rng1_1] = " " Then
If [rng1_2] = " " And [rng1_3] = " " And [rng1_4] = " " Then
[rng1_1] = "y"
[rng1_2] = "x"
End If
End If
End if
End sub
答案 0 :(得分:0)
在工作表上只能有一个WorkSheet_Change
事件,这就是为什么出现检测到歧义名称错误的原因。
如果您的代码太长,请尝试在Sub
中创建操作,然后根据特定条件调用这些子。这样,您可以将您的WorkSheet_Change
代码限制为严格评估Target
。
在您的WorkSheet_Change
代码中,您可以看到以下内容:
If Target.Value = “x” Then
Call SubX
ElseIF Target.Value = “y” Then
Call SubY
ElseIF Target.Value = “z” Then
Call SubZ
End IF
SubX ()
‘Do Something
End Sub
SubY ()
‘Do Something
End Sub
SubZ ()
‘Do Something
End Sub
在对工作表进行任何物理更改之前,您将需要禁用事件,否则您将陷入无限循环并导致excel实例崩溃。使用以下方法来避免此问题:
Application.EnableEvents = False
‘Physical changes to worksheet
Application.EnableEvents = True