Chia sẻ các Code liên quan đến Font trong VBA (5 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Tôi tuân thủ nội quy khi đăng bài

Minh Tam 2024

Thành viên mới
Tham gia
17/3/25
Bài viết
8
Được thích
0
Chào cả nhà GPE. Em xin gửi 1 số code lượm vặt trên diễn đàn gom lại chia sẻ cho các mọi người copy vào dùng cho nhanh

Mã:
Option Explicit
Public Type DataText
        start As Single
        Len As Single
        Name As String
        SIZE As Single
        Strikethrough As Boolean
        Superscript As Boolean
        SubScript As Boolean
        Underline As Single
        ColorIndex As Variant
        Bold As Boolean
        Italic As Boolean
End Type

Function IsUnicode(s$) As Boolean
'Haøm kieåm tra font Unicode
Dim bLen!, Map() As Byte, i%
    If LenB(s) Then
        Map = s: bLen = UBound(Map)
        For i = 1 To bLen Step 2
            If (Map(i) > 0) Then IsUnicode = True: Exit Function
        Next
    End If
End Function

Function IsVni(vnstr$) As Boolean
'Haøm kieåm tra font VNI
Dim VNI$, k!, arrVNI() As String, j!
    VNI = "aù,aø,aû,aõ,aï,aê,aé,aè,aú,aü,aë,aâ,aá,aà,aå,aã,aä,eù,eø,eû,eõ,eï,eâ,eá,eà,eå,eã,eä,où,oø,oû,oõ,oï,oâ,oá,oà,oå,oã,oä,ôù,ôø,ôû,ôõ,ôï,uù,uø,uû,uõ,uï,öù,öø,öû,öõ,öï,yù,yø,yû,yõ,AÙ,AØ,AÛ,AÕ,AÏ,AÊ,AÉ,AÈ,AÚ,AÜ,AË,AÂ,AÁ,AÀ,AÅ,AÃ,AÄ,EÙ,EØ,EÛ,EÕ,EÏ,EÂ,EÁ,EÀ,EÅ,EÃ,EÄ,Í,Ì,Æ,Ó,Ò,OÙ,OØ,OÛ,OÕ,OÏ,OÂ,OÁ,OÀ,OÅ,OÃ,OÄ,ÔÙ,ÔØ,ÔÛ,ÔÕ,ÔÏ,UÙ,UØ,UÛ,UÕ,UÏ,ÖÙ,ÖØ,ÖÛ,ÖÕ,ÖÏ,YÙ,YØ,YÛ,YÕ"
    arrVNI = Split(VNI, ",")
        For k = 1 To Len(vnstr)
            For j = 0 To 117
                If Mid(vnstr, k, 2) = arrVNI(j) Then
                    IsVni = True: j = 117: k = Len(vnstr)
                Else
                    IsVni = False
                End If
            Next j
        Next k
End Function

Function IsTCVN3(vnstr$) As Boolean
'Haøm kieåm tra font TCVN3
Dim i%
Dim abc$: abc = "¸µ¶·¹¨¾»¼½©ÊÇÈÉËÐϪÕÔÖÝ×ØÜÞãßáâä«èåçéêëøõ÷ïýúûüþ®¡¢£¤¥ê¦§"
    For i = 1 To Len(vnstr)
        If InStr(abc, Mid(vnstr, i, 1)) > 0 Then IsTCVN3 = True: i = Len(vnstr) Else IsTCVN3 = False
    Next i
End Function

Function FixVniTcvn3(vnstr$) As Boolean
'Haøm söûa moät vaøi loãi kyù töï khi chuyeån töø VNI sang TCVN3
Dim i!, C
    For i = 1 To Len(vnstr): C = Mid(vnstr, i, 1)
        On Error Resume Next
            Select Case C
                Case "ñ"
                    If Mid(vnstr, i - 2, 1) = "p" Then
                        FixVniTcvn3 = False And i = Len(vnstr)
                    ElseIf Mid(vnstr, i + 1, 1) = " " Then
                        FixVniTcvn3 = True And i = Len(vnstr)
                    Else
                        FixVniTcvn3 = True
                    End If

                Case "Ñ"
                    If Mid(vnstr, i - 1, 1) = " " Then
                        FixVniTcvn3 = False And i = Len(vnstr)
                    Else
                        FixVniTcvn3 = True
                    End If

                Case "ô": If is_o(vnstr, i) = True Then FixVniTcvn3 = True And i = Len(vnstr)
                Case "Ì": If is_e(vnstr, i) = True Then FixVniTcvn3 = True And i = Len(vnstr)
                Case "Æ": If is_e1(vnstr, i) = True Then FixVniTcvn3 = True And i = Len(vnstr)
                Case "Ó": If is_e2(vnstr, i) = True Then FixVniTcvn3 = True And i = Len(vnstr)
                Case "Ò": If is_e3(vnstr, i) = True Then FixVniTcvn3 = True And i = Len(vnstr)
                Case "í": If is_i(vnstr, i) = True Then FixVniTcvn3 = True And i = Len(vnstr)
                Case "ì": If is_i1(vnstr, i) = True Then FixVniTcvn3 = True And i = Len(vnstr)
                Case "æ": If is_i2(vnstr, i) = True Then FixVniTcvn3 = True And i = Len(vnstr)
                Case "ó": If is_i3(vnstr, i) = True Then FixVniTcvn3 = True And i = Len(vnstr)
                Case "ò": If is_i4(vnstr, i) = True Then FixVniTcvn3 = True And i = Len(vnstr)
            End Select
        Next i
End Function

Function is_o(vnstr$, k!) As Boolean
    vnstr = ChuThuong(vnstr): C = Mid(vnstr, k, 1): On Error Resume Next
        If Mid(vnstr, k - 1, 3) = "bôt" Or Mid(vnstr, k - 1, 3) = "bôn" Or Mid(vnstr, k - 1, 3) = "côn" Or _
           Mid(vnstr, k - 2, 1) = "g" Or Mid(vnstr, k - 2, 4) = "g vô" Or Mid(vnstr, k - 1, 2) = "lô" Or _
           Mid(vnstr, k - 1, 3) = "nô h" Or Mid(vnstr, k - 1, 3) = "sôt" Or Mid(vnstr, k - 1, 3) = "vô m" Or _
           Mid(vnstr, k - 1, 3) = "vôn" Or Mid(vnstr, k - 4, 5) = "è trô" Or Mid(vnstr, k - 2, 4) = "trô c" _
           Or Mid(vnstr, k - 4, 5) = "n trô" Or Mid(vnstr, k - 2, 5) = "trô v" Or Mid(vnstr, k - 2, 4) = "trôc" _
           Or Mid(vnstr, k - 2, 4) = "chôc" Then
                is_o = False
        ElseIf Mid(vnstr, k + 2, 1) = "x" Or Mid(vnstr, k + 2, 1) = "b" Or Mid(vnstr, k + 2, 1) = "r" Or _
            Mid(vnstr, k - 1, 3) = "hôi" Or Mid(vnstr, k - 3, 4) = "o mô" Or Mid(vnstr, k - 1, 4) = "mô m" Or _
            Mid(vnstr, k - 4, 5) = "lô mô" Or Mid(vnstr, k - 2, 4) = "trôn" Or Mid(vnstr, k - 1, 2) = "öô" Or _
            Mid(vnstr, k - 1, 5) = "lô mô" Or Mid(vnstr, k - 1, 2) = "ñô" Or Mid(vnstr, k - 2, 6) = "trôn c" _
            Or Mid(vnstr, k - 1, 1) = "u" Then
                is_o = True
        End If
End Function

Function is_e(vnstr$, k!) As Boolean
    C = Mid(vnstr, k, 1): On Error Resume Next
        If Mid(vnstr, k - 1, 1) = "o" Or Mid(vnstr, k + 1, 1) = "m" Or Mid(vnstr, k + 1, 1) = "n" Then
            is_e = False
        ElseIf Mid(vnstr, k - 1, 1) = "B" Or Mid(vnstr, k - 1, 1) = "D" Or Mid(vnstr, k - 1, 1) = "Ñ" _
            Or Mid(vnstr, k - 1, 1) = "G" Or Mid(vnstr, k - 1, 1) = "H" Or Mid(vnstr, k - 1, 1) = "K" Or _
            Mid(vnstr, k - 1, 1) = "L" Or Mid(vnstr, k - 1, 1) = "M" Or Mid(vnstr, k - 1, 1) = "N" Or _
            Mid(vnstr, k - 1, 1) = "U" Or Mid(vnstr, k - 1, 1) = "R" Or Mid(vnstr, k - 1, 1) = "S" Or _
            Mid(vnstr, k - 1, 1) = "T" Or Mid(vnstr, k - 1, 1) = "V" Or Mid(vnstr, k - 1, 1) = "X" Then
            is_e = True
        End If
End Function

Function is_e1(vnstr$, k!) As Boolean
    C = Mid(vnstr, k, 1): On Error Resume Next
        If Mid(vnstr, k + 1, 1) = "t" Then
            is_e1 = False
        ElseIf Mid(vnstr, k - 1, 1) = "B" Or Mid(vnstr, k - 1, 1) = "D" Or Mid(vnstr, k - 1, 1) = "Ñ" _
            Or Mid(vnstr, k - 1, 1) = "G" Or Mid(vnstr, k - 1, 1) = "H" Or Mid(vnstr, k - 1, 1) = "K" Or _
            Mid(vnstr, k - 1, 1) = "L" Or Mid(vnstr, k - 1, 1) = "M" Or Mid(vnstr, k - 1, 1) = "N" Or _
            Mid(vnstr, k - 1, 1) = "U" Or Mid(vnstr, k - 1, 1) = "R" Or Mid(vnstr, k - 1, 1) = "S" Or _
            Mid(vnstr, k - 1, 1) = "T" Or Mid(vnstr, k - 1, 1) = "V" Or Mid(vnstr, k - 1, 1) = "X" Then
            is_e1 = True
        End If
End Function

Function is_e2(vnstr$, k!) As Boolean
        C = Mid(vnstr, k, 1): On Error Resume Next
        If Mid(vnstr, k - 1, 1) = "o" Or Mid(vnstr, k + 1, 1) = "m" Or Mid(vnstr, k + 1, 1) = "n" Then
            is_e2 = False
        ElseIf Mid(vnstr, k - 1, 1) = "B" Or Mid(vnstr, k - 1, 1) = "D" Or Mid(vnstr, k - 1, 3) = "Ñ" _
            Or Mid(vnstr, k - 1, 1) = "G" Or Mid(vnstr, k - 1, 1) = "H" Or Mid(vnstr, k - 1, 1) = "K" Or _
            Mid(vnstr, k - 1, 1) = "L" Or Mid(vnstr, k - 1, 1) = "M" Or Mid(vnstr, k - 1, 1) = "N" Or _
            Mid(vnstr, k - 1, 1) = "U" Or Mid(vnstr, k - 1, 1) = "R" Or Mid(vnstr, k - 1, 1) = "S" Or _
            Mid(vnstr, k - 1, 1) = "T" Or Mid(vnstr, k - 1, 1) = "V" Or Mid(vnstr, k - 1, 1) = "X" Then
            is_e2 = True
        End If
End Function

Function is_e3(vnstr$, k!) As Boolean
        C = Mid(vnstr, k, 1): On Error Resume Next
        If Mid(vnstr, k - 1, 1) = "o" Or Mid(vnstr, k + 1, 1) = "m" Or Mid(vnstr, k + 1, 1) = "n" Then
            is_e3 = False
        ElseIf Mid(vnstr, k - 1, 1) = "B" Or Mid(vnstr, k - 1, 1) = "D" Or Mid(vnstr, k - 1, 1) = "Ñ" _
            Or Mid(vnstr, k - 1, 1) = "H" Or Mid(vnstr, k - 1, 1) = "K" Or Mid(vnstr, k - 1, 1) = "L" _
            Or Mid(vnstr, k - 1, 1) = "M" Or Mid(vnstr, k - 1, 1) = "N" Or Mid(vnstr, k - 1, 1) = "U" _
            Or Mid(vnstr, k - 1, 1) = "S" Or Mid(vnstr, k - 1, 1) = "T" Or Mid(vnstr, k - 1, 1) = "V" Or _
            Mid(vnstr, k - 1, 1) = "X" Then
            is_e3 = True
        End If
End Function

Function is_i(vnstr$, k!) As Boolean
    vnstr = ChuThuong(vnstr): C = Mid(vnstr, k, 1): On Error Resume Next
    If Mid(vnstr, k - 1, 4) = "bí n" Or Mid(vnstr, k - 3, 4) = "t bí" Or Mid(vnstr, k - 1, 1) = "c" Or _
        Mid(vnstr, k - 2, 1) = "g" Or Mid(vnstr, k - 1, 1) = "®" Or Mid(vnstr, k - 1, 4) = "rí m" Or _
        Mid(vnstr, k - 3, 4) = "g sí" Or Mid(vnstr, k - 1, 4) = "sí m" Or Mid(vnstr, k - 1, 1) = "" Then
        is_i = False
    ElseIf Mid(vnstr, k - 1, 4) = "bí t" Or Mid(vnstr, k - 1, 4) = "bí ñ" Or Mid(vnstr, k - 1, 3) = "bín" Or _
        Mid(vnstr, k - 1, 4) = "dí d" Or Mid(vnstr, k - 1, 2) = "hí" Or Mid(vnstr, k - 1, 2) = "lí" Or _
        Mid(vnstr, k - 1, 4) = "mí m" Or Mid(vnstr, k - 1, 4) = "t mí" Or Mid(vnstr, k + 1, 1) = "t" Or _
        Mid(vnstr, k - 1, 4) = "ví v" Or Mid(vnstr, k - 1, 1) = "x" Or Mid(vnstr, k - 1, 3) = "tí t" Then
        is_i = True
    End If
End Function

Function is_i1(vnstr$, k!) As Boolean
    vnstr = ChuThuong(vnstr): C = Mid(vnstr, k, 1): On Error Resume Next
        If Mid(vnstr, k - 1, 4) = "bì n" Or Mid(vnstr, k - 1, 4) = "dì h" Or Mid(vnstr, k - 3, 1) = "c" Or _
           Mid(vnstr, k - 1, 1) = "c" Or Mid(vnstr, k - 1, 1) = "®" Or Mid(vnstr, k - 3, 1) = "p" Or Mid(vnstr, k - 1, 1) = "g" _
           Or Mid(vnstr, k - 1, 3) = "lì l" Or Mid(vnstr, k - 1, 3) = "lì m" Or Mid(vnstr, k - 4, 1) = "µ" Or _
           Mid(vnstr, k - 1, 1) = "n" Or Mid(vnstr, k - 3, 4) = "n vì" Or Mid(vnstr, k - 2, 1) = "æ" _
           Or Mid(vnstr, k - 2, 1) = "æ" Or Mid(vnstr, k - 1, 4) = "vì l" Then
            is_i1 = False
        ElseIf Mid(vnstr, k - 1, 1) = "h" Or Mid(vnstr, k - 1, 1) = "k" Or Mid(vnstr, k - 1, 1) = "u" Or _
            Mid(vnstr, k - 1, 4) = "rì r" Or Mid(vnstr, k - 3, 4) = "m rì" Or Mid(vnstr, k - 1, 1) = "s" Or _
            Mid(vnstr, k - 1, 1) = "t" Or Mid(vnstr, k - 1, 1) = "x" Then
            is_i1 = True
        End If
End Function

Function is_i2(vnstr$, k!) As Boolean
    vnstr = ChuThuong(vnstr): C = Mid(vnstr, k, 1): On Error Resume Next
        If Mid(vnstr, k - 1, 1) = "b" Or Mid(vnstr, k - 1, 1) = "c" Or Mid(vnstr, k - 3, 1) = "g" Or _
           Mid(vnstr, k - 1, 1) = "g" Or Mid(vnstr, k - 1, 1) = "®" Or Mid(vnstr, k - 1, 1) = "m" Or _
           Mid(vnstr, k - 3, 1) = "c næ" Or Mid(vnstr, k - 1, 1) = "s" Or Mid(vnstr, k - 4, 1) = "µ" _
           Or Mid(vnstr, k - 1, 1) = "n" Or Mid(vnstr, k - 2, 1) = "æ" Or Mid(vnstr, k - 2, 1) = "æ" Or _
           Mid(vnstr, k - 1, 4) = "vì l" Or Mid(vnstr, k - 3, 4) = "ô tæ" Or Mid(vnstr, k - 1, 4) = "t« t" Or _
           Mid(vnstr, k - 1, 4) = "tæ c" Or Mid(vnstr, k - 1, 4) = "tæ q" Then
            is_i2 = False
        ElseIf Mid(vnstr, k - 1, 4) = "hæ m" Or Mid(vnstr, k - 1, 4) = "hæ h" Or Mid(vnstr, k - 1, 1) = "u" Or _
            Mid(vnstr, k - 1, 4) = "ræ r" Or Mid(vnstr, k - 1, 4) = "sæ v" Or Mid(vnstr, k - 1, 4) = "sæ c" Or _
            Mid(vnstr, k - 3, 4) = "c sæ " Or Mid(vnstr, k - 1, 1) = "t" Or Mid(vnstr, k - 1, 4) = "xæ t" Then
            is_i2 = True
        End If
End Function

Function is_i3(vnstr$, k!) As Boolean
    vnstr = ChuThuong(vnstr): C = Mid(vnstr, k, 1): On Error Resume Next
        If Mid(vnstr, k - 1, 1) = "®" Or Mid(vnstr, k - 1, 1) = "h" Or Mid(vnstr, k - 1, 1) = "g" _
           Or Mid(vnstr, k + 1, 2) = "ng" Or Mid(vnstr, k - 1, 3) = "són" Or Mid(vnstr, k - 1, 1) = "t" _
           Or Mid(vnstr, k - 1, 1) = "n" Or Mid(vnstr, k - 2, 1) = "æ" Or Mid(vnstr, k - 2, 1) = "æ" Or _
           Mid(vnstr, k - 1, 4) = "vì l" Then
            is_i3 = False
        ElseIf Mid(vnstr, k - 1, 4) = "lónh" Or Mid(vnstr, k - 1, 1) = "u" Or Mid(vnstr, k - 1, 4) = "vó m" _
            Or Mid(vnstr, k - 1, 4) = "vó ñ" Or Mid(vnstr, k - 1, 4) = "vó n" Or Mid(vnstr, k - 3, 4) = "c sæ " _
            Or Mid(vnstr, k - 1, 1) = "b" Or Mid(vnstr, k - 1, 1) = "c" Or Mid(vnstr, k - 3, 1) = "d" Then
            is_i3 = True
        End If
End Function

Function is_i4(vnstr$, k!) As Boolean
    vnstr = ChuThuong(vnstr): C = Mid(vnstr, k, 1): On Error Resume Next
        If Mid(vnstr, k - 1, 1) = "®" Or Mid(vnstr, k - 1, 1) = "c" Or Mid(vnstr, k - 1, 1) = "b" Or _
           Mid(vnstr, k - 1, 4) = "dòng" Or Mid(vnstr, k - 1, 1) = "m" Or Mid(vnstr, k + 1, 2) = "ng" Or _
           Mid(vnstr, k - 1, 3) = "són" Or Mid(vnstr, k - 1, 1) = "t" Or Mid(vnstr, k - 1, 1) = "n" Or _
           Mid(vnstr, k - 2, 1) = "æ" Or Mid(vnstr, k - 2, 1) = "æ" Or Mid(vnstr, k - 1, 4) = "vì l" Then
            is_i4 = False
        ElseIf Mid(vnstr, k - 1, 4) = "lònh" Or Mid(vnstr, k - 1, 1) = "u" Or Mid(vnstr, k - 1, 4) = "lònh" _
            Or Mid(vnstr, k - 1, 4) = "vó ñ" Or Mid(vnstr, k - 1, 4) = "ròn" Or Mid(vnstr, k - 1, 4) = "vòng " _
            Or Mid(vnstr, k - 1, 1) = "b" Or Mid(vnstr, k - 1, 1) = "k" Or Mid(vnstr, k - 3, 1) = "d" Or _
            Mid(vnstr, k - 1, 3) = "xòn" Then
            is_i4 = True
        End If
End Function

Function AutoFont(vnstr$) As String
        If IsUnicode(vnstr) = True Then
                AutoFont = 1
        ElseIf IsTCVN3(vnstr) = True Then
                AutoFont = 2
        ElseIf IsVni(vnstr) = True Then
                AutoFont = 3
        ElseIf FixVniTcvn3(vnstr) = True Then
                AutoFont = 3
        Else
                AutoFont = 1
        End If

End Function

Function CFont(Text$, ByVal Nguon As Byte, ByVal Dich As Byte) As String
'Haøm chuyeån font chöõ ña naêng
Dim iUNI As Variant, iTCVN As Variant, iVNI As Variant, iLatin As Variant
Dim sText$, tText$, istr$
Dim istr2$, i!, j!, Doup As Boolean

        iUNI = Array(225, 224, 7843, 227, 7841, 226, 7845, 7847, 7849, 7851, 7853, 259, 7855, 7857, 7859, _
                     7861, 7863, 273, 233, 232, 7867, 7869, 7865, 234, 7871, 7873, 7875, 7877, 7879, 237, 236, 7881, 297, _
                     7883, 243, 242, 7887, 245, 7885, 244, 7889, 7891, 7893, 7895, 7897, 417, 7899, 7901, 7903, 7905, 7907, _
                     250, 249, 7911, 361, 7909, 432, 7913, 7915, 7917, 7919, 7921, 253, 7923, 7927, 7929, 7925, 193, 192, 7842, _
                     195, 7840, 194, 7844, 7846, 7848, 7850, 7852, 258, 7854, 7856, 7858, 7860, 7862, 272, 201, 200, 7866, 7868, _
                     7864, 202, 7870, 7872, 7874, 7876, 7878, 205, 204, 7880, 296, 7882, 211, 210, 7886, 213, 7884, 212, 7888, _
                     7890, 7892, 7894, 7896, 416, 7898, 7900, 7902, 7904, 7906, 218, 217, 7910, 360, 7908, 431, 7912, 7914, 7916, _
                     7918, 7920, 221, 7922, 7926, 7928, 7924)

        iTCVN = Array("¸", "µ", "¶", "·", "¹", "©", "Ê", "Ç", "È", "É", "Ë", "¨", "¾", "»", "¼", "½", "Æ", "®", "Ð", _
                      "Ì", "Î", "Ï", "Ñ", "ª", "Õ", "Ò", "Ó", "Ô", "Ö", "Ý", "×", "Ø", "Ü", "Þ", "ã", "ß", "á", "â", "ä", "«", "è", _
                      "å", "æ", "ç", "é", "¬", "í", "ê", "ë", "ì", "î", "ó", "ï", "ñ", "ò", "ô", "", "ø", "õ", "ö", "÷", "ù", "ý", _
                      "ú", "û", "ü", "þ", "¸", "µ", "¶", "·", "¹", "¢", "Ê", "Ç", "È", "É", "Ë", "¡", "¾", "»", "¼", "½", "Æ", "§", _
                      "Ð", "Ì", "Î", "Ï", "Ñ", "£", "Õ", "Ò", "Ó", "Ô", "Ö", "Ý", "×", "Ø", "Ü", "Þ", "ã", "ß", "á", "â", "ä", "¤", _
                      "è", "å", "æ", "ç", "é", "¥", "í", "ê", "ë", "ì", "î", "ó", "ï", "ñ", "ò", "ô", "¦", "ø", "õ", "ö", "÷", "ù", _
                      "ý", "ú", "û", "ü", "þ")

        iVNI = Array("aù", "aø", "aû", "aõ", "aï", "aâ", "aá", "aà", "aå", "aã", "aä", "aê", "aé", "aè", "aú", "aü", _
                     "aë", "ñ", "eù", "eø", "eû", "eõ", "eï", "eâ", "eá", "eà", "eå", "eã", "eä", "í", "ì", "æ", "ó", "ò", "où", "oø", _
                     "oû", "oõ", "oï", "oâ", "oá", "oà", "oå", "oã", "oä", "ô", "ôù", "ôø", "ôû", "ôõ", "ôï", "uù", "uø", "uû", "uõ", _
                     "uï", "ö", "öù", "öø", "öû", "öõ", "öï", "yù", "yø", "yû", "yõ", "î", "AÙ", "AØ", "AÛ", "AÕ", "AÏ", "AÂ", "AÁ", _
                     "AÀ", "AÅ", "AÃ", "AÄ", "AÊ", "AÉ", "AÈ", "AÚ", "AÜ", "AË", "Ñ", "EÙ", "EØ", "EÛ", "EÕ", "EÏ", "EÂ", "EÁ", "EÀ", _
                     "EÅ", "EÃ", "EÄ", "Í", "Ì", "Æ", "Ó", "Ò", "OÙ", "OØ", "OÛ", "OÕ", "OÏ", "OÂ", "OÁ", "OÀ", "OÅ", "OÃ", "OÄ", "Ô", _
                     "ÔÙ", "ÔØ", "ÔÛ", "ÔÕ", "ÔÏ", "UÙ", "UØ", "UÛ", "UÕ", "UÏ", "Ö", "ÖÙ", "ÖØ", "ÖÛ", "ÖÕ", "ÖÏ", "YÙ", "YØ", "YÛ", _
                     "YÕ", "Î")

        iLatin = Array("a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "a", "d", "e", "e", _
                       "e", "e", "e", "e", "e", "e", "e", "e", "e", "i", "i", "i", "i", "i", "o", "o", "o", "o", "o", "o", "o", "o", "o", _
                       "o", "o", "o", "o", "o", "o", "o", "o", "u", "u", "u", "u", "u", "u", "u", "u", "u", "u", "u", "y", "y", "y", "y", _
                       "y", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "D", "E", "E", "E", "E", _
                       "E", "E", "E", "E", "E", "E", "E", "I", "I", "I", "I", "I", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", "O", _
                       "O", "O", "O", "O", "O", "O", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "U", "Y", "Y", "Y", "Y", "Y")

        If Nguon = Dich Then CFont = Text: Exit Function

        sText = Text

        Select Case Nguon
                Case 1
                        For i = 1 To Len(sText)
                                istr = Mid(sText, i, 1)
                                If AscW(istr) >= 192 Then
                                        For j = 0 To UBound(iUNI)
                                                If AscW(istr) = iUNI(j) Then
                                                        Select Case Dich
                                                                Case 2
                                                                        istr = iTCVN(j)
                                                                Case 3
                                                                        istr = iVNI(j)
                                                                Case 4
                                                                        istr = iLatin(j)
                                                        End Select
                                                        Exit For
                                                End If
                                        Next
                                End If
                                CFont = CFont + istr
                        Next
                        
                Case 2
                        For i = 1 To Len(sText)
                                istr = Mid(sText, i, 1)
                                If AscW(istr) >= 161 And AscW(istr) <= 254 Then
                                        For j = 0 To UBound(iTCVN)
                                                If istr = iTCVN(j) Then
                                                        Select Case Dich
                                                                Case 1
                                                                        istr = ChrW(iUNI(j))
                                                                Case 3
                                                                        istr = iVNI(j)
                                                                Case 4
                                                                        istr = iLatin(j)
                                                        End Select
                                                        Exit For
                                                End If
                                        Next
                                End If
                                CFont = CFont + istr
                        Next
                        
                Case 3
                        For i = 1 To Len(sText)
                                Doup = False
                                If i < Len(sText) Then
                                        istr2 = Mid(sText, i + 1, 1)
                                        If istr2 Like "[ùøûõïâáàåãäêéèúüë]" = True _
                                           Or istr2 Like "[ÙØÛÕÏÂÁÀÅÃÄÊÉÈÚÜË]" = True Then
                                                Doup = True
                                        End If
                                End If

                                If Doup Then
                                        istr = Mid(sText, i, 2)
                                Else
                                        istr = Mid(sText, i, 1)
                                End If

                                For j = 0 To UBound(iVNI)
                                        If istr = iVNI(j) Then
                                                Select Case Dich
                                                        Case 1
                                                                istr = ChrW(iUNI(j))
                                                        Case 2
                                                                istr = iTCVN(j)
                                                        Case 4
                                                                istr = iLatin(j)
                                                End Select

                                                Exit For
                                        End If

                                Next
                                CFont = CFont + istr
                                If Len(sText) > 2 And Doup = True Then
                                        i = i + 1
                                ElseIf Len(sText) = 2 And Doup = True Then
                                        Exit Function
                                End If
                        Next
        End Select
End Function

Function ChangeText(Text$, Optional ChangeCase As Byte = 4) As String
'Haøm ñoåi kieåu chöõ ña naêng
Dim i%
        Select Case ChangeCase
                Case 0
                        ChangeText = Text
                Case 1
                        ChangeText = UCase(Text)
                Case 2
                        ChangeText = LCase(Text)
                Case 3
                        If Len(Text) < 1 Then Exit Function
                        Text = LCase(Text)
                        For i = 1 To Len(Text) - 2
                                If Mid(Text, i, 1) Like "[.;?!]" Then
                                        Mid(Text, i + 2, 1) = UCase(Mid(Text, i + 2, 1))
                                End If
                        Next i
                        ChangeText = UCase(Left(Text, 1)) + Mid(Text, 2, Len(Text) - 1)
                
                Case 4
                        If Len(Text) < 1 Then Exit Function
                        Text = LCase(Text)
                        For i = 1 To Len(Text) - 1
                                If Mid(Text, i, 1) = " " Or Mid(Text, i, 1) = "." Then
                                        Mid(Text, i + 1, 1) = UCase(Mid(Text, i + 1, 1))
                                End If
                        Next i
                        ChangeText = UCase(Left(Text, 1)) + Mid(Text, 2, Len(Text) - 1)
        End Select
End Function

Public Function ChuThuong(HA As String)
    Dim C As String, i!
        For i = 1 To Len(HA)
            C = Mid(HA, i, 1)
                Select Case C
                    Case "A": C = "a": Case "¡": C = "¨": Case "¢": C = "©": Case "£": C = "ª": Case "¤": C = "«"
                    Case "¥": C = "¬": Case "¦": C = "": Case "§": C = "®": Case "B": C = "b": Case "C": C = "c"
                    Case "D": C = "d": Case "E": C = "e": Case "F": C = "f": Case "G": C = "g": Case "H": C = "h"
                    Case "I": C = "i": Case "J": C = "j": Case "K": C = "k": Case "L": C = "l": Case "M": C = "m"
                    Case "N": C = "n": Case "O": C = "o": Case "P": C = "p": Case "Q": C = "q": Case "R": C = "r"
                    Case "S": C = "s": Case "T": C = "t": Case "U": C = "u": Case "V": C = "v": Case "W": C = "w"
                    Case "X": C = "x": Case "Y": C = "y": Case "Z": C = "z":        'Case "É": c = "é"
                End Select
            ChuThuong = ChuThuong + C
        Next i
End Function

Function VniTcvn3(ByVal sToConvert$) As String
'Haøm chuyeån töø font Vni sang TCVN3
Dim arrOutput() As Variant
Dim arrInput() As Variant
Dim sResult$, sTam$, i!, j!, bFound!
    If Len(sToConvert) <= 0 Then
        Exit Function
    End If
    arrInput = Array("aø", "aù", "aû", "aõ", "aï", "aê", "aè", "aé", "aú", "aü", "aë", "aâ", "aà", "aá", "aå", "aã", "aä", "ñ", "eø", "eù", "eû", "eõ", "eï", "eâ", "eà", "eá", "eå", "eã", "eä", "ì", "í", "æ", "ó", "ò", "oø", "où", "oû", "oõ", "oï", "oâ", "oà", "oá", "oå", "oã", "oä", "ô", "ôø", "ôù", "ôû", "ôõ", "ôï", "uø", "uù", "uû", "uõ", "uï", "ö", "öø", "öù", "öû", "öõ", "öï", "yø", "yù", "yû", "yõ", "î", "AØ", "AÙ", "AÛ", "AÕ", "AÏ", "AÊ", "AÈ", "AÉ", "AÚ", "AÜ", "AË", "AÂ", "AÀ", "AÁ", "AÅ", "AÃ", "AÄ", "Ñ", "EØ", "EÙ", "EÛ", "EÕ", "EÏ", "EÂ", "EÀ", "EÁ", "EÅ", "EÃ", "EÄ", "Ì", "Í", "Æ", "Ó", "Ò", "OØ", "OÙ", "OÛ", "OÕ", "OÏ", "OÂ", "OÀ", "OÁ", "OÅ", "OÃ", "OÄ", "Ô", "ÔØ", "ÔÙ", "ÔÛ", "ÔÕ", "ÔÏ", "UØ", "UÙ", "UÛ", "UÕ", "UÏ", "Ö", "ÖØ", "ÖÙ", "ÖÛ", "ÖÕ", "ÖÏ", "YØ", "YÙ", "YÛ", "YÕ", "Î")
    arrOutput = Array("µ", "¸", "¶", "·", "¹", "¨", "»", "¾", "¼", "½", "Æ", "©", "Ç", "Ê", "È", "É", "Ë", "®", "Ì", "Ð", "Î", "Ï", "Ñ", "ª", "Ò", "Õ", "Ó", "Ô", "Ö", "×", "Ý", "Ø", "Ü", "Þ", "ß", "ã", "á", "â", "ä", "«", "å", "è", "æ", "ç", "é", "¬", "ê", "í", "ë", "ì", "î", "ï", "ó", "ñ", "ò", "ô", "", "õ", "ø", "ö", "÷", "ù", "ú", "ý", "û", "ü", "þ", "µ", "¸", "¶", "·", "¹", "¡", "»", "¾", "¼", "½", "Æ", "¢", "Ç", "Ê", "È", "É", "Ë", "§", "Ì", "Ð", "Î", "Ï", "Ñ", "£", "Ò", "Õ", "Ó", "Ô", "Ö", "×", "Ý", "Ø", "Ü", "Þ", "ß", "ã", "á", "â", "ä", "¤", "å", "è", "æ", "ç", "é", "¥", "ê", "í", "ë", "ì", "î", "ï", "ó", "ñ", "ò", "ô", "¦", "õ", "ø", "ö", "÷", "ù", "ú", "ý", "û", "ü", "þ")
      
    bFound = 1
    sResult = CStr(sToConvert)
Restart:
    For i = bFound To Len(sResult)
        bFound = False
        For j = UBound(arrInput) To LBound(arrInput) Step -1
            If (StrComp(arrInput(j), Mid(sResult, i, Len(arrInput(j))), vbTextCompare) = 0) And (StrComp(Left(arrInput(j), 1), Mid(sResult, i, 1), vbBinaryCompare) = 0) Then
                sTam = Left(sResult, i - 1) & arrOutput(j) & Mid(sResult, i + Len(arrInput(j)))
                sResult = sTam
                bFound = i + Len(arrOutput(j))
                GoTo Restart
                Exit For
            End If
        Next j
    Next i
    VniTcvn3 = sResult
End Function

Function Tcvn3Vni(ByVal sToConvert$) As String
'Haøm chuyeån töø font TCVN3 sang Vni
Dim arrOutput() As Variant
Dim arrInput() As Variant
Dim sResult$, sTam$, i!, j!, bFound!
    If Len(sToConvert) <= 0 Then
        Exit Function
    End If
    arrInput = Array("µ", "¸", "¶", "·", "¹", "¨", "»", "¾", "¼", "½", "Æ", "©", "Ç", "Ê", "È", "É", "Ë", "®", "Ì", "Ð", "Î", "Ï", "Ñ", "ª", "Ò", "Õ", "Ó", "Ô", "Ö", "×", "Ý", "Ø", "Ü", "Þ", "ß", "ã", "á", "â", "ä", "«", "å", "è", "æ", "ç", "é", "¬", "ê", "í", "ë", "ì", "î", "ï", "ó", "ñ", "ò", "ô", "", "õ", "ø", "ö", "÷", "ù", "ú", "ý", "û", "ü", "þ", "µ", "¸", "¶", "·", "¹", "¡", "»", "¾", "¼", "½", "Æ", "¢", "Ç", "Ê", "È", "É", "Ë", "§", "Ì", "Ð", "Î", "Ï", "Ñ", "£", "Ò", "Õ", "Ó", "Ô", "Ö", "×", "Ý", "Ø", "Ü", "Þ", "ß", "ã", "á", "â", "ä", "¤", "å", "è", "æ", "ç", "é", "¥", "ê", "í", "ë", "ì", "î", "ï", "ó", "ñ", "ò", "ô", "¦", "õ", "ø", "ö", "÷", "ù", "ú", "ý", "û", "ü", "þ")
    arrOutput = Array("aø", "aù", "aû", "aõ", "aï", "aê", "aè", "aé", "aú", "aü", "aë", "aâ", "aà", "aá", "aå", "aã", "aä", "ñ", "eø", "eù", "eû", "eõ", "eï", "eâ", "eà", "eá", "eå", "eã", "eä", "ì", "í", "æ", "ó", "ò", "oø", "où", "oû", "oõ", "oï", "oâ", "oà", "oá", "oå", "oã", "oä", "ô", "ôø", "ôù", "ôû", "ôõ", "ôï", "uø", "uù", "uû", "uõ", "uï", "ö", "öø", "öù", "öû", "öõ", "öï", "yø", "yù", "yû", "yõ", "î", "AØ", "AÙ", "AÛ", "AÕ", "AÏ", "AÊ", "AÈ", "AÉ", "AÚ", "AÜ", "AË", "AÂ", "AÀ", "AÁ", "AÅ", "AÃ", "AÄ", "Ñ", "EØ", "EÙ", "EÛ", "EÕ", "EÏ", "EÂ", "EÀ", "EÁ", "EÅ", "EÃ", "EÄ", "Ì", "Í", "Æ", "Ó", "Ò", "OØ", "OÙ", "OÛ", "OÕ", "OÏ", "OÂ", "OÀ", "OÁ", "OÅ", "OÃ", "OÄ", "Ô", "ÔØ", "ÔÙ", "ÔÛ", "ÔÕ", "ÔÏ", "UØ", "UÙ", "UÛ", "UÕ", "UÏ", "Ö", "ÖØ", "ÖÙ", "ÖÛ", "ÖÕ", "ÖÏ", "YØ", "YÙ", "YÛ", "YÕ", "Î")
      
    bFound = 1
    sResult = CStr(sToConvert)
Restart:
    For i = bFound To Len(sResult)
        bFound = False
        For j = UBound(arrInput) To LBound(arrInput) Step -1
            If (StrComp(arrInput(j), Mid(sResult, i, Len(arrInput(j))), vbTextCompare) = 0) And (StrComp(Left(arrInput(j), 1), Mid(sResult, i, 1), vbBinaryCompare) = 0) Then
                sTam = Left(sResult, i - 1) & arrOutput(j) & Mid(sResult, i + Len(arrInput(j)))
                sResult = sTam
                bFound = i + Len(arrOutput(j))
                GoTo Restart
                Exit For
            End If
        Next j
    Next i
    Tcvn3Vni = sResult
End Function

Function UniVni(ByVal sToConvert$) As String
'Haøm chuyeån töø font Unicode sang Vni
Dim arrOutput() As Variant
Dim arrInput() As Variant
Dim sResult$, sTam$, i!, j!, bFound!
    If Len(sToConvert) <= 0 Then
        Exit Function
    End If
    arrInput = Array(ChrW$(224), ChrW$(225), ChrW$(7843), ChrW$(227), ChrW$(7841), ChrW$(259), ChrW$(7857), ChrW$(7855), ChrW$(7859), ChrW$(7861), ChrW$(7863), ChrW$(226), ChrW$(7847), ChrW$(7845), ChrW$(7849), ChrW$(7851), ChrW$(7853), ChrW$(273), ChrW$(232), ChrW$(233), ChrW$(7867), ChrW$(7869), ChrW$(7865), ChrW$(234), ChrW$(7873), ChrW$(7871), ChrW$(7875), ChrW$(7877), ChrW$(7879), ChrW$(236), ChrW$(237), ChrW$(7881), ChrW$(297), ChrW$(7883), ChrW$(242), ChrW$(243), ChrW$(7887), ChrW$(245), ChrW$(7885), ChrW$(244), ChrW$(7891), ChrW$(7889), ChrW$(7893), _
                ChrW$(7895), ChrW$(7897), ChrW$(417), ChrW$(7901), ChrW$(7899), ChrW$(7903), ChrW$(7905), ChrW$(7907), ChrW$(249), ChrW$(250), ChrW$(7911), ChrW$(361), ChrW$(7909), ChrW$(432), ChrW$(7915), ChrW$(7913), ChrW$(7917), ChrW$(7919), ChrW$(7921), ChrW$(7923), ChrW$(253), ChrW$(7927), ChrW$(7929), ChrW$(7925), ChrW$(192), ChrW$(193), ChrW$(7842), ChrW$(195), ChrW$(7840), ChrW$(258), ChrW$(7856), ChrW$(7854), ChrW$(7858), ChrW$(7860), ChrW$(7862), ChrW$(194), ChrW$(7846), ChrW$(7844), ChrW$(7848), ChrW$(7850), ChrW$(7852), ChrW$(272), ChrW$(200), ChrW$(201), ChrW$(7866), _
                ChrW$(7868), ChrW$(7864), ChrW$(202), ChrW$(7872), ChrW$(7870), ChrW$(7874), ChrW$(7876), ChrW$(7878), ChrW$(204), ChrW$(205), ChrW$(7880), ChrW$(296), ChrW$(7882), ChrW$(210), ChrW$(211), ChrW$(7886), ChrW$(213), ChrW$(7884), ChrW$(212), ChrW$(7890), ChrW$(7888), ChrW$(7892), ChrW$(7894), ChrW$(7896), ChrW$(416), ChrW$(7900), ChrW$(7898), ChrW$(7902), ChrW$(7904), ChrW$(7906), ChrW$(217), ChrW$(218), ChrW$(7910), ChrW$(360), ChrW$(7908), ChrW$(431), ChrW$(7914), ChrW$(7912), ChrW$(7916), ChrW$(7918), ChrW$(7920), ChrW$(7922), ChrW$(221), ChrW$(7926), ChrW$(7928), ChrW$(7924))
    arrOutput = Array("aø", "aù", "aû", "aõ", "aï", "aê", "aè", "aé", "aú", "aü", "aë", "aâ", "aà", "aá", "aå", "aã", "aä", "ñ", "eø", "eù", "eû", "eõ", "eï", "eâ", "eà", "eá", "eå", "eã", "eä", "ì", "í", "æ", "ó", "ò", "oø", "où", "oû", "oõ", "oï", "oâ", "oà", "oá", "oå", "oã", "oä", "ô", "ôø", "ôù", "ôû", "ôõ", "ôï", "uø", "uù", "uû", "uõ", "uï", "ö", "öø", "öù", "öû", "öõ", "öï", "yø", "yù", "yû", "yõ", "î", "AØ", "AÙ", "AÛ", "AÕ", "AÏ", "AÊ", "AÈ", "AÉ", "AÚ", "AÜ", "AË", "AÂ", "AÀ", "AÁ", "AÅ", "AÃ", "AÄ", "Ñ", "EØ", "EÙ", "EÛ", "EÕ", "EÏ", "EÂ", "EÀ", "EÁ", "EÅ", "EÃ", "EÄ", "Ì", "Í", "Æ", "Ó", "Ò", "OØ", "OÙ", "OÛ", "OÕ", "OÏ", "OÂ", "OÀ", "OÁ", "OÅ", "OÃ", "OÄ", "Ô", "ÔØ", "ÔÙ", "ÔÛ", "ÔÕ", "ÔÏ", "UØ", "UÙ", "UÛ", "UÕ", "UÏ", "Ö", "ÖØ", "ÖÙ", "ÖÛ", "ÖÕ", "ÖÏ", "YØ", "YÙ", "YÛ", "YÕ", "Î")
      
    bFound = 1
    sResult = CStr(sToConvert)
Restart:
    For i = bFound To Len(sResult)
        bFound = False
        For j = UBound(arrInput) To LBound(arrInput) Step -1
            If (StrComp(arrInput(j), Mid(sResult, i, Len(arrInput(j))), vbTextCompare) = 0) And (StrComp(Left(arrInput(j), 1), Mid(sResult, i, 1), vbBinaryCompare) = 0) Then
                sTam = Left(sResult, i - 1) & arrOutput(j) & Mid(sResult, i + Len(arrInput(j)))
                sResult = sTam
                bFound = i + Len(arrOutput(j))
                GoTo Restart
                Exit For
            End If
        Next j
    Next i
    UniVni = sResult
End Function

Function VniUni(ByVal sToConvert$) As String
'Haøm chuyeån töø font Vni sang Unicode
Dim arrOutput() As Variant
Dim arrInput() As Variant
Dim sResult$, sTam$, i!, j!, bFound!
    If Len(sToConvert) <= 0 Then
        Exit Function
    End If
    arrInput = Array("aø", "aù", "aû", "aõ", "aï", "aê", "aè", "aé", "aú", "aü", "aë", "aâ", "aà", "aá", "aå", "aã", "aä", "ñ", "eø", "eù", "eû", "eõ", "eï", "eâ", "eà", "eá", "eå", "eã", "eä", "ì", "í", "æ", "ó", "ò", "oø", "où", "oû", "oõ", "oï", "oâ", "oà", "oá", "oå", "oã", "oä", "ô", "ôø", "ôù", "ôû", "ôõ", "ôï", "uø", "uù", "uû", "uõ", "uï", "ö", "öø", "öù", "öû", "öõ", "öï", "yø", "yù", "yû", "yõ", "î", "AØ", "AÙ", "AÛ", "AÕ", "AÏ", "AÊ", "AÈ", "AÉ", "AÚ", "AÜ", "AË", "AÂ", "AÀ", "AÁ", "AÅ", "AÃ", "AÄ", "Ñ", "EØ", "EÙ", "EÛ", "EÕ", "EÏ", "EÂ", "EÀ", "EÁ", "EÅ", "EÃ", "EÄ", "Ì", "Í", "Æ", "Ó", "Ò", "OØ", "OÙ", "OÛ", "OÕ", "OÏ", "OÂ", "OÀ", "OÁ", "OÅ", "OÃ", "OÄ", "Ô", "ÔØ", "ÔÙ", "ÔÛ", "ÔÕ", "ÔÏ", "UØ", "UÙ", "UÛ", "UÕ", "UÏ", "Ö", "ÖØ", "ÖÙ", "ÖÛ", "ÖÕ", "ÖÏ", "YØ", "YÙ", "YÛ", "YÕ", "Î")
    arrOutput = Array(ChrW$(224), ChrW$(225), ChrW$(7843), ChrW$(227), ChrW$(7841), ChrW$(259), ChrW$(7857), ChrW$(7855), ChrW$(7859), ChrW$(7861), ChrW$(7863), ChrW$(226), ChrW$(7847), ChrW$(7845), ChrW$(7849), ChrW$(7851), ChrW$(7853), ChrW$(273), ChrW$(232), ChrW$(233), ChrW$(7867), ChrW$(7869), ChrW$(7865), ChrW$(234), ChrW$(7873), ChrW$(7871), ChrW$(7875), ChrW$(7877), ChrW$(7879), ChrW$(236), ChrW$(237), ChrW$(7881), ChrW$(297), ChrW$(7883), ChrW$(242), ChrW$(243), ChrW$(7887), ChrW$(245), ChrW$(7885), ChrW$(244), ChrW$(7891), ChrW$(7889), ChrW$(7893), _
                ChrW$(7895), ChrW$(7897), ChrW$(417), ChrW$(7901), ChrW$(7899), ChrW$(7903), ChrW$(7905), ChrW$(7907), ChrW$(249), ChrW$(250), ChrW$(7911), ChrW$(361), ChrW$(7909), ChrW$(432), ChrW$(7915), ChrW$(7913), ChrW$(7917), ChrW$(7919), ChrW$(7921), ChrW$(7923), ChrW$(253), ChrW$(7927), ChrW$(7929), ChrW$(7925), ChrW$(192), ChrW$(193), ChrW$(7842), ChrW$(195), ChrW$(7840), ChrW$(258), ChrW$(7856), ChrW$(7854), ChrW$(7858), ChrW$(7860), ChrW$(7862), ChrW$(194), ChrW$(7846), ChrW$(7844), ChrW$(7848), ChrW$(7850), ChrW$(7852), ChrW$(272), ChrW$(200), ChrW$(201), ChrW$(7866), _
                ChrW$(7868), ChrW$(7864), ChrW$(202), ChrW$(7872), ChrW$(7870), ChrW$(7874), ChrW$(7876), ChrW$(7878), ChrW$(204), ChrW$(205), ChrW$(7880), ChrW$(296), ChrW$(7882), ChrW$(210), ChrW$(211), ChrW$(7886), ChrW$(213), ChrW$(7884), ChrW$(212), ChrW$(7890), ChrW$(7888), ChrW$(7892), ChrW$(7894), ChrW$(7896), ChrW$(416), ChrW$(7900), ChrW$(7898), ChrW$(7902), ChrW$(7904), ChrW$(7906), ChrW$(217), ChrW$(218), ChrW$(7910), ChrW$(360), ChrW$(7908), ChrW$(431), ChrW$(7914), ChrW$(7912), ChrW$(7916), ChrW$(7918), ChrW$(7920), ChrW$(7922), ChrW$(221), ChrW$(7926), ChrW$(7928), ChrW$(7924))
      
    bFound = 1
    sResult = CStr(sToConvert)
Restart:
    For i = bFound To Len(sResult)
        bFound = False
        For j = UBound(arrInput) To LBound(arrInput) Step -1
            If (StrComp(arrInput(j), Mid(sResult, i, Len(arrInput(j))), vbTextCompare) = 0) And (StrComp(Left(arrInput(j), 1), Mid(sResult, i, 1), vbBinaryCompare) = 0) Then
                sTam = Left(sResult, i - 1) & arrOutput(j) & Mid(sResult, i + Len(arrInput(j)))
                sResult = sTam
                bFound = i + Len(arrOutput(j))
                GoTo Restart
                Exit For
            End If
        Next j
    Next i
    VniUni = sResult
End Function

Function UniTcvn3(ByVal sToConvert$) As String
'Haøm chuyeån töø font Unicode sang TCVN3
Dim arrOutput() As Variant
Dim arrInput() As Variant
Dim sResult$, sTam$, i!, j!, bFound!
    If Len(sToConvert) <= 0 Then
        Exit Function
    End If
    arrInput = Array(ChrW$(224), ChrW$(225), ChrW$(7843), ChrW$(227), ChrW$(7841), ChrW$(259), ChrW$(7857), ChrW$(7855), ChrW$(7859), ChrW$(7861), ChrW$(7863), ChrW$(226), ChrW$(7847), ChrW$(7845), ChrW$(7849), ChrW$(7851), ChrW$(7853), ChrW$(273), ChrW$(232), ChrW$(233), ChrW$(7867), ChrW$(7869), ChrW$(7865), ChrW$(234), ChrW$(7873), ChrW$(7871), ChrW$(7875), ChrW$(7877), ChrW$(7879), ChrW$(236), ChrW$(237), ChrW$(7881), ChrW$(297), ChrW$(7883), ChrW$(242), ChrW$(243), ChrW$(7887), ChrW$(245), ChrW$(7885), ChrW$(244), ChrW$(7891), ChrW$(7889), ChrW$(7893), _
                ChrW$(7895), ChrW$(7897), ChrW$(417), ChrW$(7901), ChrW$(7899), ChrW$(7903), ChrW$(7905), ChrW$(7907), ChrW$(249), ChrW$(250), ChrW$(7911), ChrW$(361), ChrW$(7909), ChrW$(432), ChrW$(7915), ChrW$(7913), ChrW$(7917), ChrW$(7919), ChrW$(7921), ChrW$(7923), ChrW$(253), ChrW$(7927), ChrW$(7929), ChrW$(7925), ChrW$(192), ChrW$(193), ChrW$(7842), ChrW$(195), ChrW$(7840), ChrW$(258), ChrW$(7856), ChrW$(7854), ChrW$(7858), ChrW$(7860), ChrW$(7862), ChrW$(194), ChrW$(7846), ChrW$(7844), ChrW$(7848), ChrW$(7850), ChrW$(7852), ChrW$(272), ChrW$(200), ChrW$(201), ChrW$(7866), _
                ChrW$(7868), ChrW$(7864), ChrW$(202), ChrW$(7872), ChrW$(7870), ChrW$(7874), ChrW$(7876), ChrW$(7878), ChrW$(204), ChrW$(205), ChrW$(7880), ChrW$(296), ChrW$(7882), ChrW$(210), ChrW$(211), ChrW$(7886), ChrW$(213), ChrW$(7884), ChrW$(212), ChrW$(7890), ChrW$(7888), ChrW$(7892), ChrW$(7894), ChrW$(7896), ChrW$(416), ChrW$(7900), ChrW$(7898), ChrW$(7902), ChrW$(7904), ChrW$(7906), ChrW$(217), ChrW$(218), ChrW$(7910), ChrW$(360), ChrW$(7908), ChrW$(431), ChrW$(7914), ChrW$(7912), ChrW$(7916), ChrW$(7918), ChrW$(7920), ChrW$(7922), ChrW$(221), ChrW$(7926), ChrW$(7928), ChrW$(7924))
    arrOutput = Array("µ", "¸", "¶", "·", "¹", "¨", "»", "¾", "¼", "½", "Æ", "©", "Ç", "Ê", "È", "É", "Ë", "®", "Ì", "Ð", "Î", "Ï", "Ñ", "ª", "Ò", "Õ", "Ó", "Ô", "Ö", "×", "Ý", "Ø", "Ü", "Þ", "ß", "ã", "á", "â", "ä", "«", "å", "è", "æ", "ç", "é", "¬", "ê", "í", "ë", "ì", "î", "ï", "ó", "ñ", "ò", "ô", "", "õ", "ø", "ö", "÷", "ù", "ú", "ý", "û", "ü", "þ", "µ", "¸", "¶", "·", "¹", "¡", "»", "¾", "¼", "½", "Æ", "¢", "Ç", "Ê", "È", "É", "Ë", "§", "Ì", "Ð", "Î", "Ï", "Ñ", "£", "Ò", "Õ", "Ó", "Ô", "Ö", "×", "Ý", "Ø", "Ü", "Þ", "ß", "ã", "á", "â", "ä", "¤", "å", "è", "æ", "ç", "é", "¥", "ê", "í", "ë", "ì", "î", "ï", "ó", "ñ", "ò", "ô", "¦", "õ", "ø", "ö", "÷", "ù", "ú", "ý", "û", "ü", "þ")
      
    bFound = 1
    sResult = CStr(sToConvert)
Restart:
    For i = bFound To Len(sResult)
        bFound = False
        For j = UBound(arrInput) To LBound(arrInput) Step -1
            If (StrComp(arrInput(j), Mid(sResult, i, Len(arrInput(j))), vbTextCompare) = 0) And (StrComp(Left(arrInput(j), 1), Mid(sResult, i, 1), vbBinaryCompare) = 0) Then
                sTam = Left(sResult, i - 1) & arrOutput(j) & Mid(sResult, i + Len(arrInput(j)))
                sResult = sTam
                bFound = i + Len(arrOutput(j))
                GoTo Restart
                Exit For
            End If
        Next j
    Next i
    UniTcvn3 = sResult
End Function

Function Tcvn3Uni(ByVal sToConvert$) As String
'Haøm chuyeån töø font TCVN3 sang Unicode
Dim i&, arrUNI() As String, sUni$, arrInput$, UNI$, arrOutput$
arrInput = "¸µ¶·¹¨¾»¼½Æ©ÊÇÈÉË??ÎÏѪ??ÓÔÖ?×ØÜ??ßáâä«èåæçé¬íêë?îóïñ?ôø?ö÷ù?úûü?®¸µ¶·¹¡¾»¼½Æ¢ÊÇÈÉË??ÎÏÑ£??ÓÔÖ?×ØÜ??ßáâä¤èåæçé¥íêë?îóïñ?ô¦ø?ö÷ù?úûü?§"
arrOutput = "225,224,7843,227,7841,259,7855,7857,7859,7861,7863,226,7845,7847,7849,7851,7853,233,232,7867,7869,7865,234,7871,7873,7875,7877,7879,237,236,7881,297,7883,243,242,7887,245,7885,244,7889,7891,7893,7895,7897,417,7899,7901,7903,7905,7907,250,249,7911,361,7909,432,7913,7915,7917,7919,7921,253,7923,7927,7929,7925,273,225,224,7843,227,7841,258,7855,7857,7859,7861,7863,194,7845,7847,7849,7851,7853,233,232,7867,7869,7865,202,7871,7873,7875,7877,7879,237,236,7881,297,7883,243,242,7887,245,7885,212,7889,7891,7893,7895,7897,416,7899,7901,7903,7905,7907,250,249,7911,361,7909,431,7913,7915,7917,7919,7921,253,7923,7927,7929,7925,272"
arrUNI = Split(arrOutput, ",")
For i = 1 To Len(sToConvert)
If InStr(arrInput, Mid(sToConvert, i, 1)) > 0 Then
 sUni = sUni & ChrW(arrUNI(InStr(arrInput, Mid(sToConvert, i, 1)) - 1))
 Else
 sUni = sUni & Mid(sToConvert, i, 1)
 End If
Next
Tcvn3Uni = sUni
End Function

Function Tcvn3Uni_2(Text$) As String
        Dim iUNI As Variant, iTCVN As Variant, sText$
        Dim i!, j!, istr$

        iUNI = Array(225, 224, 7843, 227, 7841, 226, 7845, 7847, 7849, 7851, 7853, 259, 7855, 7857, 7859, _
                     7861, 7863, 273, 233, 232, 7867, 7869, 7865, 234, 7871, 7873, 7875, 7877, 7879, 237, 236, 7881, 297, _
                     7883, 243, 242, 7887, 245, 7885, 244, 7889, 7891, 7893, 7895, 7897, 417, 7899, 7901, 7903, 7905, 7907, _
                     250, 249, 7911, 361, 7909, 432, 7913, 7915, 7917, 7919, 7921, 253, 7923, 7927, 7929, 7925, 193, 192, 7842, _
                     195, 7840, 194, 7844, 7846, 7848, 7850, 7852, 258, 7854, 7856, 7858, 7860, 7862, 272, 201, 200, 7866, 7868, _
                     7864, 202, 7870, 7872, 7874, 7876, 7878, 205, 204, 7880, 296, 7882, 211, 210, 7886, 213, 7884, 212, 7888, _
                     7890, 7892, 7894, 7896, 416, 7898, 7900, 7902, 7904, 7906, 218, 217, 7910, 360, 7908, 431, 7912, 7914, 7916, _
                     7918, 7920, 221, 7922, 7926, 7928, 7924)

        iTCVN = Array("¸", "µ", "¶", "·", "¹", "©", "Ê", "Ç", "È", "É", "Ë", "¨", "¾", "»", "¼", "½", "Æ", "®", "Ð", _
                      "Ì", "Î", "Ï", "Ñ", "ª", "Õ", "Ò", "Ó", "Ô", "Ö", "Ý", "×", "Ø", "Ü", "Þ", "ã", "ß", "á", "â", "ä", "«", "è", _
                      "å", "æ", "ç", "é", "¬", "í", "ê", "ë", "ì", "î", "ó", "ï", "ñ", "ò", "ô", "", "ø", "õ", "ö", "÷", "ù", "ý", _
                      "ú", "û", "ü", "þ", "¸", "µ", "¶", "·", "¹", "¢", "Ê", "Ç", "È", "É", "Ë", "¡", "¾", "»", "¼", "½", "Æ", "§", _
                      "Ð", "Ì", "Î", "Ï", "Ñ", "£", "Õ", "Ò", "Ó", "Ô", "Ö", "Ý", "×", "Ø", "Ü", "Þ", "ã", "ß", "á", "â", "ä", "¤", _
                      "è", "å", "æ", "ç", "é", "¥", "í", "ê", "ë", "ì", "î", "ó", "ï", "ñ", "ò", "ô", "¦", "ø", "õ", "ö", "÷", "ù", _
                      "ý", "ú", "û", "ü", "þ")

        sText = Text

        For i = 1 To Len(sText)
                istr = Mid(sText, i, 1)
                If AscW(istr) >= 161 And AscW(istr) <= 254 Then
                        For j = 0 To UBound(iTCVN)
                                If istr = iTCVN(j) Then istr = ChrW(iUNI(j)): Exit For
                        Next
                End If
                Tcvn3Uni_2 = Tcvn3Uni_2 + istr
        Next
End Function

Function UniVba(TxtUni As String) As String
'Chuyeån Unicode thaønh Charw code
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 If
End Function

Sub FontList(Obj As Object)
'Taïo danh saùch font chöõ cho combobox
Dim Wd As Object, FontID
    Set Wd = CreateObject("Word.Application")
        For Each FontID In Wd.FontNames
            Obj.AddItem FontID
        Next
    Wd.Quit
    Set Wd = Nothing
End Sub
 
Đoạn code này để ứng dụng làm gì thế bạn.
"Liên quan đến font" hơi mơ hồ, mình gà mờ không hiểu.

Mình muốn chuyển 1 đoạn tiếng việt có dấu sang không dấu thì xài sao. Có chuyển được ngược lại từ không dấu sang có dấu không?
 
Upvote 0
Đoạn code này để ứng dụng làm gì thế bạn.
"Liên quan đến font" hơi mơ hồ, mình gà mờ không hiểu.

Mình muốn chuyển 1 đoạn tiếng việt có dấu sang không dấu thì xài sao. Có chuyển được ngược lại từ không dấu sang có dấu không?
Có thể chuyển tiếng Việt có dấu sang không dấu được nhé bạn, còn ngược lại thì mình cũng đang học móc mà chưa có cách giải quyết.
 
Upvote 0
Có một phương thức duy nhất có thể chuyển mã, và dịch ngược được toàn bộ các Font mã hiện có bạn tìm thấy chưa?
 
Upvote 0
Đoạn code này để ứng dụng làm gì thế bạn.
"Liên quan đến font" hơi mơ hồ, mình gà mờ không hiểu.

Mình muốn chuyển 1 đoạn tiếng việt có dấu sang không dấu thì xài sao. Có chuyển được ngược lại từ không dấu sang có dấu không?
Code Bỏ dấu

Mã:
Function BoDau(Text As String) As String
Dim AsciiDict As Object
Set AsciiDict = CreateObject("scripting.dictionary")
AsciiDict(192) = "A"
AsciiDict(193) = "A"
AsciiDict(194) = "A"
AsciiDict(195) = "A"
AsciiDict(196) = "A"
AsciiDict(197) = "A"
AsciiDict(199) = "C"
AsciiDict(200) = "E"
AsciiDict(201) = "E"
AsciiDict(202) = "E"
AsciiDict(203) = "E"
AsciiDict(204) = "I"
AsciiDict(205) = "I"
AsciiDict(206) = "I"
AsciiDict(207) = "I"
AsciiDict(208) = "D"
AsciiDict(209) = "N"
AsciiDict(210) = "O"
AsciiDict(211) = "O"
AsciiDict(212) = "O"
AsciiDict(213) = "O"
AsciiDict(214) = "O"
AsciiDict(217) = "U"
AsciiDict(218) = "U"
AsciiDict(219) = "U"
AsciiDict(220) = "U"
AsciiDict(221) = "Y"
AsciiDict(224) = "a"
AsciiDict(225) = "a"
AsciiDict(226) = "a"
AsciiDict(227) = "a"
AsciiDict(228) = "a"
AsciiDict(229) = "a"
AsciiDict(231) = "c"
AsciiDict(232) = "e"
AsciiDict(233) = "e"
AsciiDict(234) = "e"
AsciiDict(235) = "e"
AsciiDict(236) = "i"
AsciiDict(237) = "i"
AsciiDict(238) = "i"
AsciiDict(239) = "i"
AsciiDict(240) = "d"
AsciiDict(241) = "n"
AsciiDict(242) = "o"
AsciiDict(243) = "o"
AsciiDict(244) = "o"
AsciiDict(245) = "o"
AsciiDict(246) = "o"
AsciiDict(249) = "u"
AsciiDict(250) = "u"
AsciiDict(251) = "u"
AsciiDict(252) = "u"
AsciiDict(253) = "y"
AsciiDict(255) = "y"
AsciiDict(352) = "S"
AsciiDict(353) = "s"
AsciiDict(376) = "Y"
AsciiDict(381) = "Z"
AsciiDict(382) = "z"
AsciiDict(258) = "A"
AsciiDict(259) = "a"
AsciiDict(272) = "D"
AsciiDict(273) = "d"
AsciiDict(296) = "I"
AsciiDict(297) = "i"
AsciiDict(360) = "U"
AsciiDict(361) = "u"
AsciiDict(416) = "O"
AsciiDict(417) = "o"
AsciiDict(431) = "U"
AsciiDict(432) = "u"
AsciiDict(7840) = "A"
AsciiDict(7841) = "a"
AsciiDict(7842) = "A"
AsciiDict(7843) = "a"
AsciiDict(7844) = "A"
AsciiDict(7845) = "a"
AsciiDict(7846) = "A"
AsciiDict(7847) = "a"
AsciiDict(7848) = "A"
AsciiDict(7849) = "a"
AsciiDict(7850) = "A"
AsciiDict(7851) = "a"
AsciiDict(7852) = "A"
AsciiDict(7853) = "a"
AsciiDict(7854) = "A"
AsciiDict(7855) = "a"
AsciiDict(7856) = "A"
AsciiDict(7857) = "a"
AsciiDict(7858) = "A"
AsciiDict(7859) = "a"
AsciiDict(7860) = "A"
AsciiDict(7861) = "a"
AsciiDict(7862) = "A"
AsciiDict(7863) = "a"
AsciiDict(7864) = "E"
AsciiDict(7865) = "e"
AsciiDict(7866) = "E"
AsciiDict(7867) = "e"
AsciiDict(7868) = "E"
AsciiDict(7869) = "e"
AsciiDict(7870) = "E"
AsciiDict(7871) = "e"
AsciiDict(7872) = "E"
AsciiDict(7873) = "e"
AsciiDict(7874) = "E"
AsciiDict(7875) = "e"
AsciiDict(7876) = "E"
AsciiDict(7877) = "e"
AsciiDict(7878) = "E"
AsciiDict(7879) = "e"
AsciiDict(7880) = "I"
AsciiDict(7881) = "i"
AsciiDict(7882) = "I"
AsciiDict(7883) = "i"
AsciiDict(7884) = "O"
AsciiDict(7885) = "o"
AsciiDict(7886) = "O"
AsciiDict(7887) = "o"
AsciiDict(7888) = "O"
AsciiDict(7889) = "o"
AsciiDict(7890) = "O"
AsciiDict(7891) = "o"
AsciiDict(7892) = "O"
AsciiDict(7893) = "o"
AsciiDict(7894) = "O"
AsciiDict(7895) = "o"
AsciiDict(7896) = "O"
AsciiDict(7897) = "o"
AsciiDict(7898) = "O"
AsciiDict(7899) = "o"
AsciiDict(7900) = "O"
AsciiDict(7901) = "o"
AsciiDict(7902) = "O"
AsciiDict(7903) = "o"
AsciiDict(7904) = "O"
AsciiDict(7905) = "o"
AsciiDict(7906) = "O"
AsciiDict(7907) = "o"
AsciiDict(7908) = "U"
AsciiDict(7909) = "u"
AsciiDict(7910) = "U"
AsciiDict(7911) = "u"
AsciiDict(7912) = "U"
AsciiDict(7913) = "u"
AsciiDict(7914) = "U"
AsciiDict(7915) = "u"
AsciiDict(7916) = "U"
AsciiDict(7917) = "u"
AsciiDict(7918) = "U"
AsciiDict(7919) = "u"
AsciiDict(7920) = "U"
AsciiDict(7921) = "u"
AsciiDict(7922) = "Y"
AsciiDict(7923) = "y"
AsciiDict(7924) = "Y"
AsciiDict(7925) = "y"
AsciiDict(7926) = "Y"
AsciiDict(7927) = "y"
AsciiDict(7928) = "Y"
AsciiDict(7929) = "y"
AsciiDict(8363) = "d"
Text = Trim(Text)
If Text = "" Then Exit Function
Dim Char As String, _
NormalizedText As String, _
UnicodeCharCode As Long, _
i As Long
'Remove accent marks (diacritics) from text
For i = 1 To Len(Text)
Char = Mid(Text, i, 1)
UnicodeCharCode = AscW(Char)
If (UnicodeCharCode < 0) Then
'See http://support.microsoft.com/kb/272138
UnicodeCharCode = 65536 + UnicodeCharCode
End If
If AsciiDict.Exists(UnicodeCharCode) Then
NormalizedText = NormalizedText & AsciiDict.Item(UnicodeCharCode)
Else
NormalizedText = NormalizedText & Char
End If
Next
BoDau = NormalizedText
End Function
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom