仅删除访问表列中非 ASCII 字符的函数

nat*_*lal 5 vba

我有一个访问表,我正在编写一个vba代码来从表中删除non-ascii字符,我尝试使用以下两个函数

\n\n
Public Function removeall(stringData As String) As String\n    Dim letter As Integer\n    Dim final As String\n    Dim i As Integer\n\n    For i = 1 To Len(stringData) \'loop thru each char in stringData\n\n        letter = Asc(Mid(stringData, i, 1)) \'find the char and assign asc value\n\n        Select Case letter \'Determine what type of char it is\n            Case Is < 91 And letter > 64 \'is an upper case char\n                final = final & Chr(letter)\n            Case Is < 123 And letter > 96 \'is an lower case char\n                final = final & Chr(letter)\n            Case Is = 32  \'is a space\n                final = final & Chr(letter)\n    End Select\n\n    Next i\n    removeall = final\n\n    End Function\n
Run Code Online (Sandbox Code Playgroud)\n\n

还尝试使用以下功能

\n\n
Public Function Clean(InString As String) As String\n\'-- Returns only printable characters from InString\n   Dim x As Integer\n   For x = 1 To Len(InString)\n      If Asc(Mid(InString, x, 1)) > 31 And Asc(Mid(InString, x, 1)) < 127 Then\n         Clean = Clean & Mid(InString, x, 1)\n      End If\n   Next x\n\nEnd Function\n
Run Code Online (Sandbox Code Playgroud)\n\n

但问题是:它removeall function删除了所有内容,包括#space字符。并且 InClean function也删除了special characters

\n\n

我需要一个正确的函数来保留键盘字符并删除所有其他字符

\n\n

表中字符串的示例有:

\n\n

1) “附件饲管适合 5-18 \xc2\xbaFR#”

\n\n

2) “导管 FOLEY 3WAY SILI ELAST 20FR 30ML 乳胶\xc2\xba”

\n\n

任何帮助将不胜感激

\n\n

输出应该是这样的

\n\n

1) “附件饲管适合 5-18 FR”

\n\n

2) “导管 FOLEY 3WAY SILI ELAST 20FR 30ML 乳胶”

\n

Spa*_*gen 4

一种方法是使用可接受字符的白名单。例如

\n\n
\' You can set up your domain specific list:\nConst Whitelist = "1234567890" & _\n                  "qwertyuiopasdfghjklzxcvbnm" & _\n                  "QWERTYUIOPASDFGHJKLZXCVBNM" & _\n                  " `~!@#$%^&*()_-=+[]{};:""\'|\\<>?/ \xe2\x80\x93"\n\nPublic Sub test()\n\n    Debug.Print Clean("ATTACHMENT FEEDING TUBE FITS 5-18 \xc2\xbaFR#")\n    Debug.Print Clean("CATHETER FOLEY 3WAY SILI ELAST 20FR 30ML LATEX\xc2\xba")\n\nEnd Sub\n\nPublic Function isAllowed(char As String) As Boolean\n\n    isAllowed = InStr(1, Whitelist, char, vbBinaryCompare) > 0\n\nEnd Function\n\n\nPublic Function Clean(dirty As String) As String\n\'-- Returns only printable characters from dirty\n   Dim x As Integer\n   Dim c As String\n   For x = 1 To Len(dirty)\n      c = Mid(dirty, x, 1)\n      If isAllowed(c) Then\n         Clean = Clean & c\n      End If\n   Next x\n\nEnd Function\n
Run Code Online (Sandbox Code Playgroud)\n