Visual Basic процедура слишком большая ошибка и обнаружено неоднозначное имя worksheet_change - PullRequest
0 голосов
/ 03 июля 2018

У меня есть большой макрос VBA, который состоит из одного большого Private Sub Worksheet_Change (ByVal Target As Range).

Сначала я получаю слишком большую ошибку процедуры, поскольку она действительно большая.

Когда я пытался разбить его на 3 Private Sub Worksheet_Change (ByVal Target As Range).

эта ошибка появляется:

Обнаружено неоднозначное имя worksheet_change

какие-либо подсказки я могу обойти эти 2 ошибки?

заранее спасибо

вот мои коды, реальные коды имеют тонны условий и проверку текста для каждого целевого адреса

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

1 Ответ

0 голосов
/ 04 июля 2018

На листе может быть только одно событие 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...