如何最好地构buildExcel VBA代码来进行维护,清晰和error handling

假设我想运行一些很好的VBA代码,可以把它们分解成四个不错的小序列函数。

Call Init() Call FirstStep() Call SecondStep() Call CleanUp() 

但是,如果前三个之一出现错误或用户取消失败,那么我想整齐地退出并运行CleanUp

我从…开始

 If Init() Then If FirstStep() Then If SecondStep() Then End If End If End If Call CleanUp 

但那是丑陋的。

接下来…

 Select Case vbCancel Case Init() Case FirstStep() Case SecondStep() End Select Call CleanUp 

这是一个改进,但我仍然怀疑是否有更好的方法? 我知道VBA的devise并不是很好,但是我想尝试一下。

@AlexK的答案是标准答案,如果失败是由于运行时错误造成的。

但有些情况下我们想要:

1-运行正常的操作和检查序列,逻辑是这样的,我们必须停在某个地方,当其中一个操作通过返回一个布尔值

2-避免设置标准的error handling(有些情况下,我们不希望这样做)

3-为了避免大量的嵌套的If(太丑了,如你所说)

Select Case解决scheme可以满足这些要求,但下面是您可能更喜欢的另一个(意图更清晰):

 Do If Not FirstStep Then Exit Do If Not SecondStep Then Exit Do If Not ThirdStep Then Exit Do If Not FourthStep Then Exit Do ' ... Loop Until True Cleanup 

error handling对error handling很有用。 让你的例程Err.Raise如果有错误,那么你可以:

 on error goto ERR_IN_PROCESS Init FirstStep SecondStep ERR_IN_PROCESS: CleanUp 

这也有处理运行时错误的优点。

如果你真的不想使用error handling,你可以使用你的select一个简要的forms

 Select Case False Case Init(), FirstStep(), SecondStep() End Select CleanUp 

我不能看到循环的重点,而是使用范围:

 Sub Foo() Run CleanUp End Sub Sub Run() If Not Init Then Exit Sub If Not FirstStep Then Exit Sub If Not SecondStep Then Exit Sub End Sub