Выйдите из Sub, если условие не выполнено в функциональной процедуре - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу Exit Sub, если моя Function процедура (Colvalidation) не находит столбец из массива ниже. Я знаю, что невозможно End Sub в пределах Function, и я понятия не имею, как с этим справиться. Не могли бы вы помочь мне с этим?

Sub test()
(...)
    'Check if "Earnings", "Deductions", "Employer" headers exist

        vals = Array("Earnings", "Deductions", "Employer")
        vals = Array("Earnings", "Deductions", "Employer Paid Benefits and Taxes")

Set myRng = Worksheets(PayrollWS).Range(Worksheets(PayrollWS).Cells(MyR, 1), Worksheets(PayrollWS).Cells(MyR, 25))

For Each val In vals
    Colvalidation myRng, val
    If ColFound = False Then 'error = "Variable not defined"
    Exit Sub
Next

(...)
End Sub

Function Colvalidation(Rng As Range, value As Variant)
Dim rngX As Range, ColFound as Boolean


    Set rngX = Rng.Find(what:=value, lookat:=xlPart, LookIn:=xlValues)
    If rngX Is Nothing Then
        MsgBox value & " - Column Not Found" 'if column not found, Exit Sub after MsgBox
        ColFound = False
        Exit Function
    End If
End Function

1 Ответ

1 голос
/ 03 апреля 2020

Сделайте так, чтобы функция возвращала Boolean, сделайте ее False, если Find не удалось.

Public Function Colvalidation(ByVal Rng As Range, ByVal value As Variant) As Boolean
    Dim rngX As Range
    Set rngX = Rng.Find(What:=value, LookAt:=xlPart, LookIn:=xlValues)

    If rngX Is Nothing Then
        MsgBox value & " - Column Not Found" 
        Colvalidation = False
    Else
        Colvalidation = True
    End If
End Function

В основной подпрограмме, Exit Sub, если функция вернет False :

For Each val In vals
    If Not Colvalidation(myRng, val) Then Exit Sub
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...