Стоп-код Excel VBA, где выполняются условия - PullRequest
1 голос
/ 28 октября 2019

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

У меня есть кнопка на листе 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

1 Ответ

1 голос
/ 29 октября 2019

Как я уже сказал в своем комментарии, 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 в любом случае.

...