Unicode tiếng việt khi viết trong VBA Excel

Hướng dẫn cách hiển thị tiếng việt khi viết trong VBA Excel, với hàm Msgbox

Gõ tiếng Việt trong VBA – MsgBox có hỗ trợ Unicode không?

Nhiều bạn thắc mắc: Tại sao không thể gõ tiếng Việt trong trình soạn thảo VBA?
Thực tế, việc sử dụng tiếng Việt (hoặc các ký tự Unicode) trong VBA thường nhằm mục đích:
    Hiển thị thông báo bằng tiếng Việt qua MsgBox,
    Ghi dữ liệu có dấu vào các ô trên bảng tính Excel,
    Hoặc thiết kế giao diện phần mềm trong Excel sử dụng tiếng Việt.

VBA có hỗ trợ Unicode không?

Câu trả lời là: Có, nhưng không hoàn toàn.

    Trình soạn thảo VBA (VBE - Visual Basic Editor) không hỗ trợ gõ tiếng Việt trực tiếp trong cửa sổ mã nguồn do hạn chế về font và khả năng xử lý ký tự Unicode.

    Tuy nhiên, biến kiểu String trong VBA có hỗ trợ Unicode, nên bạn vẫn có thể hiển thị tiếng Việt đúng trong:
        MsgBox
        Cells(x, y).Value
        Label, Textbox trong UserForm

Cách hiển thị được tiếng việt Unicode trong VBA Excel

Thêm hàm vào module VBA Excel

Function Unicode_Convert(Text As String, InputMethod As String) As String
  Dim VNI_Type, Telex_Type, CharCode, Temp, i As Long
  UniConvert = Text
  VNI_Type = Array("a81", "a82", "a83", "a84", "a85", "a61", "a62", "a63", "a64", "a65", "e61", _
      "e62", "e63", "e64", "e65", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", "o74", _
      "o75", "u71", "u72", "u73", "u74", "u75", "a1", "a2", "a3", "a4", "a5", "a8", "a6", "d9", _
      "e1", "e2", "e3", "e4", "e5", "e6", "i1", "i2", "i3", "i4", "i5", "o1", "o2", "o3", "o4", _
      "o5", "o6", "o7", "u1", "u2", "u3", "u4", "u5", "u7", "y1", "y2", "y3", "y4", "y5")
  Telex_Type = Array("aws", "awf", "awr", "awx", "awj", "aas", "aaf", "aar", "aax", "aaj", "ees", _
      "eef", "eer", "eex", "eej", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", "owx", _
      "owj", "uws", "uwf", "uwr", "uwx", "uwj", "as", "af", "ar", "ax", "aj", "aw", "aa", "dd", _
      "es", "ef", "er", "ex", "ej", "ee", "is", "if", "ir", "ix", "ij", "os", "of", "or", "ox", _
      "oj", "oo", "ow", "us", "uf", "ur", "ux", "uj", "uw", "ys", "yf", "yr", "yx", "yj")
  CharCode = Array(ChrW(7855), ChrW(7857), ChrW(7859), ChrW(7861), ChrW(7863), ChrW(7845), ChrW(7847), _
      ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7871), ChrW(7873), ChrW(7875), ChrW(7877), ChrW(7879), _
      ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), ChrW(7903), _
      ChrW(7905), ChrW(7907), ChrW(7913), ChrW(7915), ChrW(7917), ChrW(7919), ChrW(7921), ChrW(225), _
      ChrW(224), ChrW(7843), ChrW(227), ChrW(7841), ChrW(259), ChrW(226), ChrW(273), ChrW(233), ChrW(232), _
      ChrW(7867), ChrW(7869), ChrW(7865), ChrW(234), ChrW(237), ChrW(236), ChrW(7881), ChrW(297), ChrW(7883), _
      ChrW(243), ChrW(242), ChrW(7887), ChrW(245), ChrW(7885), ChrW(244), ChrW(417), ChrW(250), ChrW(249), _
      ChrW(7911), ChrW(361), ChrW(7909), ChrW(432), ChrW(253), ChrW(7923), ChrW(7927), ChrW(7929), ChrW(7925))
  Select Case InputMethod
    Case Is = "VNI": Temp = VNI_Type
    Case Is = "Telex": Temp = Telex_Type
  End Select
  For i = 0 To UBound(CharCode)
    UniConvert = Replace(UniConvert, Temp(i), CharCode(i))
    UniConvert = Replace(UniConvert, UCase(Temp(i)), UCase(CharCode(i)))
  Next i
End Function

 

 

Bài viết liên quan:

Hướng dẫn cách hiển thị tiếng việt khi viết trong VBA Excel, với hàm Msgbox