Скажите подпрограмме пропустить, если ячейка не содержит значения - PullRequest
0 голосов
/ 29 апреля 2019

Мне нужно научиться пропускать?или выйдите из процедуры if и перейдите к следующей, если первая строка не соответствует критериям.ЧИТАЙТЕ: ActiveCell.Offset (0, -1) = "F".

Ps.Этот саб помещен в событие Change.

Во-первых, я действительно новичок в этом, и я много смотрел и читал, чтобы стать лучше.На 99% всех моих вопросов до сих пор отвечали здесь в предыдущих темах.Это было мое первое исключение.Приветствуются советы и рекомендации по чтению материалов

Я пробовал: Если не ActiveCell.Offset (0, -1) = "F", то Exit Sub, которая в этом случае просто убила всю процедуру.Я также попытался разделить его на 5 различных подпрограмм и попытался вызвать их из подпрограммы события change, но там я тоже получаю ошибки.

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("D:D")) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
Target.Offset(0, -1) = Now

'Written by Bjoern Monroe (04.27.2019) - [Rev 1]


'If the above cell is = L then the selected cell can't contain "VS" or "VN"
If ActiveCell.Offset(0, -1) = "L" Then
    ElseIf ActiveCell.Text = "VS" Or ActiveCell.Text = "VN" Then
    MsgBox ("Trigger Warning")
    Else
    MsgBox ("Wont Trigger Warning")
End If

'If the above cell is = F then the selected cell can't contain "VS" or "VN"
If ActiveCell.Offset(0, -1) = "F" Then
    ElseIf ActiveCell.Text = "VS" Or ActiveCell.Text = "VN" Then
    MsgBox ("Trigger Warning")
    Else
    MsgBox ("Wont Trigger Warning")
End If

'If the above cell is = S then the selected cell can't contain "L", "VS", "F", or "S"
If ActiveCell.Offset(0, -1) = "S" Then
    ElseIf ActiveCell.Text = "L" Or ActiveCell.Text = "VS" Or ActiveCell.Text = "F" Or ActiveCell.Text = "S" Then
    MsgBox ("Trigger Warning")
    Else
    MsgBox ("Wont Trigger Warning")
End If

'If the above cell is = VN then the selected cell can't contain "L", "VN", "F", or "S"
If ActiveCell.Offset(0, -1) = "VN" Then
    ElseIf ActiveCell.Text = "L" Or ActiveCell.Text = "VN" Or ActiveCell.Text = "F" Or ActiveCell.Text = "S" Then
    MsgBox ("Trigger Warning")
    Else
    MsgBox ("Wont Trigger Warning")
End If

'If the above cell is = VS then the selected cell can't contain "VS", "L", Or "S"
If ActiveCell.Offset(0, -1) = "VS" Then
    ElseIf ActiveCell.Text = "VS" Or ActiveCell.Text = "L" Or ActiveCell.Text = "S" Then
    MsgBox ("Trigger Warning")
    Else
    MsgBox ("Wont Trigger Warning")
End If


End Sub

У меня есть столбец, который всегда заполняется пользователем с F, L, S, VN и VS.Но последовательность значений, которые заполняются, почти всегда одинакова.Если ячейка столбца выше F, активная ячейка может быть только F, L или S. Никогда, например, VN или VS.Я хочу, чтобы пользователь получил всплывающее сообщение о том, что он собирается написать неправильную последовательность.

Результаты пока что.Я получаю 5 всплывающих окон вместо одного, который я ожидал.Это имеет смысл, потому что подпункт думает, что я хочу, чтобы он проверил все 5, даже если он соответствует критериям или нет.

1 Ответ

2 голосов
/ 29 апреля 2019

Первым шагом было бы исправить синтаксис If , так как ElseIf не должен иметь отступ, и вы ничего не выполняете, если ваше условие выполнено.
Я также добавил проверку для ActiveCell.Column, потому что, если вы выберете какую-либо строку в первом столбце, ваш код выдаст ошибку:

    'If the above cell is = L then the selected cell can't contain "VS" or "VN"
    If ActiveCell.Column > 1 Then
        If ActiveCell.Offset(0, -1) = "L" Then
            'Nothing to execute?
        ElseIf ActiveCell.Text = "VS" Or ActiveCell.Text = "VN" Then
            MsgBox ("Trigger Warning")
        Else
            MsgBox ("Wont Trigger Warning")
        End If
    End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...