2013-03-26 3 views
6

Использование MS Access 2003 на Windows 7, я обнаружил, что следующая функция удаляет все акценты из строк ANSI, изменение (например) сеньор к сеньор:вставки юникод символов в строку 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 

Но когда я пытался добавить латинская буква с с Caron (U-010D) (č) (HTML & # 269;) к функции Const accentString, как это,

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

я не смог запустить функцию. Есть ли синтаксис, который позволит мне приспособить эту функцию, чтобы удалить диакритические символы из строк, содержащих символы, не содержащиеся в наборе символов ANSI?

+1

Gee, даже если я говорю только по-английски и жить в обычно однородные США, но мне все еще приходится иметь дело с символами Юникода, и этот вопрос помог мне. – GlennFromIowa

ответ

4

У вас не может быть таких функций, как 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

Дэвид, ваше предложение позволяет мне сохранить и запустить функцию, но теперь функция не заменяет славянский и H10D простой c. Он покидает славянский хатек по сцене. – Commata

+0

Ahhhh Я вижу. Позвольте мне взглянуть поближе. –

+0

Любые причины, по которым они должны быть объявлены как 'CONST'? Я могу думать о возможных обходных решениях, если они были переменными PUBLIC, заданными в другом месте (например, подпрограмма, которая вызывает функцию RemoveAccents). –