在VBA中比较单词时是否要区分大小写?

我正在开发一个VBA程序,它允许用户input一个地址,并通过将地址元素与数据库进行匹配来查找位置。

不幸的是,我遇到了大小写敏感的问题。

例如,当我使用这个代码:

For i = 11 To lRowB Range("B" & i).Activate myResult = IsNumeric(Application.Match(ActiveCell.Value, manilaListRange, 0)) 

它将比较活动单元格的值与我的数据库中的单词列表。 问题是,如果在我的活动单元格中的单词是“迈阿密”或“迈阿密”,只有“迈阿密”在数据库中,它不会工作…

其他例子:

 If Range("J6").Value = "tawi" Then Range("J6").Value = "Tawi-Tawi" End If 

同样的问题,只有用相同的案例写的字才会奏效。

我怎样才能摆脱这个? 这是特别恼人的,我不能在每种情况下重写我的数据库组合!

提前致谢 !

您可以在模块级别发布一个声明:

 Option Compare Text 

这使得所有“文本比较”不区分大小写。 这意味着下面的代码将显示消息“这是真实的”:

 Option Compare Text Sub testCase() If "UPPERcase" = "upperCASE" Then MsgBox "this is true: option Compare Text has been set!" End If End Sub 

请参阅http://www.ozgrid.com/VBA/vba-case-sensitive.htm 。 我不确定它会完全解决所有实例的问题(如Application.Match函数),但它将处理所有的if a=b语句。 至于Application.Match – 您可能需要使用LCase函数将参数转换为大写或小写。

您可以将这两个值转换为小写和比较。

这里是一个例子:

 If LCase(Range("J6").Value) = LCase("Tawi") Then Range("J6").Value = "Tawi-Tawi" End If 

如果要比较的列表很大(如上例中的manilaListRange范围),那么使用匹配函数是一个明智的举动。 它避免了使用可能会减慢程序的循环。 如果你能确保manilaListRange都是大写或小写,那么这对我来说似乎是最好的select。 如果您匹配,则快速应用“UCase”或“LCase”。

如果你没有对ManilaListRange的控制,那么你可能不得不循环遍历这个范围,在这种情况下,有很多方法可以比较'search','Instr','replace'等