插入Unicode字符为VBA字符串

问题描述:

在Windows 7上使用MS Access 2003中,我发现下面这个函数去除从ANSI字符串的所有口音,改变(例如)阅兵式,以SENOR:插入Unicode字符为VBA字符串

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 

但是,当我试图与卡隆(U-010D)(č)(HTML č)添加拉丁文小写字母C的功能常量accentString,这样,

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

我无法运行该功能。有没有一种语法可以让我调整这个函数以从包含不在ANSI字符集中的字符的字符串中去除变音符号?

+1

啧啧,即使我只说英语,住在通常是同质的美国,但我仍然需要处理Unicode字符,这个问题帮助了我。 – GlennFromIowa 2016-07-06 15:27:12

在常量声明中不能有像ChrW()这样的函数。

修订

如果你可以让这些公共变量,而不是常量,那么这应该照顾它给你:

Const cWithCaron As String = &H10D 
Public accentString As String 
Public nonAccentStr As String 


Sub TestStrings() 
Dim clnString As String 

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

    nonAccentStr = "AAAAAACEEEEIIIIINOOOOOUUUUYaaaaaacceeeeiiiionoooooouuuuyy" 
    'I added this variable to test the function: 
    clnString = RemoveAccents(accentString) 
    'And a message box to display the results: 
    MsgBox clnString = nonAccentStr 

End Sub 

Public Function RemoveAccents(ByVal inputString As String) As String 

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 
+0

大卫,你的建议使我能够保存和运行该功能,但现在该功能并没有用普通的c代替斯拉夫&H10D。它将斯拉夫语hacek留在c上。 – Commata 2013-03-26 17:46:05

+0

啊,我明白了。让我仔细看看。 – 2013-03-26 17:52:46

+0

为什么这些必须被声明为'CONST'?如果这些变量是在其他地方设置的“PUBLIC”变量(例如,调用RemoveAccents函数的子例程),我可以想到可能的解决方法。 – 2013-03-26 17:53:56