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
的需求,即<= 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_NEWLINE
将expression
部分放在单独的行上。 . 如果你不小心的话,这会让它read/look 像块语法一样。这也使得以后添加更多条件表达式变得比必要更加困难,因为您必须添加 End If
令牌。
【讨论】:
以上是关于Excel VBA结束选择没有选择案例的主要内容,如果未能解决你的问题,请参考以下文章