Vấn đề gõ tiếng việt trong lập trình VBA

VBA chưa hỗ trợ với bộ Unicode, Các ký tự hỗ trợ trong bảng mã Unicode mới chỉ được từ 0- 225 thôi. Nên các ký tự có mã unicode nhiều hơn sẽ hiển thị dấu (? )
Bởi vậy, để có thể gõ được tiếng việt trong VBA ta thực hiện theo 1 số cách thủ công như sau:
1. Gõ nội dung vào 1 ô trong bảng tính ( VD gõ vào ô A2) Thực hiện lệnh truy xuất nội dung của ô A2: Cells(1,2) = Sheets(“Sheet1”).cells(1,2).  Nhược điểm là các ô trong sheet phải có dữ liệu. Nếu vô tình xóa đi thì dữ liệu cũng sẽ mất.

2: Sử dụng phép nối chuỗi và hàm Chrw để viết code. VD: Viết chữ Lập trình = “L”&chrw(7853)&”p trình”. Đối với cách này mình phải nhớ và biết được bảng mã unicode cuả từng ký tự. Có thể dựa vào Bảng mã để tham chiếu

3. Sử dụng 1 hàm tự tạo (UniVBa) để dịch lại nội dung gõ trong sheet ra bảng Unicode. Từ đó nhập bản dịch vào bảng lập trình ( quay trở lại cách 2).
Đoạn code dịch như sau:

Function UniVba(TxtUni As String) As String
If TxtUni = “” Then
  UniVba = “”””””
Else
  TxtUni = TxtUni & ” “
  If AscW(Left(TxtUni, 1)) < 256 Then UniVba = “”””
  For n = 1 To Len(TxtUni) – 1
    uni1 = Mid(TxtUni, n, 1)
    uni2 = AscW(Mid(TxtUni, n + 1, 1))
    If AscW(uni1) > 255 And uni2 > 255 Then
      UniVba = UniVba & “ChrW(” & AscW(uni1) & “) & “
    ElseIf AscW(uni1) > 255 And uni2 < 256 Then
      UniVba = UniVba & “ChrW(” & AscW(uni1) & “) & “””
    ElseIf AscW(uni1) < 256 And uni2 > 255 Then
      UniVba = UniVba & uni1 & “”” & “
    Else
      UniVba = UniVba & uni1
    End If
  Next
  If Right(UniVba, 4) = ” & “”” Then
    UniVba = Mid(UniVba, 1, Len(UniVba) – 4)
  Else
    UniVba = UniVba & “”””
  End If
End If
End Function

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *