在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'等