String VBA StrComp从不返回0
使用VBA中的String VBA StrComp从不返回0,string,vba,excel,string-comparison,String,Vba,Excel,String Comparison,使用VBA中的StrComp函数比较两个字符串时出现问题 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
StrComp
函数比较两个字符串时出现问题
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
正如您所看到的,这两个字符串具有相同的长度和相等的文本,但是upStrEQ
是False
并且StrComp
没有返回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
此外,布尔函数的默认值为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
在代码中,当您将参数
ps1
和ps2
传递到upStrEQ
时,可以使用它,其中可能有任何隐藏字符,如段落结尾
。你确定没有这样的事吗?另外,尝试使用Len(string)
测试文本的长度。能否将ps1
和ps2
的值粘贴到问题中。然后,我们可以看看是否有任何UniCode字符等,这可能会让人困惑。(我们不能仅仅用一张图片就这么做。)不能从你的dropbox链接下载,所以我不能用你的输入验证输入,所有的东西都可以,但我的不行。我认为不应该有任何隐藏的空间或新行,因为字符串具有相同的长度?如果不是这样,我如何检查任何不可见的字符串内容?@daniel17903-在将输入传递到upStrEQ
函数之前,您可以稍微清理一下输入。请参阅removeInvisibleThings()
。