Vba visual basic程序错误太大&;检测到不明确的名称\u更改
我有一个大型VBA宏,它由一个大型私有子工作表_更改组成(ByVal目标范围) 它首先给我的过程太大的错误,因为它是真的大 当我试图将其分为3个私有子工作表_Change(ByVal Target作为范围)时 此错误显示为: 检测到不明确的名称\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
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