【问题标题】:If Statement Still Executes when Condition is False当条件为假时,如果语句仍然执行
【发布时间】: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 = jif 语句评估它时是真的,所以它会进入那些for 语句。正如@MattCremeens 所说,其中j 被修改,因此它不再与k 匹配。您的屏幕截图仅显示您在循环运行和 j 更改后检测 k = j 是否更改,而不是在 if 正在查看它们时检测。

标签: excel vba


【解决方案1】:

j = k 执行if 块时。调试输出就是证明。在您的断点处,j不再等于k

这是因为已经执行的if块在这里修改了j

For j = 0 To UBound(colConn) 

if 块之后,代码跳转到设置断点的End If。只有这样您才能查看表达式j = k,但请注意,由于同时j 发生了变化,所以这不是执行if 语句时的结果。

【讨论】:

  • 我想借此机会为让我的挫败感写出最初的问题而道歉。正如@Mat's Mug 所说,如果我打印 j 和 k 而不是“代码很愚蠢”,那会更有帮助。如果我这样做了,我会在不久前发现这甚至不在这部分代码中。很抱歉浪费了你所有的时间。
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多