Причина, по которой это продолжается, заключается в том, что когда вы выходите из этого подпрограммы, он просто завершает обработку для текущего подпрограммы , а не дополнительного кода.
Вам также необходимо:
- вызвать ошибку в нижнем подпрограмме и обработать исключение в вашем подпрограмме верхнего уровня
- превратить этот Data_Validation () в функциюкоторый возвращает значение, например 0, если ошибок нет, или 1, если ошибки существуют
- , просто переместите этот большой блок if в событие On_Click, которое вы используете для запуска вставки.Если вы переместите код вверх в основной сабвуфер,
EXIT SUB
будет корректно выдавать ваш код после срабатывания.Затем введите это значение в ваш подуровень верхнего уровня.
Самым простым для немедленной реализации было бы превращение Data_Validation () в функцию и возвращение значения True или False, если проверка завершена.
Если проверка не пройдена, мы обработаем сообщения об ошибках и вернем значение FALSE в основной Sub для выхода из sub, а затем разрешим пользователю обновить форму и снова нажать кнопку.Я не уверен, для чего был ваш blnVal
.Потенциально пытаетесь сделать то, что я обновил для вашего кода? - но единственный способ работы этой конкретной версии логики - это если вы установите переменные в public, и это не считается хорошей практикой.
Имейте в виду, что если вы хотите, чтобы пользователь мог обновлять данные во время обработки кода, это не очень возможно.Вы можете создавать поля ввода вместо окон ошибок во всплывающем окне, которые позволяют пользователю вводить эти поля и продолжать обработку кода при вводе значения и принятии ввода.
Private Sub AddName_Click()
'Variable Declaration
Dim BlnVal As Boolean
'Find Last Row on Staff Data Worksheet
Dim LastRow As Long
Dim rng As Range
'Use a range on the sheet
Set rng = Sheets("Staff Data").Range("A2:E900")
' Find the last row
LastRow = Last(1, rng)
'Data Validation - returns FALSE if failed, True if success
If Data_Validation() = False Then
Exit Sub
End If
'Find Area value
If ARLArea = True Then rng.Parent.Cells(LastRow + 1, 1).Value = "ARL"
If LSQArea = True Then rng.Parent.Cells(LastRow + 1, 1).Value = "LSQ"
If KNBArea = True Then rng.Parent.Cells(LastRow + 1, 1).Value = "KNB"
If RSQArea = True Then rng.Parent.Cells(LastRow + 1, 1).Value = "RSQ"
If RevenueControlInspectors = True Then rng.Parent.Cells(LastRow + 1, 1).Value = "RCI"
If SpecialRequirementTeam = True Then rng.Parent.Cells(LastRow + 1, 1).Value = "SRT"
rng.Parent.Cells(LastRow + 1, 2).Value = EmployeeNo1.Value
rng.Parent.Cells(LastRow + 1, 3).Value = FirstName1.Value
rng.Parent.Cells(LastRow + 1, 4).Value = LastName1.Value
'Find Grade value
If CSA2 = True Then rng.Parent.Cells(LastRow + 1, 5).Value = "CSA2"
If CSA1 = True Then rng.Parent.Cells(LastRow + 1, 5).Value = "CSA1"
If CSS2 = True Then rng.Parent.Cells(LastRow + 1, 5).Value = "CSS2"
If CSS1 = True Then rng.Parent.Cells(LastRow + 1, 5).Value = "CSS1"
If CSM2 = True Then rng.Parent.Cells(LastRow + 1, 5).Value = "CSM2"
If CSM1 = True Then rng.Parent.Cells(LastRow + 1, 5).Value = "CSM1"
If AM = True Then rng.Parent.Cells(LastRow + 1, 5).Value = "AM"
If RCI = True Then rng.Parent.Cells(LastRow + 1, 5).Value = "RCI"
If SRT = True Then rng.Parent.Cells(LastRow + 1, 5).Value = "SRT"
On Error GoTo ErrOccured
'Boolean Value
BlnVal = 0
ErrOccured:
'TurnOn screen updating
Application.ScreenUpdating = True
Application.EnableEvents = True
'Empty Area
ARLArea = False
LSQArea = False
KNBArea = False
RSQArea = False
RevenueControlInspectors = False
SpecialRequirementTeam = False
'Empty EmployeeNo1
EmployeeNo1.Value = ""
'Empty FirstName1
FirstName1.Value = ""
'Empty LastName1
LastName1.Value = ""
'Empty Grade
CSA2 = False
CSA1 = False
CSS2 = False
CSS1 = False
CSM2 = False
CSM1 = False
AM = False
RCI = False
SRT = False
End Sub
-
Function Data_Validation() As Boolean 'Declare Function with Bool as data type
'Default True. False if any conditions met. When a function is called, a new variable,
'with the function name and datatype given is created. You'll set the value in the
'function. When the function ends either in Exit Function or
'End Function, whatever is contained in this variable is returned as the Functions result
Data_Validation = True
' Check if all data has been entered on the userform
If ARLArea = False And KNBArea = False And LSQArea = False And RSQArea = False And RevenueControlInspectors = False And SpecialRequirementTeam = False Then
MsgBox "Select Area!", vbInformation, ("Area")
ARLArea.SetFocus
Data_Validation = False
Exit Function
End If
If EmployeeNo1 = "" Then
MsgBox "Enter Employee Number!", vbInformation, ("Employee Number")
EmployeeNo1.SetFocus
Data_Validation = False
Exit Function
End If
If FirstName1 = "" Then
MsgBox "Enter First Name!", vbInformation, ("First Name")
FirstName1.SetFocus
Data_Validation = False
Exit Function
End If
If LastName1 = "" Then
MsgBox "Enter Last Name!", vbInformation, ("Last Name")
LastName1.SetFocus
Data_Validation = False
Exit Function
End If
If CSA2 = False And CSA1 = False And CSS2 = False And CSS1 = False And CSM2 = False And CSM1 = False And AM = False And RCI = False And SRT = False Then
MsgBox "Select Grade!", vbInformation, ("Grade")
CSA2.SetFocus
Data_Validation = False
Exit Function
End If
BlnVal = 1
End Function