插入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字符集中的字符的字符串中去除变音符号?
在常量声明中不能有像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
大卫,你的建议使我能够保存和运行该功能,但现在该功能并没有用普通的c代替斯拉夫&H10D。它将斯拉夫语hacek留在c上。 – Commata 2013-03-26 17:46:05
啊,我明白了。让我仔细看看。 – 2013-03-26 17:52:46
为什么这些必须被声明为'CONST'?如果这些变量是在其他地方设置的“PUBLIC”变量(例如,调用RemoveAccents函数的子例程),我可以想到可能的解决方法。 – 2013-03-26 17:53:56
啧啧,即使我只说英语,住在通常是同质的美国,但我仍然需要处理Unicode字符,这个问题帮助了我。 – GlennFromIowa 2016-07-06 15:27:12