我收到第二个代码块的“运行时错误 16:表达式太复杂”。我在网上读到,嵌套表达式的最大允许数量是 8,但如果每个“Select Case”都定义了嵌套语句,那么我还没有达到这个要求。有可能是因为案例依赖于变量吗?第一个代码块显示了egapend 的可能值,而第二个代码块显示了返回错误的代码。预先感谢您的帮助。
第一:
Select Case ge1e2
Case Is <= 0
Select Case ge2e3
Case Is <= 0
egap18a = 0
egap18b = 0
Case Is > 0
egap18a = 0
egap18b = ge2e3
egapend = Sheet1.[z1IE]
End Select
Case Is > 0
Select Case ge2e3
Case Is <= 0
egap18a = ge1e2
egap18b = 0
egapend = Sheet1.[z1CZ]
Case Is > 0
Select Case ge1e2
Case Is >= 180
egap18a = ge1e2
egap18b = ge2e3
egapend = Sheet1.[z1CZ]
Case Is < 180
egap18a = ge1e2
egap18b = ge2e3
egapend = Sheet1.[z1IE]
End Select
End Select
End Select
第二:
Dim e1length As Long
Dim e2length As Long
Dim cp121 As Boolean
e1length = DateDiff("d", Sheet1.[z1CZ], Sheet1.[z1DA])
e2length = DateDiff("d", Sheet1.[z1IE], Sheet1.[z1IF])
Select Case extendedgap
Case True
Select Case egapend
Case Sheet1.[z1IE] 'end of egap is start of E2
Select Case e2length 'was borrower employed by E2 for more than 6 months?
Case Is >= 180
cp121 = True
Case Is < 180
Select Case ge1e2 'if not, was there a gap between E1 and E2
Case Is > 1
cp121 = False
Case Else
Select Case DateDiff("d", Sheet1.[z1IE], Sheet1.[z1DA]) 'If not, was employment between E1/E2 6 mos?
Case Is >= 180
cp121 = True
Case Is < 180
cp121 = False
End Select
End Select
End Select
Case Sheet1.[z1CZ] 'end of egap is start of E1
Select Case DateDiff("d", Sheet1.[z1CZ], Sheet1.[z1DA]) 'was borrower employed by E1 for at least 6 mos?
Case Is >= 180
cp121 = True
Case Is < 180
cp121 = False
End Select
End Select
最佳答案
这实际上只是一个大的嵌套条件结构。不要为此使用 Select...Case
。使用它例如当您查看某些枚举值时:
Select Case MsgBox("Yes, no, or cancel?", vbYesNoCancel)
Case vbYes
'stuff
Case vbNo
'stuff
Case vbCancel
'stuff
End Select
<小时/>
重构步骤 1:将所有这些 2 分支 Select...Case
block 转换为 If...Else...End If
block 。这应该已经解决了“表达式太复杂”编译错误。
重构步骤 2:实现 bool 赋值,如下所示:
例如,在一个地方两个地方,您有:
Select Case DateDiff("d", Sheet1.[z1IE], Sheet1.[z1DA]) 'If not, was employment between E1/E2 6 mos? Case Is >= 180 cp121 = True Case Is < 180 cp121 = False End Select
将其替换为:
cp121 = (DateDiff("d", Sheet1.[z1IE], Sheet1.[z1DA]) >= 180)
重构步骤 3:在适用的情况下,从 If
和 Else
分支中提取函数和过程;消除重复的分支,不要重复。
一旦您有了可行的东西,请将其发送至 Code Review进一步重构和简化的想法。
关于vba - 错误 16 : Expression Too Complex - Nested Select Case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46696941/