Forms 如何有条件地停止访问VBA代码?
所以我在Access中创建了一个表单,它有一个组合框和一个文本框。表单在按下按钮后计算一些内容,但组合框和文本框都必须填充,或者两者都不能填充。我想做的是将其置于一个条件中,这样,如果只填充了其中一个,则会弹出一个消息框,解释如何填充这两个框,然后继续停止代码。我知道如何做消息框部分,但现在它显示消息框,然后继续执行产生错误的代码 我做了一些研究,但我发现大部分都与暂时暂停表单有关,而不是完全停止表单Forms 如何有条件地停止访问VBA代码?,forms,ms-access,vba,procedure,Forms,Ms Access,Vba,Procedure,所以我在Access中创建了一个表单,它有一个组合框和一个文本框。表单在按下按钮后计算一些内容,但组合框和文本框都必须填充,或者两者都不能填充。我想做的是将其置于一个条件中,这样,如果只填充了其中一个,则会弹出一个消息框,解释如何填充这两个框,然后继续停止代码。我知道如何做消息框部分,但现在它显示消息框,然后继续执行产生错误的代码 我做了一些研究,但我发现大部分都与暂时暂停表单有关,而不是完全停止表单 关于如何做到这一点,我有一些想法,但我在执行这些想法时遇到了困难,坦率地说,我甚至不确定它们是
关于如何做到这一点,我有一些想法,但我在执行这些想法时遇到了困难,坦率地说,我甚至不确定它们是否有效。我的第一个计划是复制并粘贴过程中的所有计算部分,用它们创建一个新过程,在单击按钮的过程中创建一个if语句,如果新过程通过if语句,则调用新过程。我的第二个计划有点乏味,但我相当有信心它会奏效。它只是用一个if语句来包围整个代码,如果它通过了,就执行代码,如果它没有通过,就什么也不做,让它到达过程的末尾,并结束它自己。第二种方法的唯一问题是我事先有很多代码,如果我能帮上忙的话,我不想浪费大量时间重新缩进行,但是如果我找不到更好的方法,我会把它作为备份。当你弹出消息框时,你应该能够使用Exit Sub或Exit函数,这取决于你的过程是什么。它应该停止代码的执行并退出过程。您有几个选项:
就我个人而言,我倾向于在大多数情况下避免使用Exit Sub和Exit函数(选项3),因为我喜欢在子程序中有一个单点,其中例程退出并将控制权传递回调用过程。在一个例程中有多个退出点表明您需要重构代码\重新考虑正在应用的逻辑。有时这是无济于事的,但通常会造成更难调试的情况。我知道已经晚了,但我想补充一点,如果您想停止运行任何VBA代码,您可以在错误处理程序中使用
End
。
这样它就不会返回调用的子函数(如果有)
希望有帮助。我尝试过这个,但主要的问题是,由于弹出消息框只在条件下出现(即在if语句中),如果我在之后放入退出过程,则会出现错误,因为我没有关闭if语句。@KryptKeeper:使用
退出Sub
,而不是结束Sub
Exit Sub
的工作原理与常规语句类似,不会给您带来麻烦。openIf
语句(当然,您必须在Exit Sub
之后用End If
关闭它)。感谢您的解决方案,它成功了!谢谢你海因茨帮我澄清了这一点!我甚至没有意识到有一个单独的退出命令。谢谢你的回复!现在问题已经解决了你的3号解决方案,虽然我会考虑改变它,使它更有效。@ KrptKistor我认为提姆把它作为第3号选项,因为它不是最好的。正如他所说,几乎总是最好有一个单一的出口点。