Vba visual basic程序错误太大&;检测到不明确的名称\u更改

Vba visual basic程序错误太大&;检测到不明确的名称\u更改,vba,Vba,我有一个大型VBA宏,它由一个大型私有子工作表_更改组成(ByVal目标范围) 它首先给我的过程太大的错误,因为它是真的大 当我试图将其分为3个私有子工作表_Change(ByVal Target作为范围)时 此错误显示为: 检测到不明确的名称\u更改 有什么线索可以帮助我解决这两个错误吗 提前谢谢 这是我的代码,实际的代码有很多条件,每个目标地址都有文本检查 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Addre

我有一个大型VBA宏,它由一个大型私有子工作表_更改组成(ByVal目标范围)

它首先给我的过程太大的错误,因为它是真的大

当我试图将其分为3个私有子工作表_Change(ByVal Target作为范围)时

此错误显示为:

检测到不明确的名称\u更改

有什么线索可以帮助我解决这两个错误吗

提前谢谢

这是我的代码,实际的代码有很多条件,每个目标地址都有文本检查

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
多亏了@urderboy,我解决了这个问题,我的最终代码是这样的(非常简化的版本)。这很棘手,而且花了我一段时间,因为我的目标已经定义了名称

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

一个工作表上只能有一个
工作表\u Change
事件,这就是为什么检测到不明确名称的原因

如果代码太长,请尝试在
Sub
中创建操作,然后根据特定条件调用这些Sub。这样,您可以限制您的
工作表\u更改
代码,以严格评估
目标

在您的
工作表\u Change
代码中,您可以有如下内容:

If Target.Value = “x” Then
  Call SubX
ElseIF Target.Value = “y” Then
  Call SubY
ElseIF Target.Value = “z” Then
  Call SubZ
End IF




注: 在对工作表进行任何物理更改之前,您需要禁用事件,否则您会发现自己处于无限循环中,并使excel实例崩溃。请使用以下方法避免此问题:

Application.EnableEvents = False
   ‘Physical changes to worksheet
Application.EnableEvents = True

是的,我知道你不必使用
呼叫
线路。它只是清楚地说明发生了什么并给出了上下文,有时这比缩短宏的字符限制更重要。(由于使用了
Call
,我在收到9/10的评论之前先发制人地离开了)非常感谢,我试图打破它,正如一些人建议的那样来解决“过程太大”的错误,但是不能;t解决如何传递工作表更改事件的目标值。明天我要试试你的建议。非常感谢!您也可以将参数传递给sub,但在这个问题中,这与如何传递参数无关。如果您需要将一些变量传递到sub(可能是目标地址?)。非常直截了当,或者你可以回到这里寻求帮助,欢迎你!请查看可能重复的问题,看看这是否回答了您的问题。
SubY ()
   ‘Do Something
End Sub
SubZ ()
   ‘Do Something
End Sub
Application.EnableEvents = False
   ‘Physical changes to worksheet
Application.EnableEvents = True