【问题标题】:Identify invalid characters in text based cell识别基于文本的单元格中的无效字符
【发布时间】:2010-09-20 17:22:27
【问题描述】:

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

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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      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。

      您可以在 Google 上搜索“正则表达式”以及您需要做的任何事情,并从几乎任何语言中获取答案,因为与 SQL 一样,正则表达式模式似乎与语言无关。

      【讨论】:

      • 这是一个很好的答案,我的支持是当之无愧的。我过去使用过正则表达式,发现它们很有用,功能强大,是只写代码的完美示例:上帝在解析第三次嵌套匹配时遇到了麻烦。所以,它有效,很有效,但是不要不要指望未来的代码管理员会保留您的正则表达式...
      【解决方案3】:
      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
      

      【讨论】:

      • 当使用单个正则表达式时,查看每个字符还有很长的路要走——在使用变体 Mid 而不是更高效的 Mid$ 时更是如此
      猜你喜欢
      • 2014-10-19
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2020-04-21
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多