2013-03-26 30 views
6

Sử dụng MS Access 2003 trên Windows 7, tôi thấy rằng các chức năng sau dải tất cả các điểm nhấn từ chuỗi ANSI, thay đổi (ví dụ) Señor để Senor:chèn unicode nhân vật thành một chuỗi 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 

Nhưng khi tôi cố gắng thêm Latin chữ C nhỏ với Caron (U-010D) (č) (HTML & # 269;) với chức năng Const accentString, như thế này,

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

tôi đã không thể chạy các chức năng. Có một cú pháp mà sẽ cho phép tôi để thích ứng với chức năng này để tước các dấu phụ từ chuỗi có chứa các ký tự không có trong bộ ký tự ANSI?

+1

Gee, mặc dù tôi chỉ nói tiếng Anh và sống ở nói chung là đồng nhất Hoa Kỳ, nhưng tôi vẫn phải đối phó với các ký tự Unicode, và câu hỏi này đã giúp tôi. – GlennFromIowa

Trả lời

4

Bạn không thể có các chức năng như ChrW() trong tuyên bố liên tục.

Revised

Nếu bạn có thể làm cho các biến công cộng thay vì hằng số, sau đó điều này sẽ chăm sóc nó cho bạn:

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

David, gợi ý của bạn cho phép tôi lưu và chạy hàm, nhưng bây giờ chức năng không thay thế Slavic & H10D bằng đồng bằng c. Nó để lại hacek slavic trên c tại chỗ. – Commata

+0

Ahhhh tôi hiểu rồi. Hãy để tôi xem xét kỹ hơn. –

+0

Bất kỳ lý do nào tại sao chúng phải được khai báo là 'CONST'? Tôi có thể nghĩ cách giải quyết có thể xảy ra nếu đây là các biến 'PUBLIC' được đặt ở nơi khác (ví dụ: chương trình con gọi hàm RemoveAccents). –

Các vấn đề liên quan