我的代码块一直在不正确地进行评估。我不知道为什么会这样。
我已经确定它必须与我的“选择案例”有关。至少。如果改变了运算符的顺序,例如=, >, <
或<, =, >
等评估会发生变化。
我的期望是评估为a = b
,可能发生highest_header = 24
- 虽然24
不可避免地分配给highest_header
,但我的代码使用我相信的方式是错的&#39;案例&#39;。
我稍微简化了代码段,但结果是相同的 - 比较正在评估为a = b = FALSE
和a < b = TRUE
Sub highest_header()
Dim highest_header_count As Integer
Dim a As Integer
Dim b As Integer
a = 24
b = 24
Debug.Print a '24
Debug.Print b '24
Debug.Print TypeName(a) 'Integer
Debug.Print TypeName(b) 'Integer
Select Case highest_header_count
Case a = b
highest_header_count = b
Case a < b
highest_header_count = b
Case a > b
highest_header_count = a
End Select
End Sub
任何见解都将受到赞赏。
答案 0 :(得分:3)
您的Select Case正在将一个值为0的整数与布尔值进行比较。
a = b
为True,为-1,
a < b
为False,为0,
a > b
为False,为0。
这就是为什么你会受到a < b
的打击。
答案 1 :(得分:3)
highest_header_count
您正在比较a = b
与3次比较({{1}}等)
答案 2 :(得分:1)
您需要IF Else语句而不是Select Case。 同样在Select Case中,您使用的是错误的变量highest_header_count。
Sub highest_header()
Dim highest_header_count As Integer
Dim a As Integer
Dim b As Integer
a = 24
b = 24
Debug.Print a '24
Debug.Print b '24
Debug.Print TypeName(a) 'Integer
Debug.Print TypeName(b) 'Integer
If a = b Then
highest_header_count = b
ElseIf a < b Then
highest_header_count = b
ElseIf a > b Then
highest_header_count = a
End If
End Sub
或者像这样使用你的代码......
Sub highest_header()
Dim highest_header_count As Integer
Dim a As Integer
Dim b As Integer
a = 24
b = 24
Debug.Print a '24
Debug.Print b '24
Debug.Print TypeName(a) 'Integer
Debug.Print TypeName(b) 'Integer
Select Case True
Case a = b
highest_header_count = b
Case a < b
highest_header_count = b
Case a > b
highest_header_count = a
End Select
End Sub
答案 3 :(得分:1)
或,您可以使用Select Case
,只是“欺骗”它。
您可以使用Select Case a - b
,然后查看Case 0
,Case Is < 0
和Case Is > 0
,请参阅下面的代码:
Sub highest_header()
Dim highest_header_count As Integer
Dim a As Integer
Dim b As Integer
a = 24
b = 24
Debug.Print a '24
Debug.Print b '24
Debug.Print TypeName(a) 'Integer
Debug.Print TypeName(b) 'Integer
Select Case a - b
Case 0
highest_header_count = b
Case Is < 0
highest_header_count = b
Case Is > 0
highest_header_count = a
End Select
End Sub
您可以让Select Case
更短:
Select Case a - b
Case 0, Is < 0 ' <-- both scenarios lead to the same result
highest_header_count = b
Case Is > 0
highest_header_count = a
End Select