Код остановки Excel VBA, где выполняются условия

Я изо всех сил пытаюсь заставить свой код работать.

У меня есть кнопка на листе excel, которая при срабатывании

  1. проверяет обязательные поля, значение равно 0, если нет, то окно сообщения и конечный код

  2. проверяет, существует ли номер ссылки на основной вкладке, существует ли ссылка, окно сообщения и конечный код

  3. если 1 и 2 проходят, выполните копирование и вставку в качестве значений для 3 диапазонов, а затем окно сообщения.

Я пробовал несколько вариантов, но не могу заставить его работать

    Function Mand() As Boolean
   'checks that mandatory fields have been updated

   If Sheets("INPUT").Range("C11") > 0 Then MsgBox "Mandatory Fields Missing" & vbNewLine & "Changes Not Saved!"
   Mand = True

    End Function


    Function RecEx() As Boolean
    'checks that the reference number does not exisit on the High Level master list

    dup = WorksheetFunction.CountIf(Sheets("High_Level_List").Columns(1), Sheets("INPUT").Range("C17"))
    If dup > 0 Then MsgBox "This Record Exists!!!" & vbNewLine & "If saving an update, use the Save Changes button"
    RecEx = True   

    End Function


    Sub RegisterNewRec()
    ' checks 2 functions, if either are TRUE then exit, otherwise update master

    If Mand Then Exit Sub

        If RecEx Then Exit Sub

    End If

    Dim rng As Range
    Set rng = Sheets("INPUT").Range("AO2:CX2")
    Sheets("High_Level_List").Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(rng.Rows.Count, rng.Columns.Count).Cells.Value = rng.Cells.Value

    'more code that updates master

    MsgBox "Record added to Master"

    End Sub

person Chade    schedule 28.10.2019    source источник
comment
docs.microsoft.com/ en-us/office/vba/language/concepts/   -  person D_Bester    schedule 29.10.2019
comment
techonthenet.com/excel/formulas/or_vba.php   -  person D_Bester    schedule 29.10.2019
comment
Ваш оператор if странный. Просто должно быть (отдельно) If Mand Then Exit Sub If RecEx Then Exit Sub Не должно быть End If   -  person user1274820    schedule 29.10.2019
comment
Вы также можете сделать If Mand Or RecEx Then Exit Sub в одной строке. Опять же, нет необходимости в End If   -  person user1274820    schedule 29.10.2019
comment
Вы также должны получить сообщение об ошибке End If without block if, которое было бы полезно включить в исходное сообщение.   -  person user1274820    schedule 29.10.2019


Ответы (1)


Как я уже сказал в своем комментарии, End If там быть не должно:

If Mand Then Exit Sub
If RecEx Then Exit Sub

^ Как должен выглядеть код

В качестве альтернативы вы можете использовать:

If Mand Or RecEx Then Exit Sub

Вам также необходимо убедиться, что вы установили для своей функции значение True только в том случае, если приведенное выше верно, включив блок End If:

Function Mand() As Boolean
If Sheets("INPUT").Range("C11") > 0 Then 
   MsgBox "Mandatory Fields Missing" & vbNewLine & "Changes Not Saved!"
   Mand = True
End If
End Function

Function RecEx() As Boolean
dup = WorksheetFunction.CountIf(Sheets("High_Level_List").Columns(1), Sheets("INPUT").Range("C17"))
If dup > 0 Then 
    MsgBox "This Record Exists!!!" & vbNewLine & "If saving an update, use the Save Changes button"
    RecEx = True
End If
End Function

Проблема в том, что вы устанавливали RecEx и Mand в значение true в любом случае.

person user1274820    schedule 28.10.2019
comment
Спасибо, @ user1274820 - теперь это работает, поскольку я добавил If Mand Or RecEx Then Exit Sub. Однако, когда ни одно из этих условий не соответствует действительности (т. е. все обязательные поля заполнены, а номер ссылки не существует, ничего не происходит. Никаких сообщений и остального кода не выполняется (копировать данные на разные вкладки). Спасибо. - person Chade; 29.10.2019
comment
Он действительно переходит на следующую строку? Вы можете поставить Debug.Print "Made it!" после вашего оператора if - если он туда попадает, значит, что-то не так в остальной части вашего кода (большая часть которого отсутствует в вашем сообщении) - person user1274820; 29.10.2019
comment
Спасибо, я добавил отладку, и ничего не происходит (не удалось!). Работает, когда одна из функций истинна, но не когда обе ложны. Извините, новичок в этом! - person Chade; 29.10.2019
comment
Ааа, нет проблем, чувак, я вижу здесь проблему. Вам нужно обернуть свои операторы if в функции с помощью end ifs вот так - см. Мое редактирование через 30 секунд. - person user1274820; 29.10.2019