符合条件的Excel VBA停止代码

符合条件的Excel VBA停止代码,excel,vba,if-statement,stoppropagation,Excel,Vba,If Statement,Stoppropagation,我正在努力让代码正常工作 我在excel工作表上有一个按钮,当 检查必填字段值是否为0,如果不是,则检查消息框和结束代码 检查主选项卡上是否已存在引用号、引用是否存在、消息框和结束代码 如果1和2通过,则作为3个范围的值执行复制和粘贴,然后单击消息框 我尝试了很多选择,但都没能成功 Function Mand() As Boolean 'checks that mandatory fields have been updated If Sheets("INPUT").Ran

我正在努力让代码正常工作

我在excel工作表上有一个按钮,当

  • 检查必填字段值是否为0,如果不是,则检查消息框和结束代码

  • 检查主选项卡上是否已存在引用号、引用是否存在、消息框和结束代码

  • 如果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
    

    正如我在评论中所说的那样,
    如果不需要,则结束:

    If Mand Then Exit Sub
    If RecEx Then Exit Sub
    
    ^代码应该是什么样子的

    或者,您可以使用:

    If Mand Or RecEx Then Exit Sub
    
    您还需要确保仅通过包含
    End if
    块,将函数设置为
    True
    (如果上述设置为True):

    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。您的if语句很奇怪。它应该是(单独的)
    If Mand然后Exit Sub
    如果RecEx然后Exit Sub
    应该没有
    End If
    您也可以在一行中执行
    If Mand或RecEx然后Exit Sub
    。同样,没有必要使用
    End If
    你也应该会得到一个错误,说
    End If without block If
    ,这将是一个有用的错误,可以包含在你的原始帖子中。谢谢,@user1274820-它现在可以工作,就像我添加的If Mand或RecEx那样,然后退出Sub。但是,当这两个都不正确时(也就是说,所有必填字段都已完成,且参考号不存在,不会发生任何情况。没有消息,其余代码也不会运行(将数据复制到不同的选项卡)。谢谢。它是否真的进入下一行?您可以输入
    Debug.Print“make it!”
    在你的if语句之后-如果它在那里出现了,那么你的代码的其余部分就出了问题(你的文章中缺少了大部分)。谢谢,我添加了调试,但什么也没有发生(没有成功!)。在两个函数都为真时有效,但在两个函数都为假时无效。抱歉,这是一个全新的问题!啊,没问题,伙计,我看到了这个问题。你需要在函数中用end ifs像这样包装你的if语句-30秒后查看我的编辑