vba - 如何最好地构建 Excel VBA 代码以实现维护、清晰度和错误处理

标签 vba excel

假设我想运行一些不错的 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 的设计并不是为了结构良好,但尽管如此,我还是想尝试一下。

最佳答案

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

但在某些情况下我们希望:

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

2-避免设置标准错误处理(在某些情况下我们不希望这样)

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

Select Case 解决方案满足了这些要求,但这里还有您可能更喜欢的另一种解决方案(意图更清晰):

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

关于vba - 如何最好地构建 Excel VBA 代码以实现维护、清晰度和错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43678779/

相关文章:

vba - 删除 Material list 中的行

string - 为什么两个数组元素之间会出现空格?

excel - 如何显示错误信息和停止宏

vba - 您能否帮助我更多地了解有关VBA错误处理的良好做法?

excel - 从文本文件 VBA 中提取数据,其中该行包含特定字符串

excel - 有没有办法计算 VBA 枚举中的元素数量?

java - 如何使用 Apache-POI 计算 Excel 中的公式并避免出现 "save changes"消息框?

java - POI 货币问题

vba - Excel VBA 使用外部宏创建嵌入宏

VBA - MS Project - 向持续时间字段添加空间