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

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

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

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

hex(asc(字符))会将字符转换为hex值。

一旦你完成了,你可以很容易地做一些比较,以确定数据是否坏,如果需要抛出错误。

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

如果你想要一个技术上纯粹的方法,你可以尝试一个正则expression式。 将VBA中的引用添加到Microsoft Scripting库中,然后尝试此代码。 它看起来有点复杂,但是你会被正则expression式所能做的事情所吹拂,你将有一个有用的工具供将来使用。

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 

如果stringc中的任何字符不是(^)范围为0(x00)到127(x7F),则此函数为真。

你可以用谷歌的“正则expression式”,无论你需要它做什么,并采取几乎所有语言的答案,因为像SQL,正则expression式模式似乎是语言不可知的。

 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