Excel VBA结束选择没有选择案例

Posted

技术标签:

【中文标题】Excel VBA结束选择没有选择案例【英文标题】:Excel VBA End Select without Select Case 【发布时间】:2021-04-07 19:01:30 【问题描述】:

我正在编写一个程序来从电子表格中获取有关产品的数据,收集他们的信息,并计算是否需要订购更多产品。我一直试图让 Select Case 语句正常工作,无论我如何编码,我都会遇到同样的错误。我已经在 while 循环、for 循环和自身中完成了它。错误仍然存​​在“End Select without Select Case”,如您所见,这是不正确的。

  Sub Ordering()
Dim VendorName, Product As String
Dim Counter, ProductOffset, OnHand, OnHandOffset, OnOrder, OnOrderOffset, Commited, CommitedOffset As Integer

ProductOffset = 14 'columns out from A
OnHandOffset = 19
OnOrderOffset = 20
CommitedOffset = 21
Counter = 0

'start active cell in top left
Range("A1").Select

    'grab product code
    Product = ActiveCell.Offset(0, ProductOffset).Value
    OnHand = ActiveCell.Offset(0, OnHandOffset).Value
    OnOrder = ActiveCell.Offset(0, OnOrderOffset).Value
    Commited = ActiveCell.Offset(0, CommitedOffset).Value

    Select Case Product
        Case "100HB"
            If (OnHand + OnOrder - Commited) <= 1000 Then
                MsgBox ("Found 100HB")

    End Select
End Sub

【问题讨论】:

MsgBox ("Found 100HB") 之后缺少结束End If,顺便说一句,它不应该有任何括号。 或者您也可以在Then 之后添加下划线,这可能会删除End IF 的需求,即&lt;= 1000 Then _ @Bilal 虽然合法,但对未来的维护者(即未来的你)来说是一件非常可怕的事情。 【参考方案1】:

编译器从顶部向下运行。当它遇到“block start”时,它不会跳到底部去尝试找到对应的“block end”。相反,它堆叠“块开始”标记,当它遇到“块结束”标记时,它会弹出该堆栈并与它所期望的进行比较:如果它期待End If,而是找到End Select,则编译(语法)错误被抛出:

输入Select Case 块。预期的结束块:End Select 在第一种情况下输入If 块。预期的结束块:End If 遇到End Select,预期End If => 抛出“end select without select case”语法错误

很高兴知道 VBA 中的If 语句有两种合法语法:

    块语法

    那是If bool-expression Then,紧接着是一个新行。为了合法,需要有一个End If 令牌进一步向下,以关闭该块。如果您在输入 Then 后始终按 ENTER,然后立即输入 End If 并在其间插入和缩进一行代码,那么您将永远不会再遇到这种语法/编译错误。

    内联语法

    那是If bool-expression Then expression,这是this comment 建议做的……通过引入行继续标记SPACE_NEWLINEexpression 部分放在单独的行上。 . 如果你不小心的话,这会让它read/look 像块语法一样。这也使得以后添加更多条件表达式变得比必要更加困难,因为您必须添加 End If 令牌。

【讨论】:

以上是关于Excel VBA结束选择没有选择案例的主要内容,如果未能解决你的问题,请参考以下文章

VBA案例选择多个条件

没有选择的excel vba冻结窗格

Excel VBA - 选择案例 - 多个测试表达式

VBA for Excel - 如果更深的选择案例不匹配标准,请再次避免输入代码

选择具有复杂返回值的案例 (VBA 2007)

在基于用户的选择中查找所有不同的值 - Excel VBA