将unicode字符插入VBA字符串

Com*_*ata 6 unicode vba

在Windows 7上使用MS Access 2003,我发现以下函数从ANSI字符串中删除所有重音,更改(例如)señor到senor:

Public Function RemoveAccents(ByVal inputString As String) As String
Const accentString As String = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðñòóóôõöùúûüýÿ"
Const nonAccentStr As String = "AAAAAACEEEEIIIIINOOOOOUUUUYaaaaaaceeeeiiiionoooooouuuuyy"
Dim i As Integer

For i = 1 To Len(accentString)
inputString = Replace(inputString, Mid(accentString, i, 1), Mid(nonAccentStr, i, 1), , , vbBinaryCompare)
Next i
RemoveAccents = inputString
End Function
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将带有Caron(U-010D)(č)(HTMLč)的拉丁小写字母C添加到函数Const accentString时,就像这样,

Const accentString As String = "ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåç" & ChrW$(&H10D) & "èéêëìíîïðñòóóôõöùúûüýÿ"
Const nonAccentStr As String = "AAAAAACEEEEIIIIINOOOOOUUUUYaaaaaacceeeeiiiionoooooouuuuyy"
Run Code Online (Sandbox Code Playgroud)

我无法运行该功能.是否有一种语法允许我调整此函数以从包含不在ANSI字符集中的字符的字符串中去除变音符号?

Dav*_*ens 5

您不能拥有像ChrW()常量声明中那样的函数。

\n\n

修改

\n\n

如果您可以创建这些公共变量而不是常量,那么这应该会为您解决这个问题:

\n\n
Const cWithCaron As String = &H10D\nPublic accentString As String\nPublic nonAccentStr As String\n\n\nSub TestStrings()\nDim clnString As String\n\n    accentString = "\xc3\x80\xc3\x81\xc3\x82\xc3\x83\xc3\x84\xc3\x85\xc3\x87\xc3\x88\xc3\x89\xc3\x8a\xc3\x8b\xc3\x8c\xc3\x8d\xc3\x8e\xc3\x8f\xc3\x8f\xc3\x91\xc3\x92\xc3\x93\xc3\x94\xc3\x95\xc3\x96\xc3\x99\xc3\x9a\xc3\x9b\xc3\x9c\xc3\x9d\xc3\xa0\xc3\xa1\xc3\xa2\xc3\xa3\xc3\xa4\xc3\xa5\xc3\xa7" & ChrW(cWithCaron) & "\xc3\xa8\xc3\xa9\xc3\xaa\xc3\xab\xc3\xac\xc3\xad\xc3\xae\xc3\xaf\xc3\xb0\xc3\xb1\xc3\xb2\xc3\xb3\xc3\xb3\xc3\xb4\xc3\xb5\xc3\xb6\xc3\xb9\xc3\xba\xc3\xbb\xc3\xbc\xc3\xbd\xc3\xbf"\n\n    nonAccentStr = "AAAAAACEEEEIIIIINOOOOOUUUUYaaaaaacceeeeiiiionoooooouuuuyy"\n    \'I added this variable to test the function:\n    clnString = RemoveAccents(accentString)\n    \'And a message box to display the results:\n    MsgBox clnString = nonAccentStr\n\nEnd Sub\n\nPublic Function RemoveAccents(ByVal inputString As String) As String\n\nDim i As Integer\n\n    For i = 1 To Len(accentString)\n\n        inputString = Replace(inputString, Mid(accentString, i, 1), Mid(nonAccentStr, i, 1), , , vbBinaryCompare)\n    Next i\n\n    RemoveAccents = inputString\n\nEnd Function\n
Run Code Online (Sandbox Code Playgroud)\n