Excel VBA скрипт не работает нормально - PullRequest
0 голосов
/ 01 марта 2019

Когда B21 пусто, и я нажимаю на ячейку D21, я вижу ошибку 2 и ошибку 1 (это не ожидается, так как я ожидаю только ошибку 1).Но когда я нажимаю на ячейку E21, я вижу только ошибку 2, которая ожидается.

Я не уверен, где я ошибаюсь?

Мой код указан ниже:

If [B21] = "" Then
    If Target.Column = 4 Then
         If Target.Row = 21 Then
            Beep
            Cells(Target.Row, Target.Column).Offset(0, 1).Select
            MsgBox "1.Error"
         End If
    ElseIf Target.Column = 5 Then
        If Target.Row = 21 Then
            Beep
            Cells(Target.Row, Target.Column).Offset(0, 1).Select
            MsgBox "2.Error"
        End If
    End If

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

альтернативой решению Тима Уильямса является переменная в области рабочего листа, чтобы отслеживать, когда ячейка E21 выбирается самим вашим кодом

, поэтому код вашего рабочего листа будет:

    Dim dontBeep As Boolean

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If [B21] = "" Then
        If Target.Column = 4 Then
             If Target.Row = 21 Then
                Beep
                dontBeep = True ' make sure subsequent E21 cell selection would not trigger any beep and action
                Target.Offset(0, 1).Select
                MsgBox "1.Error"
             End If
        ElseIf Target.Column = 5 Then
            If Target.Row = 21 Then
                If dontBeep Then
                    dontBeep = False ' restore default triggering conditions
                Else
                    Beep
                    Target.Offset(0, 1).Select
                    MsgBox "2.Error"
                End If
            End If
        End If
    End If

End Sub

Вы также можете выполнить проверку индекса строки в начале, так как она одинакова для обоих соответствующих столбцов:

Dim dontBeep As Boolean

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If [B21] = "" Then
        If Target.Row = 21 Then
            If Target.Column = 4 Then
               Beep
               dontBeep = True ' make sure subsequent E21 cell selection would not trigger any beep and action

               Target.Offset(0, 1).Select
               MsgBox "1.Error"
            ElseIf Target.Column = 5 Then
                If dontBeep Then
                    dontBeep = False
                Else
                    Beep' restore default triggering conditions
                    Target.Offset(0, 1).Select
                    MsgBox "2.Error"
                End If
            End If
        End If
    End If

End Sub
0 голосов
/ 01 марта 2019

Когда ваш код выбирает ячейку, это также вызывает обработчик события.Обычно это можно предотвратить, установив Application.EnableEvents = False (не забудьте установить его обратно на True позже ...) -

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...