制作一个过滤函数,定义若干“段”。如果字符代码属于这个“段”就保留,否则就过滤掉。Function StringClearCode(pStr As String) As string
  '过滤字符函数
  Dim tOutStr As String
  
  Dim tStrLong As Long
  Dim tLoop As Long
  Dim tStartByte As Integer
  
  tStrLong=Len(pStr)
  
  If tStrLong Then
    For tLoop=1 To tStrLong
      tStartByte=Asc(Mid(pStr,tLoop,1))
      If AsciiCodeIsStr(tStartByte) Then
        tOutStr=tOutStr & Chr(tStartByte)
      End If
    Next
  End If
  
  StringClearCode=tOutStr
End Function关键在于AsciiCodeIsStr的编写。
AsciiCodeIsStr是一个判断代码是否是你所允许的一个函数。它根据已知的代码范围来判断。
Type tpCodeSeg '代码段类。
  CodeOn As Integer  '代码段开始
  CodeEnd As Integer '代码段结束
End TypeDim sysCodeSegs() As tpCodeSeg '全局的代码段表Function CodeSegsSet() '初始化代码段表
  '英文和键盘字符代码段32-126
  sysCodeSegs(0).CodeOn=32:sysCodeSegs(0).CodeEnd=126
  '剩下的由你自己定义。
  'sysCodeSegs(N).CodeOn=??:sysCodeSegs(N).CodeEnd=??
End FunctionFunction AsciiCodeIsStr(pCode As Integer) As Boolean
  Dim tOutBool As Boolean
  Dim tLoop As Integer
  tLoop=0 To UBound(sysCodeSegs) '历遍所有代码段表。
    tOutBool=tOutBool Or (pCode>=sysCodeSegs.CodeOn And pCode<=sysCodeSegs.CodeEnd) '以Or运算判断是否代码在表的一个段内。
  Next
  AsciiCodeIsStr=tOutBool
End Function

解决方案 »

  1.   

    用keypress()搞掂,筛选一定范围内的ASCII码值。
      

  2.   

    楼上的不能用keypress,我可能是用粘贴过来的to KiteGirl(小仙妹),让我试试你的代码,如果行,一定给分
      

  3.   

    用Mid等函数一个一个地遍历所有字母并去掉没用的.
      

  4.   

    to KiteGirl(小仙妹),你的代码还不行,思路虽然对,但我的文字里有字母也有汉字,所以不能用ascii码来过滤,应该用unicode来过滤
      

  5.   

        VB里可以用Asc函数取汉字的Asc啊!只是返回的是unicode代码。因为VB里把汉字和英文都看做一个字(这点有时候相当讨厌了)。所以我才用Integer取Asc(Mid(pStr,tLoop,1))(否则只要用Byte就可以了)。小于127的属于Ascii范围,大于255的才算是unicode代码。上面的程序里只有一个“段”,也就是Ascii可见字符范围的段,我并不清楚unicode在什么范围,所以就没添加。
        你似乎说&h2000 - &h7E00和&hA100-&hFE00这两个段。那么只要这样写就可以了。在Load事件里给段表添加两个新段:
        sysCodeSegs(1).CodeOn=&H2000:sysCodeSegs(1).CodeEnd=&H7E00
        sysCodeSegs(2).CodeOn=&HA100:sysCodeSegs(2).CodeEnd=&HFE00    如果你的这两个段没找错的话,应该可以的。    另外上面的程序只是个草稿,仅仅说明这个原理。我没实际测试过,所以难保有错误。实际编写还是要你自己去研究了。
      

  6.   

    问题我已经解决,同时感谢KiteGirl(小仙妹)的热心支持,奖给你分吧
    能留个QQ吗,方便日后联系