gpt4 book ai didi

string - VBA StrComp 从不返回 0

转载 作者:行者123 更新时间:2023-12-04 21:54:32 25 4
gpt4 key购买 nike

我在使用 StrComp 时遇到问题VBA 中用于比较两个字符串的函数。

Public Function upStrEQ(ByVal ps1 As String, ByVal ps2 As String) As Boolean       
upStrEQ = False
If StrComp(ps1, ps2, vbTextCompare) = 0 Then
upStrEQ = True
End If

If Len(ps1) = Len(ps2) Then
Debug.Print ps1 & vbNewLine & ps2 & vbNewLine & upStrEQ
End If

End Function

调试输出:
Technischer Name
Technischer Name
Falsch

如您所见,两个字符串具有相同的长度和相同的文本,但 upStrEQFalseStrComp没有返回 0。

你能帮忙的话,我会很高兴。谢谢。

更新:
由于在我制作示例文档之前从单元格中读取了传递给函数的字符串之一,因此您可以重现我的错误: https://www.dropbox.com/s/6yh6d4h8zxz533a/strcompareTest.xlsm?dl=0

最佳答案

StrComp()效果很好。问题在于您的输入,可能您有一个隐藏的空间或一个新行。

像这样测试你的代码:

Public Function upStrEQ(ByVal ps1 As String, ByVal ps2 As String) As Boolean

If StrComp(ps1, ps2, vbTextCompare) = 0 Then
upStrEQ = True
End If

If Len(ps1) = Len(ps2) Then
Debug.Print ps1 & vbNewLine & ps2 & vbNewLine & upStrEQ
End If

End Function

Public Sub TestMe()

Debug.Print upStrEQ("a", "a")

End Sub

此外, bool 函数的默认值为 false,因此您无需在开始时设置它。

为了清理您的输入,仅对字母和数字,您可以使用自定义 RegEx功能。因此,这样的事情总是会返回字母和数字:
Public Function removeInvisibleThings(s As String) As String

Dim regEx As Object
Dim inputMatches As Object
Dim regExString As String

Set regEx = CreateObject("VBScript.RegExp")

With regEx
.pattern = "[^a-zA-Z0-9]"
.IgnoreCase = True
.Global = True

Set inputMatches = .Execute(s)

If regEx.test(s) Then
removeInvisibleThings = .Replace(s, vbNullString)
Else
removeInvisibleThings = s
End If

End With

End Function

Public Sub TestMe()

Debug.Print removeInvisibleThings("aa1 Abc 67 ( *^ 45 ")
Debug.Print removeInvisibleThings("aa1 ???!")
Debug.Print removeInvisibleThings(" aa1 Abc 1267 ( *^ 45 ")

End Sub

在您的代码中,当您传递参数时使用它 ps1ps2upStrEQ .

关于string - VBA StrComp 从不返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47591205/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com