【问题标题】:Excel VBA stop code where conditions are met满足条件的 Excel VBA 停止代码
【发布时间】:2019-10-29 07:29:00
【问题描述】:

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

我在 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

【问题讨论】:

标签: excel vba if-statement stoppropagation


【解决方案1】:

正如我在评论中所说,End If 不需要在那里:

If Mand Then Exit Sub
If RecEx Then Exit Sub

^ 代码的外观

您也可以使用:

If Mand Or RecEx Then Exit Sub

您还需要通过包含End If 块来确保仅将您的函数设置为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

问题是您将RecExMand 设置为true。

【讨论】:

  • 谢谢,@user1274820 - 它现在可以正常工作,因为我添加了 If Mand Or RecEx Then Exit Sub。但是,当这些都不正确时(即所有必填字段都已完成且参考号不存在,则不会发生任何事情。没有消息并且其余代码不会运行(将数据复制到不同的选项卡)。谢谢。
  • 它真的进入下一行了吗?你可以在你的 if 语句后面加上一个Debug.Print "Made it!" - 如果它在那里,那么你的代码的其余部分有问题(你的帖子中大部分都没有)
  • 谢谢,我添加了调试,但没有任何反应(没有成功!)。当任何一个函数都为 TRUE 时有效,但当两者都为 false 时无效。抱歉,这方面很新!
  • 啊,没问题,我在这里看到了问题。您需要使用 end if 将 if 语句包装在函数中 - 请在 30 秒内查看我的编辑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-23
  • 1970-01-01
  • 2020-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多