Gõ tiếng việt trong VBA với bảng mã Windows CP1258

ngochienle

Yêu THVBA
Chào tất cả các bạn, hôm nay mình chia sẻ cho mọi người thêm một cách tiếp cận mới để hiển thị Tiếng Việt có dấu trong VBA.

Cài đặt môi trường Tiếng Việt CP1258:
Bạn cần đăng nhập để thấy hình ảnh

Bạn cần đăng nhập để thấy hình ảnh


Thiết lập bảng mã gõ bằng Unikey:
Bạn cần đăng nhập để thấy hình ảnh


Hàm hiển thị Tiếng Việt:
Mã:
' Hàm TV dùng để hiển thị văn bản gõ bằng bảng mã Windows CP1258 sang định dạng Unicode
' Tác giả: Lê Ngọc Hiển
Public Function TV(text As String) As String
    Dim TuDien As Object, i As Long, CP1258() As String, CharCode() As String, KetQua As String, key As Variant
    Set TuDien = CreateObject("Scripting.Dictionary")
    ' Mảng ký tự mã hóa Windows-1258
    CP1258 = Split("ãì,ãÌ,ãÒ,ãÞ,ãò,âì,âÌ,âÒ,âÞ,âò,êì,êÌ,êÒ,êÞ,êò,ôì,ôÌ,ôÒ,ôÞ,ôò,õì,õÌ,õÒ,õÞ,õò,ýì,ýÌ,ýÒ,ýÞ,ýò,aì,aÌ,aÒ,ã,aò,aÞ,â,ð,eì,eÌ,eÒ,eÞ,eò,ê,iì,iÌ,iÒ,iÞ,iò,oì,oÌ,oÒ,oÞ,oò,ô,õ,uì,uÌ,uÒ,uÞ,uò,ý,yì,yÌ,yÒ,yÞ,yò", ",")
    ' Mảng ký tự mã hóa Unicode
    CharCode = Split("7855,7857,7859,7861,7863,7845,7847,7849,7851,7853,7871,7873,7875,7877,7879,7889,7891,7893,7895,7897,7899,7901,7903,7905,7907,7913,7915,7917,7919,7921,225,224,7843,259,7841,227,226,273,233,232,7867,7869,7865,234,237,236,7881,297,7883,243,242,7887,245,7885,244,417,250,249,7911,361,7909,432,253,7923,7927,7929,7925", ",")
    For i = 0 To UBound(CP1258)
        If Not TuDien.Exists(CP1258(i)) Then
            TuDien.Add CP1258(i), ChrW(CLng(CharCode(i)))
        End If
        If Not TuDien.Exists(UCase(CP1258(i))) Then
            TuDien.Add UCase(CP1258(i)), UCase(ChrW(CLng(CharCode(i))))
        End If
    Next i
    KetQua = text
    For Each key In TuDien.Keys
        KetQua = Replace(KetQua, key, TuDien(key))
    Next key
    TV = KetQua
End Function
Hàm test thử hiển thị Tiếng Việt:
Mã:
Function MsgBoxVN(ByVal Noidung As String, Optional ByVal Tieude As String, Optional ByVal Kieu As _
    MsoAlertButtonType = vbOKOnly, Optional ByVal BieuTuong As MsoAlertIconType = msoAlertIconInfo) As VbMsgBoxResult
    If Tieude = "" Then
        Tieude = TV("Thông baìo!")
    End If
    Application.Assistant.DoAlert Tieude, Noidung, Kieu, BieuTuong, 0, 0, 0
End Function

Sub Test_Thongbao()
    MsgBoxVN TV("ThýÒ nghiêòm hiêÒn thiò thông baìo Tiêìng Viêòt võìi baÒng maÞ Windows CP1258.")
End Sub
Bạn cần đăng nhập để thấy hình ảnh

Kết quả:
Bạn cần đăng nhập để thấy hình ảnh


 
Top