【发布时间】:2016-10-29 22:46:09
【问题描述】:
我遇到了一个 if 语句,即使它的计算结果为假,它也好像是真的,我不知道发生了什么。代码如下:
If (k = j) Then
Debug.Print "Code being stupid"
ReDim pinInfo(UBound(textConn))
For i = 0 To UBound(textConn)
For j = 0 To UBound(colConn)
If (StrComp(textConn(i), colConn(j), vbBinaryCompare) = 0 _
And StrComp(textPos(i), colPos(j), vbBinaryCompare) = 0) Then
pinInfo(i) = textConn(i) & "," & textPos(i) & "," & label(i) & "," & colScl(j)
'Debug.Print pinInfo(i)
Exit For
End If
Next j
Next i
Else
Debug.Print "k <> j"
MsgBox "The number of shapes representing the wire ID does not equal the number of shpaes representing the wire color."
Exit Sub
End If
j 和 k 都是整数。在程序的这一点上,它们应该总是相等的。我故意对输入进行了调整,因此它们不是,但即使该语句的计算结果为假,它仍然表现得好像它返回了真。下图是我执行后看到的截图。如您所见,它表明条件为假,但执行了第一个打印语句并且没有出现消息框。
【问题讨论】:
-
单个'='标记是比较运算符?
-
在 VBA 中是的,它是。
==是错误的。 -
我的想法是你在
j更改值(在for循环中)之后破坏了代码,因此它不再等于k。 -
你知道,如果你有
Debug.Print k, j而不是“代码很愚蠢”,我觉得你不会在这里提出这个问题 -
看起来
k = j在if语句评估它时是真的,所以它会进入那些for语句。正如@MattCremeens 所说,其中j被修改,因此它不再与k匹配。您的屏幕截图仅显示您在循环运行和j更改后检测k = j是否更改,而不是在if正在查看它们时检测。