Если оператор для проверки ошибок не работает - PullRequest
0 голосов
/ 30 мая 2019

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

У меня есть таблица, которая управляется раскрывающимся списком Проверка данных.Это поле имеет номера от 1 до 15 и будет отображать / скрывать строки, связанные с выбранным номером, т.е. 3 выбранными, поэтому отображаются строки с 1 по 3, с 4 по 15 или скрытые.То, что должен делать код проверки ошибок, это проверить выбранный номер списка, затем проверить ячейку в каждой строке, чтобы увидеть, если она пуста или нет, если пусто, отобразить сообщение об ошибке, если нет, то ничего не делать.Мне нужно, чтобы это сообщение об ошибке отображалось для каждой отображаемой строки, а не для скрытых строк.У меня есть ячейка вверху страницы с информацией о том, сколько ошибок у них есть, поэтому я не хочу, чтобы скрытые строки добавлялись к этому количеству.Я могу заставить это работать для чисел ноль и 1, но для 2 - 15 это не работает.В приведенном ниже коде показаны только цифры от 0 до 3, я могу изменить код для других строк, как только сработает.

Правильный результат при выборе nbr 3 D63 пусто, поэтому сообщение об ошибке в A63, D64: 65 не пусто, поэтому нетошибка msg Error

Фактический результат при выборе Nbr 3 D63: 65 пусто, поэтому A63: 65 должно отображать ошибку msg Outcome

Sub Check_SRU_Table()

    ' SRU 0 ** WORKING **
    If Range("SRUAdd").Value = "0" Then
        Range("Sig_1").Value = "Signature Release 1"
        Range("Sig_2").Value = "Signature Release 2"
        Range("Sig_3").Value = "Signature Release 3"
    ' 4 TO 15 OMITTED
    End If


    ' SRU 1 ** WORKING **
    If Range("SRUAdd").Value = "1" Then
        If Range("SRUName1").Value = "" Then
            Range("Sig_1").Value = "Signature Release 1 - ERROR"
        Else
            Range("Sig_1").Value = "Signature Release 1"
        End If
    End If

    ' SRU 2 ** NOT WORKING **
    If Range("SRUAdd").Value = "2" Then
        If Range("SRUName1").Value = "" Then
            Range("Sig_1").Value = "Signature Release 1 - ERROR"
        ElseIf Range("SRUName2").Value = "" Then
            Range("Sig_2").Value = "Signature Release 2 - ERROR"
        Else
            Range("Sig_1").Value = "Signature Release 1"
            Range("Sig_2").Value = "Signature Release 2"
        End If
    End If

    ' SRU 3 ** NOT WORKING **
    If Range("SRUAdd").Value = "3" Then
        If Range("SRUName1").Value = "" Then
            Range("Sig_1").Value = "Signature Release 1 - ERROR"
        ElseIf Range("SRUName2").Value = "" Then
            Range("Sig_2").Value = "Signature Release 2 - ERROR"
        ElseIf Range("SRUName3").Value = "" Then
            Range("Sig_3").Value = "Signature Release 3 - ERROR"
        Else
            Range("Sig_1").Value = "Signature Release 1"
            Range("Sig_2").Value = "Signature Release 2"
            Range("Sig_3").Value = "Signature Release 3"
        End If
    End If
    End Sub

    Private Sub BtnCheck_Click()
        Check_SRU_Table
    End Sub

Любая помощь, чтобы выяснить, где я иду не так, будет очень признательна.

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Ваши «SRU 2» и «SRU 3» не работают, потому что If ... ElseIf ... ElseIf ... (a.k.a. лестница if-else-if) фиксирует только первую обнаруженную ошибку. Я думаю, что вы переосмыслили это.

' SRU 2 ** Try something like this **
If Range("SRUAdd").Value = "2" Then
    If Range("SRUName1").Value = "" Then
        Range("Sig_1").Value = "Signature Release 1 - ERROR"
    Else
        Range("Sig_1").Value = "Signature Release 1"
    End If
    If Range("SRUName2").Value = "" Then
        Range("Sig_2").Value = "Signature Release 2 - ERROR"
    Else
        Range("Sig_2").Value = "Signature Release 2"
    End If
End If
1 голос
/ 30 мая 2019

Будет выполнено только одно условие из вашего блока If...ElseIf...Else.Похоже, вы хотите проверить все условия.Поэтому вам нужно переписать что-то вроде этого:

If Range("SRUAdd").Value = "3" Then
    If Range("SRUName1").Value = "" Then
        Range("Sig_1").Value = "Signature Release 1 - ERROR"
    End If
    If Range("SRUName2").Value = "" Then
        Range("Sig_2").Value = "Signature Release 2 - ERROR"
    End If
    If Range("SRUName3").Value = "" Then
        Range("Sig_3").Value = "Signature Release 3 - ERROR"
    End If
    If Range("SRUName3").Value <> "" And Range("SRUName2").Value <> "" And Range("SRUName1").Value <> "" Then
        Range("Sig_1").Value = "Signature Release 1"
        Range("Sig_2").Value = "Signature Release 2"
        Range("Sig_3").Value = "Signature Release 3"
    End If
End If

Я уверен, что есть более элегантный способ сделать это, но эта версия требует наименьшего переписывания того, как вы выбрали подходэто.

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