识别基于文本的单元格中的无效字符

时间:2008-11-04 17:09:00

标签: excel excel-vba vba

我最近继承了一个需要添加验证逻辑的VBA宏。我需要能够确定基于文本的单元格中的任何字符是否是非ASCII字符(即,具有二进制值> 0x7F)。单元格可能包含一些需要保留的托架控制值(特别是换行符)(因此CLEAN功能不适用于此验证)。我已经尝试过IsText函数,但发现它会将UTF-8字符序列解释为有效文本(我不想要)。

我不需要实际操作字符串,我只想向运行宏的用户显示错误,告诉他特定单元格中存在无效(非ASCII)字符。

3 个答案:

答案 0 :(得分:4)

如果您想要一种技术上纯粹的方法,您可以尝试使用正则表达式。将VBA中的引用添加到Microsoft Scripting库,并尝试此代码。它看起来有点复杂,但你会被正则表达式所能做的所震撼,并且你将拥有一个有价值的工具供将来使用。

Function IsTooHigh(c As String) As Boolean

Dim RegEx As Object
Set RegEx = CreateObject("vbscript.regexp")
With RegEx
 .Global = True
 .MultiLine = True
 .Pattern = "[^\x00-\x7F]"
End With

IsTooHigh = RegEx.Test(c)

End Function

如果字符串c中的任何字符在0(x00)到127(x7F)范围内不是(^),则此函数给出TRUE。

你可以谷歌“正则表达”以及你需要做的任何事情,并从几乎任何语言中得到答案,因为像SQL一样,正则表达式似乎与语言无关。

答案 1 :(得分:2)

asc(character)命令会将字符转换为ASCII值。

hex(asc(character))会将字符转换为它的HEX值。

完成后,您可以轻松地进行一些比较,以确定数据是否错误,并在需要时抛出错误。

以下是一些示例代码: http://www.freevbcode.com/ShowCode.asp?ID=4486

答案 2 :(得分:0)

Function IsGoodAscii(aString as String) as Boolean
Dim i as Long
Dim iLim as Long
i=1
iLim=Len(aString)

While i<=iLim
    If Asc(Mid(aString,i,1))>127 then
        IsGoodAscii=False
        Exit Function
    EndIf
    i=i+1   
Wend

IsGoodAscii=True
End Function