使用 VBA 当两个字符串不同时 StrComp 返回 false

发布于 2025-01-16 06:22:33 字数 1095 浏览 1 评论 0原文

我正在尝试比较 VBA 中的两个字符串值,但我发现了 VBA 的一个奇怪的怪癖(或者看起来如此)。见下文:

如果我执行以下操作:

Debug.Print("Same" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.Value, vbTextCompare))
Debug.Print("Different" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.OldValue, vbTextCompare))

我得到:

Same: 0
Different: 1

这是我所期望的。然而。如果我然后尝试执行以下操作:

Debug.Print("Same" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.Value, vbTextCompare) = 0)
Debug.Print("Different" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.OldValue, vbTextCompare) = 0)

然后我得到:

Same: False
Different: False

作为参考,值应该是(例如)

Same test: "Jane", "Jane"
Different test: "Jane", "John"

这不是我所期望的。我知道我做错了什么,但我不确定是什么。

任何帮助表示赞赏。

编辑:

当我现在将其输入 if 语句时:

If (StrComp(Me.txtFirstName.Value, Me.txtFirstName.OldValue, vbTextCompare) = 0) Then
    Debug.Print ("Hello")
Else
    Debug.Print ("Goodbye")
End If

我得到的结果是 Goodbye

I'm trying to compare two string values in VBA but I've found a weird quirk of VBA ( or it seems so ). See Below:

If I do the following:

Debug.Print("Same" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.Value, vbTextCompare))
Debug.Print("Different" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.OldValue, vbTextCompare))

I get:

Same: 0
Different: 1

Which is something I would expect. However. If I then try to do the following:

Debug.Print("Same" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.Value, vbTextCompare) = 0)
Debug.Print("Different" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.OldValue, vbTextCompare) = 0)

I then get:

Same: False
Different: False

For reference, the values should be (for example)

Same test: "Jane", "Jane"
Different test: "Jane", "John"

Which is not what I expect. I know I'm doing something incorrectly but I'm not exactly sure what.

Any help is appreciated.

EDIT:

When I now enter this into an if statement:

If (StrComp(Me.txtFirstName.Value, Me.txtFirstName.OldValue, vbTextCompare) = 0) Then
    Debug.Print ("Hello")
Else
    Debug.Print ("Goodbye")
End If

I get a result of Goodbye

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

双手揣兜 2025-01-23 06:22:33

您的问题是它首先连接 "Different" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.OldValue ,然后与 =0 进行比较。

并且 Different1 不是 0 > 因此你会得到False

在连接之前使用括号来评估比较:

Debug.Print("Same" & (StrComp(Me.txtFirstName.Value, Me.txtFirstName.Value, vbTextCompare) = 0))
Debug.Print("Different" & (StrComp(Me.txtFirstName.Value, Me.txtFirstName.OldValue, vbTextCompare) = 0))

实际上这段代码

Debug.Print("Same" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.Value, vbTextCompare) = 0)

应该以类型不匹配错误结束。


If StrComp(Me.txtFirstName.Value, Me.txtFirstName.Value, vbTextCompare) = 0 Then
    MsgBox "They are the same"
Else
    MsgBox "They are different"
End If

Your issue is that it first concatentates "Different" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.OldValue and then compares that with =0.

And Different1 is not 0 therefore you get False.

use parenthesis to evaluate the comparison before concatenating:

Debug.Print("Same" & (StrComp(Me.txtFirstName.Value, Me.txtFirstName.Value, vbTextCompare) = 0))
Debug.Print("Different" & (StrComp(Me.txtFirstName.Value, Me.txtFirstName.OldValue, vbTextCompare) = 0))

Actually this code

Debug.Print("Same" & StrComp(Me.txtFirstName.Value, Me.txtFirstName.Value, vbTextCompare) = 0)

should have end up in a Type Mismatch error.


If StrComp(Me.txtFirstName.Value, Me.txtFirstName.Value, vbTextCompare) = 0 Then
    MsgBox "They are the same"
Else
    MsgBox "They are different"
End If
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文