我有三个一个接一个地运行的子程序,这些子程序被称为DataTrimming
,Pivot
和Email
。
Sub AllTogether()
DataTrimming
Pivot
Email
End Sub
我在Sub DataTrimming
内部放置了一个错误处理程序,因此当出现错误时,将显示错误消息并退出sub。
当我运行sub AllTogether
时,当Sub DataTrimming
出现错误时,它会显示错误消息,并继续运行sub Pivot
和sub Email
。
当sub DataTrimming
中发生错误时,有没有办法退出sub AllTogether
,而不运行其余的subs?
3条答案
按热度按时间jgwigjjp1#
使用
On Error
语句处理运行时错误并将执行重定向到行标签:如果任何被调用的过程都有自己的错误处理子例程,那么你需要在该过程中重新抛出错误,以便在
AllTogether
过程的作用域中处理它,使用Err.Raise
,如下所示:注意,这些过程有一个时间耦合问题,因为它们显然是副作用过程,必须以特定的顺序调用。要解决这个问题,您可以将
DataTrimming
转换为Function
过程,该过程返回Pivot
过程需要作为参数接收的数据;类似地,使Pivot
成为一个函数,返回Email
过程需要作为参数的数据,将消除耦合并减少(或消除!)对全局状态的依赖-最终它可能看起来像这样:参见this post,了解在过程之间传递数据而不涉及全局变量的各种方法。
v09wglhw2#
一种方法是将DataTrimming、Pivot和Email这三个子函数改为Functions,每个子函数返回一个布尔值,每个子函数返回True,除非它们遇到错误,在这种情况下返回False。
在Allogether()中,在继续透视之前检查从DataTrimming返回的值(如果为False,则退出Sub),并在继续从透视到电子邮件时检查相同的值。
unftdfkk3#
过程间错误处理
DataTrimming
过程重写为返回布尔值的函数(例如,如果成功,则为True
),并在调用过程中使用该布尔值(尽管给予它一个更好的名称)。