Chào các Bạn,
Nhiều Bạn gửi tin nhắn và email đề nghị tôi giải thích rõ hơn nữa việc sắp xếp tiếng Việt Unicode trong MS. Access và từng dòng lệnh VBA để làm việc này, nên tôi xin được tách vấn đề này riêng ra và trao đổi cụ thể hơn như sau:
Xin trở lại từ đầu yêu cầu sắp xếp danh sách tiếng Việt như sau:
1. Quy tắc sắp xếp danh sách tiếng Việt như sau:
- Thứ tự sắp xếp các nguyên âm có dấu của tiếng Việt là: Không dấu -> Huyền -> Sắc -> Hỏi -> Ngã -> Nặng
- Nếu là sắp xếp danh sách theo Họ và Tên, thứ tự sắp xếp là: xếp theo Tên -> xếp theo Chữ lót -> xếp theo Họ.
2. Giải pháp:
- Cách đơn giản nhất là mã hóa chuỗi tiếng Việt thành chuỗi thuần latinh không dấu, sau đó sử dụng chức năng Sort của MS. Access để sắp xếp tooàn bộ danh sách.
- Đối với danh sách Họ và Tên, trình tự cụ thể sẽ là:
+ Tách nguyên chuỗi Họ và Tên thành các cột riêng biệt thích hợp: cột Tên và cột Chữ Lót và Họ (nghĩa là có đảo ngược chuỗi "Họ và chữ lót" thành "Chữ lót và Họ")
+ Mã hóa các cột vừa tách và sử dụng chức năng Sort để sắp xếp danh sách theo "Tên" và theo "Chữ lót và Họ".
3. Viết các procedure VBA cần thiết để tách cột, đảo chuổi và mã hóa như sau:
+ Để tách cột Họ và Tên:
Mã:
Function TachTen(HoVaTen As String) As String
Dim Ten As String
Dim i As Integer
Dim nTu As Integer
Dim St As String
Dim LngSt As Integer
HoVaTen = Trim(HoVaTen)
LngSt = Len(HoVaTen)
'Đoạn mã sau đây để xác định vị trí của ký tự trắng ngăn cách các từ trong chuỗi Họ và Tên, tính từ bên phải sang trái
'Bởi mục đích là ta tách phần Tên ra khỏi chuỗi Họ và Tên
i = InStrRev(HoVaTen, " ")
'Nếu chuỗi Họ và Tên chỉ có 1 từ (không có ký tự trắng ngăn cách nào)
If i = 0 Then
'Thì lấy nguyên từ duy nhất đó
Ten = HoVaTen
Else
Ten = Right(HoVaTen, LngSt - i)
End If
TachTen = Ten
End Function
Trong bài kế tiếp tôi sẽ giải thích các procedure còn lại.
Xin nhờ các Bạn Quản trị sửa giúp các đoạn ghi chú giải thích trong khung code để các Bạn dễ đọc.