vba - 错误 16 : Expression Too Complex - Nested Select Case

标签 vba excel

我收到第二个代码块的“运行时错误 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:在适用的情况下,从 IfElse 分支中提取函数和过程;消除重复的分支,不要重复

一旦您有了可行的东西,请将其发送至 Code Review进一步重构和简化的想法。

关于vba - 错误 16 : Expression Too Complex - Nested Select Case,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46696941/

相关文章:

excel - 如何将多个文本文件导入单个excel工作表的列

vba - 删除不等于组合框值的行?

vba - 如何从 VBA 中的子文件夹计算工作簿中的行数?

vba - excel日期格式与vba中的不一样

vba - 如何将图表从 Excel 复制到 PowerPoint?

excel - 如何根据文件名模式使用最新的文件?

excel - VBA宏将过滤后的数据复制并粘贴到新工作表

excel - 用于更改选项卡名称的 VBA/宏脚本

excel - 是否可以根据单元格值隐藏某些单元格(不是行或列)?

python - 如何将使用 Xlsxwriter 创建的公式中的值读入 Pandas 数据帧?