【发布时间】:2020-01-08 23:43:19
【问题描述】:
我知道在大多数其他语言中,您可以编写表达式if (ptr == NULL || ptr->foo()) {something bad happened} 来测试变量的有效性和您想要执行的测试。 VBA 不允许您这样做。因此,我绞尽脑汁想出一种方法来编写以下代码,而无需 1)使用错误捕获作为条件分支的手段,以及 2)不重复代码。
Type Vector
vData() as Variant
vSize as Long
End Type
Sub add(v as Vector, elem as Variant)
Dim oldSize as Long
if v.vSize = 0 Or UBound(v.vData) >= v.vSize then
oldSize = v.vSize
ReDim Preserve v.vData(0 to (oldSize * 2 + 1))
v.vData(oldSize) = elem
v.vSize = v.vSize + 1
else
v.vData(v.vSize) = elem
v.vSize = v.vSize + 1
end if
End Sub
现在无论 vSize 是否为 0(如果 vData 从未被 Dim'd),该代码都会在 UBound 行上崩溃。我能看到的唯一另一种方法是执行额外的 elseif 语句来检查 UBound,但这会重复将向量大小加倍的代码。
如果您认为这是重复的:VBA Short-Circuit `And` Alternatives。这讨论了 AND 语句(非或)的替代方案。嵌套 ifs(又名 AND 语句)不会像 OR 那样重复代码。
【问题讨论】:
标签: vba