如果功能过程中不满足条件,则退出Sub

时间:2020-04-02 18:52:52

标签: excel vba function loops

如果我的Exit Sub过程(Function)在下面的数组中找不到列,我想Colvalidation。 我知道不可能在End SubFunction,而且我也不知道如何处理。你能帮我吗?

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 个答案:

答案 0 :(得分:1)

让函数返回一个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