比较VBA中的string的最佳方法?

在过去的一个月里,我一直在使用VBA(对于我的工作),并且自从我开始使用这种语言/脚本以来, 出现过几次比较string的问题我比较了string的方式远远是:

  • str1 = str2str1 <> str2
  • StrComp(str1,str2,comparisonMethod)
  • InStr(str1,str2)

有时,在使用这些比较方法之前, 我将首先应用UCase(str1),甚至是UCase(Trim(str1)) 。 从我迄今为止的经验来看, 在VBA中比较string似乎是一个相当易变的东西 ,因为我觉得我得到了不一致的结果。

问题: 在VBA中比较两个string最佳过程是什么?

提前致谢!

编辑:看我的评论为例。

第一个问题是,如果你想比较大小写敏感或不敏感 – 换句话说:是"ABC" = "abc"

=符的行为由Option Compare定义 – 默认值是binary

 Option Compare text sub foo1 Debug.print "ABC" = "abc" ' Prints "True" end sub Option Compare binary ' <-- This is the default! sub foo2 Debug.print "ABC" = "abc" ' Prints "False" end sub 

StrComp函数获得相同的结果,但不需要在模块顶部设置比较选项。 相反,你可以给出想要的方法来比较参数:

 sub foo3 Debug.Print StrComp("ABC", "abc", vbBinaryCompare) = 0 ' <-- Prints "False" Debug.Print StrComp("ABC", "abc", vbTextCompare) = 0 ' <-- Prints "True" end sub 

如果你的string中有空格或空格,你总是必须使用trim – 在我所知的任何编程语言中都是如此。

使用Instr是一个相当糟糕的主意,检查两个string是否相同,你可以使用的是子stringsearch。 请注意, InStr (及其对应的InstrRev )正在使用option compare设置:

 Option Compare text sub foo4 Debug.print Instr("ABCDE", "cd") ' Prints "3" end sub Option Compare binary sub foo5 Debug.print Instr("ABCDE", "cd") ' Prints "0" end sub