Hỏi: Chuyển đổi chữ thành ký tự!

Liên hệ QC
Lỗi do thiếu một vài ký tự như chữ "đ" và các dấu "."; "," ...
Nếu cố định là font Time n roman thì sửa code được.

Với fon khác chắc lập bảng nguồn khác thì hơi lâu
Sửa lại đoạn code góp vui, kiểm tra trong file thấy ổn nhưng cũng không biết có đạt được hết yêu cầu khác hay không.
PHP:
Public Sub Chuyen_Ve_Ky_Tu()
Dim Nguon, DL, Tam, kq(), r As Long, rw As Long, c As Long

Nguon = Sheet1.UsedRange
DL = Sheet2.Range("B4").CurrentRegion
ReDim kq(1 To UBound(DL), 1 To 1)

With CreateObject("vbscript.regexp")
.Global = True
.Pattern = "\s+"
'Thêm vòng lặp thay thế các ký tự dấu cách, xuống dòng, tab... thành 1 ký tự trắng'
For r = 1 To UBound(DL)
DL(r, 1) = Replace(DL(r, 1), Chr(160), " ")
DL(r, 1) = .Replace(DL(r, 1), " ")
Next r

.Pattern = "[^a-zA-Z]+"
For r = 1 To UBound(DL)
Tam = Split(DL(r, 1), " ")

For c = 0 To UBound(Tam)
If .test(Tam(c)) Then
For rw = 1 To UBound(Nguon)
If InStr(Tam(c), Nguon(rw, 1)) Then
Tam(c) = Replace(Tam(c), Nguon(rw, 1), Nguon(rw, 2))
Tam(c) = Tam(c) & Nguon(rw, 3)
End If
Next rw
End If

'Chuyển các ký tự ",;..." cuối từ về vị trí như ban đầu, các vị trí khác để nguyên'
If .test(Tam(c)) Then
rw = .Execute(Tam(c)).Count - 1
If .Execute(Tam(c))(rw).firstindex = Len(Tam(c)) - 2 Then
Tam(c) = Replace(Tam(c), .Execute(Tam(c))(rw), "") & .Execute(Tam(c))(rw)
End If
End If
Next c

kq(r, 1) = Join(Tam, " ")
Next r
End With

Sheet2.Range("I4", Sheet2.Range("I4").End(xlDown)).ClearContents
Sheet2.Range("I4").Resize(UBound(kq), 1) = kq
End Sub
---
Bổ sung thêm chữ đ, Đ vào bảng mã
 

File đính kèm

Lần chỉnh sửa cuối:
Bổ sung thêm chữ đ, Đ vào bảng mã

Mình thêm chữ "đ" và các dấu vào bảng bên Sheet 1 cũng được mà bạn. Vấn đề mình muốn hỏi là nếu chữ của mình nhiều quá 1 trang Word hoặc chỉ cần nửa trang Word thôi là biên dịch bị lỗi. Lỗi: Run-time error '1004': Application-defined or object-defined error. Lỗi dòng: "Sheet2.Range("I4").Resize(UBound(kq), 1) = kq".

Có cách nào khắc phục để xử lý được văn bản dài không bạn?
 
Góp vui cho bạn một hàm đơn giản (áp dụng cho Bảng mã Unicode và "biên dịch" ra kiểu gõ Telex)
[GPECODE=vb]
Public Function Find_Replace_Char(InputString As String) As String
Dim Uni, RepChr
Dim i As Integer


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


RepChr = Array("AF", "AS", "AA", "AW", "EF", "ES", "EE", "IF", "IS", "OF", "OS", "OO", "OX", "UF", _
"US", "YS", "af", "as", "aa", "ax", "ef", "es", "ee", "if", "is", "of", "os", "oo", _
"ox", "uf", "us", "ys", "AW", "aw", "DD", "dd", "IX", "ix", "UX", "ux", "OW", "ow", _
"UW", "uw", "AJ", "aj", "AR", "ar", "AAS", "aas", "AAF", "aaf", "AAR", "aar", "AAX", _
"aax", "AAJ", "aaj", "AWS", "aws", "AWF", "awf", "AWR", "awr", "AWX", "awx", "AWJ", _
"awj", "EJ", "ej", "ER", "er", "EX", "ex", "EES", "ees", "EEF", "eef", "EER", "eer", _
"EEX", "eex", "EEJ", "eej", "IIR", "iir", "IIJ", "iij", "OJ", "oj", "OR", "or", "OOS", _
"oos", "OOF", "oof", "OOR", "oor", "OOX", "oox", "OOJ", "ooj", "OWS", "ows", "OWF", _
"owf", "OWR", "owr", "OWX", "owx", "OWJ", "owj", "UJ", "uj", "UR", "ur", "UWS", "uws", _
"UWF", "uwf", "UWR", "uwr", "UWX", "uwx", "UWJ", "uwj", "YF", "ys", "YJ", "yj", "YR", _
"yr", "YX", "yx")


Find_Replace_Char = InputString
For i = 0 To 133
Find_Replace_Char = Replace(Find_Replace_Char, ChrW(Uni(i)), RepChr(i))
Next i


End Function[/GPECODE]
 
Lần chỉnh sửa cuối:
Góp vui cho bạn một hàm đơn giản (áp dụng cho Bảng mã Unicode và "biên dịch" ra kiểu gõ Telex)
[GPECODE=vb]Public Function Find_Replace_Char(InputString As String) As String
Dim Uni, RepChr
Dim i As Integer


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


RepChr = Array("AF", "AS", "AA", "AW", "EF", "ES", "EE", "IF", "IS", "OF", "OS", "OO", "OX", "UF", _
"US", "YS", "af", "as", "aa", "ax", "ef", "es", "ee", "if", "is", "of", "os", "oo", _
"ox", "uf", "us", "ys", "AW", "aw", "DD", "dd", "IX", "ix", "UX", "ux", "OW", "ow", _
"UW", "uw", "AJ", "aj", "AR", "ar", "AAS", "aas", "AAF", "aaf", "AAR", "aar", "AAX", _
"aax", "AAJ", "aaj", "AWS", "aws", "AWF", "awf", "AWR", "awr", "AWX", "awx", "AWJ", _
"awj", "EJ", "ej", "ER", "er", "EX", "ex", "EES", "ees", "EEF", "eef", "EER", "eer", _
"EEX", "eex", "EEJ", "eej", "IIR", "iir", "IIJ", "iij", "OJ", "oj", "OR", "or", "OOS", _
"oos", "OOF", "oof", "OOR", "oor", "OOX", "oox", "OOJ", "ooj", "OWS", "ows", "OWF", _
"owf", "OWR", "owr", "OWX", "owx", "OWJ", "owj", "UJ", "uj", "UR", "ur", "UWS", "uws", _
"UWF", "uwf", "UWR", "uwr", "UWX", "uwx", "UWJ", "uwj", "YF", "ys", "YJ", "yj", "YR", _
"yr", "YX", "yx")


Find_Replace_Char = InputString
For i = 0 To 133
Find_Replace_Char = Replace(Find_Replace_Char, ChrW(Uni(i)), RepChr(i))
Next i


End Function[/GPECODE]

Khi ta gõ chữ " Trường Sa" hay chữ " Miệt vườn" thì ký tự "ờn" chưa được chuyển đổi thì phải?
 
Mình định làm cái kiểm tra lỗi chính tả bạn à

Hàm loại này tôi viết cách đây nhiều năm nhưng với ý đồ khác. Chẳng hiểu cái này dùng kiểm tra lỗi chính tả là kiểm tra ra làm sao nhỉ?
-------------------
Tặng bạn hàm VNTyping dùng chuyển chuỗi Unicode sang kiểu gõ VNI hoặc Telex
Mã:
Function VNTyping(ByVal Text As String, ByVal InputMethod As String) As String
  'InputMethod = "VNI" or "Telex"
  Dim VN_Alp, VNI_Type, Telex_Type, i As Long, Temp
  VNTyping = Text
  VN_Alp = Array("à", "á", "â", "ã", "è", "é", "ê", "ì", "í", "ò", "ó", "ô", "õ", "ù", "ú", "ý", _
                 ChrW(259), ChrW(273), ChrW(297), ChrW(361), ChrW(417), ChrW(432), ChrW(7841), ChrW(7843), _
                 ChrW(7845), ChrW(7847), ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7855), ChrW(7857), ChrW(7859), _
                 ChrW(7861), ChrW(7863), ChrW(7865), ChrW(7867), ChrW(7869), ChrW(7871), ChrW(7873), _
                 ChrW(7875), ChrW(7877), ChrW(7879), ChrW(7881), ChrW(7883), ChrW(7885), ChrW(7887), _
                 ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), _
                 ChrW(7903), ChrW(7905), ChrW(7907), ChrW(7909), ChrW(7911), ChrW(7913), ChrW(7915), _
                 ChrW(7917), ChrW(7919), ChrW(7921), ChrW(7923), ChrW(7925), ChrW(7927), ChrW(7929))
  VNI_Type = Array("a2", "a1", "a6", "a4", "e2", "e1", "e6", "i2", "i1", "o2", "o1", "o6", "o4", "u2", _
                   "u1", "y1", "a8", "d9", "i4", "u4", "o7", "u7", "a5", "a3", "a61", "a62", "a63", _
                   "a64", "a65", "a81", "a82", "a83", "a84", "a85", "e5", "e3", "e4", "e61", "e62", "e63", "e64", _
                   "e65", "i3", "i5", "o5", "o3", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", _
                   "o74", "o75", "u5", "u3", "u71", "u72", "u73", "u74", "u75", "y2", "y5", "y3", "y4")
  Telex_Type = Array("af", "as", "aa", "ax", "ef", "es", "ee", "if", "is", "of", "os", "oo", "ox", "uf", _
                     "us", "ys", "aw", "dd", "ix", "ux", "ow", "uw", "aj", "ar", "aas", "aaf", "aar", "aax", _
                     "aaj", "aws", "awf", "awr", "awx", "zwj", "ej", "er", "ex", "ees", "eef", "eer", "eex", _
                     "eej", "ir", "ij", "oj", "or", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "oor", _
                     "oox", "ooj", "uj", "ur", "uws", "uwf", "uwr", "uwx", "uwj", "yf", "yj", "yr", "yx")
  Select Case UCase(InputMethod)
    Case Is = "TELEX"
      Temp = Telex_Type
    Case Is = "VNI"
      Temp = VNI_Type
  End Select
  For i = 0 To UBound(VN_Alp)
    VNTyping = Replace(VNTyping, LCase(VN_Alp(i)), Temp(i))
    VNTyping = Replace(VNTyping, UCase(VN_Alp(i)), UCase(Left(Temp(i), 1)) & Mid(Temp(i), 2, Len(Temp(i))))
  Next i
End Function
Cách dùng:
- Chuyển sang kiểu VNI:
Mã:
=VNTyping(B4,"VNI")
- Chuyển sang kiểu Telex:
Mã:
=VNTyping(B4,"Telex")
---------------------
Tặng luôn hàm chuyển mã ngược lại:
Mã:
Function UniConvert(ByVal Text As String, ByVal 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 UCase(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
Hàm UniConvert thường dùng cho MsgBox tiếng Việt
 

File đính kèm

Mình thêm chữ "đ" và các dấu vào bảng bên Sheet 1 cũng được mà bạn. Vấn đề mình muốn hỏi là nếu chữ của mình nhiều quá 1 trang Word hoặc chỉ cần nửa trang Word thôi là biên dịch bị lỗi. Lỗi: Run-time error '1004': Application-defined or object-defined error. Lỗi dòng: "Sheet2.Range("I4").Resize(UBound(kq), 1) = kq".

Có cách nào khắc phục để xử lý được văn bản dài không bạn?
Do giới hạn ký tự trong một cell mà thôi.
Bạn gửi file lỗi xem sao.
( Giới hạn ký tự trong 1 cell là ~32000 ký tự, excel không hoàn toàn như word )
 
Hàm loại này tôi viết cách đây nhiều năm nhưng với ý đồ khác. Chẳng hiểu cái này dùng kiểm tra lỗi chính tả là kiểm tra ra làm sao nhỉ?
-------------------
Tặng bạn hàm VNTyping dùng chuyển chuỗi Unicode sang kiểu gõ VNI hoặc Telex
Mã:
Function VNTyping(ByVal Text As String, ByVal InputMethod As String) As String
  'InputMethod = "VNI" or "Telex"
  Dim VN_Alp, VNI_Type, Telex_Type, i As Long, Temp
  VNTyping = Text
  VN_Alp = Array("à", "á", "â", "ã", "è", "é", "ê", "ì", "í", "ò", "ó", "ô", "õ", "ù", "ú", "ý", _
                 ChrW(259), ChrW(273), ChrW(297), ChrW(361), ChrW(417), ChrW(432), ChrW(7841), ChrW(7843), _
                 ChrW(7845), ChrW(7847), ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7855), ChrW(7857), ChrW(7859), _
                 ChrW(7861), ChrW(7863), ChrW(7865), ChrW(7867), ChrW(7869), ChrW(7871), ChrW(7873), _
                 ChrW(7875), ChrW(7877), ChrW(7879), ChrW(7881), ChrW(7883), ChrW(7885), ChrW(7887), _
                 ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), _
                 ChrW(7903), ChrW(7905), ChrW(7907), ChrW(7909), ChrW(7911), ChrW(7913), ChrW(7915), _
                 ChrW(7917), ChrW(7919), ChrW(7921), ChrW(7923), ChrW(7925), ChrW(7927), ChrW(7929))
  VNI_Type = Array("a2", "a1", "a6", "a4", "e2", "e1", "e6", "i2", "i1", "o2", "o1", "o6", "o4", "u2", _
                   "u1", "y1", "a8", "d9", "i4", "u4", "o7", "u7", "a5", "a3", "a61", "a62", "a63", _
                   "a64", "a65", "a81", "a82", "a83", "a84", "a85", "e5", "e3", "e4", "e61", "e62", "e63", "e64", _
                   "e65", "i3", "i5", "o5", "o3", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", _
                   "o74", "o75", "u5", "u3", "u71", "u72", "u73", "u74", "u75", "y2", "y5", "y3", "y4")
  Telex_Type = Array("af", "as", "aa", "ax", "ef", "es", "ee", "if", "is", "of", "os", "oo", "ox", "uf", _
                     "us", "ys", "aw", "dd", "ix", "ux", "ow", "uw", "aj", "ar", "aas", "aaf", "aar", "aax", _
                     "aaj", "aws", "awf", "awr", "awx", "zwj", "ej", "er", "ex", "ees", "eef", "eer", "eex", _
                     "eej", "ir", "ij", "oj", "or", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "oor", _
                     "oox", "ooj", "uj", "ur", "uws", "uwf", "uwr", "uwx", "uwj", "yf", "yj", "yr", "yx")
  Select Case UCase(InputMethod)
    Case Is = "TELEX"
      Temp = Telex_Type
    Case Is = "VNI"
      Temp = VNI_Type
  End Select
  For i = 0 To UBound(VN_Alp)
    VNTyping = Replace(VNTyping, LCase(VN_Alp(i)), Temp(i))
    VNTyping = Replace(VNTyping, UCase(VN_Alp(i)), UCase(Left(Temp(i), 1)) & Mid(Temp(i), 2, Len(Temp(i))))
  Next i
End Function
Cách dùng:
- Chuyển sang kiểu VNI:
Mã:
=VNTyping(B4,"VNI")
- Chuyển sang kiểu Telex:
Mã:
=VNTyping(B4,"Telex")
---------------------
Tặng luôn hàm chuyển mã ngược lại:
Mã:
Function UniConvert(ByVal Text As String, ByVal 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 UCase(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
Hàm UniConvert thường dùng cho MsgBox tiếng Việt
Em thấy hàm này đối với TELEX chưa đúng lắm nha Thầy, cụ thể là ngay tại cái file mà Thầy đính kèm, chữ "mặc" mã hóa thành "mzwjc" như vậy thay vì chữ "a" nó trở thành chữ "z".

Và hàm đổi ngược lại nó bị vấn đề chữ hoa chữ thường, "Ăn ở" nó mã hóa thành "Awn oor" và khi chuyển lại nó lại thành "Awn ổ".

Ngay cái chữ "Áo" trong file nó cũng thế, chuyển qua thành chữ "Aso" chuyển lại nó cũng "Aso".
 
Em thấy hàm này đối với TELEX chưa đúng lắm nha Thầy, cụ thể là ngay tại cái file mà Thầy đính kèm, chữ "mặc" mã hóa thành "mzwjc" như vậy thay vì chữ "a" nó trở thành chữ "z".

Và hàm đổi ngược lại nó bị vấn đề chữ hoa chữ thường, "Ăn ở" nó mã hóa thành "Awn oor" và khi chuyển lại nó lại thành "Awn ổ".

Ngay cái chữ "Áo" trong file nó cũng thế, chuyển qua thành chữ "Aso" chuyển lại nó cũng "Aso".

Xin hỏi anh NDU đã fix lỗi trên chưa?
 
VNTyping - Chuyển đổi về ký tự bàn phím theo kiểu gõ VNI, TELEX

bài viết của anh NDU cách nay mới 3 tháng , chắc chưa sửa đâu , anh làm luôn đi cho máu . hi hi

Đang lười nhưng bị kích và cũng đang cần ngay nên fix và nâng cấp code luôn :).
Bản sửa lỗi hàm VNTyping . Thay thế "zwj", "oor", "oox", "ooj" thành "awj", "owr", "owx", "owj" là sửa được các lỗi trước đây. Code tôi sửa cho phép chuyển đổi cả CHỮ HOA (code cũ chỉ chữ thường).

[GPECODE=vb]
Function VNTyping(ByVal Text As String, ByVal InputMethod As String) As String
'Code goc: ndu96081631
'Sua loi va them chuyen doi chu HOA: Nguyen Duy Tuan
'InputMethod = "VNI" or "Telex"
Dim VN_Alp, VNI_Type, Telex_Type, I As Long, Temp
VNTyping = Text
VN_Alp = Array("à", "á", "â", "ã", "è", "é", "ê", "ì", "í", "ò", "ó", "ô", "õ", "ù", "ú", "ý", _
ChrW(259), ChrW(273), ChrW(297), ChrW(361), ChrW(417), ChrW(432), ChrW(7841), ChrW(7843), _
ChrW(7845), ChrW(7847), ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7855), ChrW(7857), ChrW(7859), _
ChrW(7861), ChrW(7863), ChrW(7865), ChrW(7867), ChrW(7869), ChrW(7871), ChrW(7873), _
ChrW(7875), ChrW(7877), ChrW(7879), ChrW(7881), ChrW(7883), ChrW(7885), ChrW(7887), _
ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), _
ChrW(7903), ChrW(7905), ChrW(7907), ChrW(7909), ChrW(7911), ChrW(7913), ChrW(7915), _
ChrW(7917), ChrW(7919), ChrW(7921), ChrW(7923), ChrW(7925), ChrW(7927), ChrW(7929), _
ChrW(192), ChrW(193), ChrW(194), ChrW(195), ChrW(200), ChrW(201), ChrW(202), _
ChrW(204), ChrW(205), ChrW(210), ChrW(211), ChrW(212), ChrW(213), ChrW(217), _
ChrW(218), ChrW(221), ChrW(258), ChrW(272), ChrW(296), ChrW(360), ChrW(416), _
ChrW(431), ChrW(7840), ChrW(7842), ChrW(7844), ChrW(7846), ChrW(7848), ChrW(7850), _
ChrW(7852), ChrW(7854), ChrW(7856), ChrW(7858), ChrW(7860), ChrW(7862), ChrW(7864), _
ChrW(7866), ChrW(7868), ChrW(7870), ChrW(7872), ChrW(7874), ChrW(7876), ChrW(7878), _
ChrW(7880), ChrW(7882), ChrW(7884), ChrW(7886), ChrW(7888), ChrW(7890), ChrW(7892), _
ChrW(7894), ChrW(7896), ChrW(7898), ChrW(7900), ChrW(7902), ChrW(7904), ChrW(7906), _
ChrW(7908), ChrW(7910), ChrW(7912), ChrW(7914), ChrW(7916), ChrW(7918), ChrW(7920), _
ChrW(7922), ChrW(7924), ChrW(7926), ChrW(7928))
VNI_Type = Array("a2", "a1", "a6", "a4", "e2", "e1", "e6", "i2", "i1", "o2", "o1", "o6", "o4", "u2", _
"u1", "y1", "a8", "d9", "i4", "u4", "o7", "u7", "a5", "a3", "a61", "a62", "a63", _
"a64", "a65", "a81", "a82", "a83", "a84", "a85", "e5", "e3", "e4", "e61", "e62", "e63", "e64", _
"e65", "i3", "i5", "o5", "o3", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", _
"o74", "o75", "u5", "u3", "u71", "u72", "u73", "u74", "u75", "y2", "y5", "y3", "y4", _
"A2", "A1", "A6", "A4", "E2", "E1", "E6", "I2", "I1", "O2", "O1", "O6", "O4", "U2", _
"U1", "Y1", "A8", "D9", "I4", "U4", "O7", "U7", "A5", "A3", "A61", "A62", "A63", _
"A64", "A65", "A81", "A82", "A83", "A84", "A85", "E5", "E3", "E4", "E61", "E62", "E63", "E64", _
"E65", "I3", "I5", "O5", "O3", "O61", "O62", "O63", "O64", "O65", "O71", "O72", "O73", _
"O74", "O75", "U5", "U3", "U71", "U72", "U73", "U74", "U75", "Y2", "Y5", "Y3", "Y4", _
"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("af", "as", "aa", "ax", "ef", "es", "ee", "if", "is", "of", "os", "oo", "ox", "uf", _
"us", "ys", "aw", "dd", "ix", "ux", "ow", "uw", "aj", "ar", "aas", "aaf", "aar", "aax", _
"aaj", "aws", "awf", "awr", "awx", "awj", "ej", "er", "ex", "ees", "eef", "eer", "eex", _
"eej", "ir", "ij", "oj", "or", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", _
"owx", "owj", "uj", "ur", "uws", "uwf", "uwr", "uwx", "uwj", "yf", "yj", "yr", "yx", _
"AF", "AS", "AA", "AX", "EF", "ES", "EE", _
"IF", "IS", "OF", "OS", "OO", "OX", "UF", _
"US", "YS", "AW", "DD", "IX", "UX", "OW", _
"UW", "AJ", "AR", "AAS", "AAF", "AAR", "AAX", _
"AAJ", "AWS", "AWF", "AWR", "AWX", "AWJ", "EJ", _
"ER", "EX", "EES", "EEF", "EER", "EEX", "EEJ", _
"IR", "IJ", "OJ", "OR", "OOS", "OOF", "OOR", _
"OOX", "OOJ", "OWS", "OWF", "OWR", "OWX", "OWJ", _
"UJ", "UR", "UWS", "UWF", "UWR", "UWX", "UWJ", _
"YF", "YJ", "YR", "YX")

Select Case UCase(InputMethod)
Case Is = "TELEX"
Temp = Telex_Type
Case Is = "VNI"
Temp = VNI_Type
End Select
For I = 0 To UBound(VN_Alp)
VNTyping = Replace(VNTyping, VN_Alp(I), Temp(I))
VNTyping = Replace(VNTyping, VN_Alp(I), Left(Temp(I), 1) & Mid(Temp(I), 2, Len(Temp(I))))
Next I
End Function

'---- Ham UniConvert
Function UniConvert(ByVal Text As String, ByVal InputMethod As String) As String
Dim VNI_Type, Telex_Type, CharCode, Temp, I As Long
'Code goc: ndu
'Sua loi va them chuyen doi chu HOA: Nguyen Duy Tuan
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", _
"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", _
"AF", "AS", "AA", "AX", "EF", "ES", "EE", _
"IF", "IS", "OF", "OS", "OO", "OX", "UF", _
"US", "YS", "AW", "DD", "IX", "UX", "OW", _
"UW", "AJ", "AR", "AAS", "AAF", "AAR", "AAX", _
"AAJ", "AWS", "AWF", "AWR", "AWX", "AWJ", "EJ", _
"ER", "EX", "EES", "EEF", "EER", "EEX", "EEJ", _
"IR", "IJ", "OJ", "OR", "OOS", "OOF", "OOR", _
"OOX", "OOJ", "OWS", "OWF", "OWR", "OWX", "OWJ", _
"UJ", "UR", "UWS", "UWF", "UWR", "UWX", "UWJ", _
"YF", "YJ", "YR", "YX")
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), _
ChrW(192), ChrW(193), ChrW(194), ChrW(195), ChrW(200), ChrW(201), ChrW(202), _
ChrW(204), ChrW(205), ChrW(210), ChrW(211), ChrW(212), ChrW(213), ChrW(217), _
ChrW(218), ChrW(221), ChrW(258), ChrW(272), ChrW(296), ChrW(360), ChrW(416), _
ChrW(431), ChrW(7840), ChrW(7842), ChrW(7844), ChrW(7846), ChrW(7848), ChrW(7850), _
ChrW(7852), ChrW(7854), ChrW(7856), ChrW(7858), ChrW(7860), ChrW(7862), ChrW(7864), _
ChrW(7866), ChrW(7868), ChrW(7870), ChrW(7872), ChrW(7874), ChrW(7876), ChrW(7878), _
ChrW(7880), ChrW(7882), ChrW(7884), ChrW(7886), ChrW(7888), ChrW(7890), ChrW(7892), _
ChrW(7894), ChrW(7896), ChrW(7898), ChrW(7900), ChrW(7902), ChrW(7904), ChrW(7906), _
ChrW(7908), ChrW(7910), ChrW(7912), ChrW(7914), ChrW(7916), ChrW(7918), ChrW(7920), _
ChrW(7922), ChrW(7924), ChrW(7926), ChrW(7928))

Select Case UCase(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

[/GPECODE]
 
Lần chỉnh sửa cuối:
Đang lười nhưng bị kích và cũng đang cần ngay nên fix và nâng cấp code luôn :).
Bản sửa lỗi hàm VNTyping . Thay thế "oor", "oox", "ooj" thành "owr", "owx", "owj" là sửa được các lỗi trước đây. Code tôi sửa cho phép chuyển đổi cả CHỮ HOA (code cũ chỉ chữ thường).

[GPECODE=vb]
Function VNTyping(ByVal Text As String, ByVal InputMethod As String) As String
'Code goc: ndu96081631
'Sua loi va them chuyen doi chu HOA: Nguyen Duy Tuan
'InputMethod = "VNI" or "Telex"
Dim VN_Alp, VNI_Type, Telex_Type, I As Long, Temp
VNTyping = Text
VN_Alp = Array("à", "á", "â", "ã", "è", "é", "ê", "ì", "í", "ò", "ó", "ô", "õ", "ù", "ú", "ý", _
ChrW(259), ChrW(273), ChrW(297), ChrW(361), ChrW(417), ChrW(432), ChrW(7841), ChrW(7843), _
ChrW(7845), ChrW(7847), ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7855), ChrW(7857), ChrW(7859), _
ChrW(7861), ChrW(7863), ChrW(7865), ChrW(7867), ChrW(7869), ChrW(7871), ChrW(7873), _
ChrW(7875), ChrW(7877), ChrW(7879), ChrW(7881), ChrW(7883), ChrW(7885), ChrW(7887), _
ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), _
ChrW(7903), ChrW(7905), ChrW(7907), ChrW(7909), ChrW(7911), ChrW(7913), ChrW(7915), _
ChrW(7917), ChrW(7919), ChrW(7921), ChrW(7923), ChrW(7925), ChrW(7927), ChrW(7929), _
ChrW(192), ChrW(193), ChrW(194), ChrW(195), ChrW(200), ChrW(201), ChrW(202), _
ChrW(204), ChrW(205), ChrW(210), ChrW(211), ChrW(212), ChrW(213), ChrW(217), _
ChrW(218), ChrW(221), ChrW(258), ChrW(272), ChrW(296), ChrW(360), ChrW(416), _
ChrW(431), ChrW(7840), ChrW(7842), ChrW(7844), ChrW(7846), ChrW(7848), ChrW(7850), _
ChrW(7852), ChrW(7854), ChrW(7856), ChrW(7858), ChrW(7860), ChrW(7862), ChrW(7864), _
ChrW(7866), ChrW(7868), ChrW(7870), ChrW(7872), ChrW(7874), ChrW(7876), ChrW(7878), _
ChrW(7880), ChrW(7882), ChrW(7884), ChrW(7886), ChrW(7888), ChrW(7890), ChrW(7892), _
ChrW(7894), ChrW(7896), ChrW(7898), ChrW(7900), ChrW(7902), ChrW(7904), ChrW(7906), _
ChrW(7908), ChrW(7910), ChrW(7912), ChrW(7914), ChrW(7916), ChrW(7918), ChrW(7920), _
ChrW(7922), ChrW(7924), ChrW(7926), ChrW(7928))
VNI_Type = Array("a2", "a1", "a6", "a4", "e2", "e1", "e6", "i2", "i1", "o2", "o1", "o6", "o4", "u2", _
"u1", "y1", "a8", "d9", "i4", "u4", "o7", "u7", "a5", "a3", "a61", "a62", "a63", _
"a64", "a65", "a81", "a82", "a83", "a84", "a85", "e5", "e3", "e4", "e61", "e62", "e63", "e64", _
"e65", "i3", "i5", "o5", "o3", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", _
"o74", "o75", "u5", "u3", "u71", "u72", "u73", "u74", "u75", "y2", "y5", "y3", "y4", _
"A2", "A1", "A6", "A4", "E2", "E1", "E6", "I2", "I1", "O2", "O1", "O6", "O4", "U2", _
"U1", "Y1", "A8", "D9", "I4", "U4", "O7", "U7", "A5", "A3", "A61", "A62", "A63", _
"A64", "A65", "A81", "A82", "A83", "A84", "A85", "E5", "E3", "E4", "E61", "E62", "E63", "E64", _
"E65", "I3", "I5", "O5", "O3", "O61", "O62", "O63", "O64", "O65", "O71", "O72", "O73", _
"O74", "O75", "U5", "U3", "U71", "U72", "U73", "U74", "U75", "Y2", "Y5", "Y3", "Y4", _
"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("af", "as", "aa", "ax", "ef", "es", "ee", "if", "is", "of", "os", "oo", "ox", "uf", _
"us", "ys", "aw", "dd", "ix", "ux", "ow", "uw", "aj", "ar", "aas", "aaf", "aar", "aax", _
"aaj", "aws", "awf", "awr", "awx", "zwj", "ej", "er", "ex", "ees", "eef", "eer", "eex", _
"eej", "ir", "ij", "oj", "or", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", _
"owx", "owj", "uj", "ur", "uws", "uwf", "uwr", "uwx", "uwj", "yf", "yj", "yr", "yx", _
"AF", "AS", "AA", "AX", "EF", "ES", "EE", _
"IF", "IS", "OF", "OS", "OO", "OX", "UF", _
"US", "YS", "AW", "DD", "IX", "UX", "OW", _
"UW", "AJ", "AR", "AAS", "AAF", "AAR", "AAX", _
"AAJ", "AWS", "AWF", "AWR", "AWX", "ZWJ", "EJ", _
"ER", "EX", "EES", "EEF", "EER", "EEX", "EEJ", _
"IR", "IJ", "OJ", "OR", "OOS", "OOF", "OOR", _
"OOX", "OOJ", "OWS", "OWF", "OWR", "OWX", "OWJ", _
"UJ", "UR", "UWS", "UWF", "UWR", "UWX", "UWJ", _
"YF", "YJ", "YR", "YX")

Select Case UCase(InputMethod)
Case Is = "TELEX"
Temp = Telex_Type
Case Is = "VNI"
Temp = VNI_Type
End Select
For I = 0 To UBound(VN_Alp)
VNTyping = Replace(VNTyping, VN_Alp(I), Temp(I))
VNTyping = Replace(VNTyping, VN_Alp(I), Left(Temp(I), 1) & Mid(Temp(I), 2, Len(Temp(I))))
Next I
End Function
[/GPECODE]
Lúc đầu em hơi ngạc nhiên khi anh hỏi, tưởng anh hỏi chưa ai viết thì anh viết, chứ em nghĩ bài này đâu làm khó được anh--=0
 
Lúc đầu em hơi ngạc nhiên khi anh hỏi, tưởng anh hỏi chưa ai viết thì anh viết, chứ em nghĩ bài này đâu làm khó được anh--=0

Nếu người khác đã làm tốt rồi thì mình thừa kế và chỉnh sửa cho phù hợp để đáp ứng công việc cần trước đã chứ cái gì cũng tự làm cực lắm :).
 
Đang lười nhưng bị kích và cũng đang cần ngay nên fix và nâng cấp code luôn :).
Bản sửa lỗi hàm VNTyping . Thay thế "zwj", "oor", "oox", "ooj" thành "awj", "owr", "owx", "owj" là sửa được các lỗi trước đây. Code tôi sửa cho phép chuyển đổi cả CHỮ HOA (code cũ chỉ chữ thường).

[GPECODE=vb]
Function VNTyping(ByVal Text As String, ByVal InputMethod As String) As String
'Code goc: ndu96081631
'Sua loi va them chuyen doi chu HOA: Nguyen Duy Tuan
'InputMethod = "VNI" or "Telex"
Dim VN_Alp, VNI_Type, Telex_Type, I As Long, Temp
VNTyping = Text
VN_Alp = Array("à", "á", "â", "ã", "è", "é", "ê", "ì", "í", "ò", "ó", "ô", "õ", "ù", "ú", "ý", _
ChrW(259), ChrW(273), ChrW(297), ChrW(361), ChrW(417), ChrW(432), ChrW(7841), ChrW(7843), _
ChrW(7845), ChrW(7847), ChrW(7849), ChrW(7851), ChrW(7853), ChrW(7855), ChrW(7857), ChrW(7859), _
ChrW(7861), ChrW(7863), ChrW(7865), ChrW(7867), ChrW(7869), ChrW(7871), ChrW(7873), _
ChrW(7875), ChrW(7877), ChrW(7879), ChrW(7881), ChrW(7883), ChrW(7885), ChrW(7887), _
ChrW(7889), ChrW(7891), ChrW(7893), ChrW(7895), ChrW(7897), ChrW(7899), ChrW(7901), _
ChrW(7903), ChrW(7905), ChrW(7907), ChrW(7909), ChrW(7911), ChrW(7913), ChrW(7915), _
ChrW(7917), ChrW(7919), ChrW(7921), ChrW(7923), ChrW(7925), ChrW(7927), ChrW(7929), _
ChrW(192), ChrW(193), ChrW(194), ChrW(195), ChrW(200), ChrW(201), ChrW(202), _
ChrW(204), ChrW(205), ChrW(210), ChrW(211), ChrW(212), ChrW(213), ChrW(217), _
ChrW(218), ChrW(221), ChrW(258), ChrW(272), ChrW(296), ChrW(360), ChrW(416), _
ChrW(431), ChrW(7840), ChrW(7842), ChrW(7844), ChrW(7846), ChrW(7848), ChrW(7850), _
ChrW(7852), ChrW(7854), ChrW(7856), ChrW(7858), ChrW(7860), ChrW(7862), ChrW(7864), _
ChrW(7866), ChrW(7868), ChrW(7870), ChrW(7872), ChrW(7874), ChrW(7876), ChrW(7878), _
ChrW(7880), ChrW(7882), ChrW(7884), ChrW(7886), ChrW(7888), ChrW(7890), ChrW(7892), _
ChrW(7894), ChrW(7896), ChrW(7898), ChrW(7900), ChrW(7902), ChrW(7904), ChrW(7906), _
ChrW(7908), ChrW(7910), ChrW(7912), ChrW(7914), ChrW(7916), ChrW(7918), ChrW(7920), _
ChrW(7922), ChrW(7924), ChrW(7926), ChrW(7928))
VNI_Type = Array("a2", "a1", "a6", "a4", "e2", "e1", "e6", "i2", "i1", "o2", "o1", "o6", "o4", "u2", _
"u1", "y1", "a8", "d9", "i4", "u4", "o7", "u7", "a5", "a3", "a61", "a62", "a63", _
"a64", "a65", "a81", "a82", "a83", "a84", "a85", "e5", "e3", "e4", "e61", "e62", "e63", "e64", _
"e65", "i3", "i5", "o5", "o3", "o61", "o62", "o63", "o64", "o65", "o71", "o72", "o73", _
"o74", "o75", "u5", "u3", "u71", "u72", "u73", "u74", "u75", "y2", "y5", "y3", "y4", _
"A2", "A1", "A6", "A4", "E2", "E1", "E6", "I2", "I1", "O2", "O1", "O6", "O4", "U2", _
"U1", "Y1", "A8", "D9", "I4", "U4", "O7", "U7", "A5", "A3", "A61", "A62", "A63", _
"A64", "A65", "A81", "A82", "A83", "A84", "A85", "E5", "E3", "E4", "E61", "E62", "E63", "E64", _
"E65", "I3", "I5", "O5", "O3", "O61", "O62", "O63", "O64", "O65", "O71", "O72", "O73", _
"O74", "O75", "U5", "U3", "U71", "U72", "U73", "U74", "U75", "Y2", "Y5", "Y3", "Y4", _
"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("af", "as", "aa", "ax", "ef", "es", "ee", "if", "is", "of", "os", "oo", "ox", "uf", _
"us", "ys", "aw", "dd", "ix", "ux", "ow", "uw", "aj", "ar", "aas", "aaf", "aar", "aax", _
"aaj", "aws", "awf", "awr", "awx", "awj", "ej", "er", "ex", "ees", "eef", "eer", "eex", _
"eej", "ir", "ij", "oj", "or", "oos", "oof", "oor", "oox", "ooj", "ows", "owf", "owr", _
"owx", "owj", "uj", "ur", "uws", "uwf", "uwr", "uwx", "uwj", "yf", "yj", "yr", "yx", _
"AF", "AS", "AA", "AX", "EF", "ES", "EE", _
"IF", "IS", "OF", "OS", "OO", "OX", "UF", _
"US", "YS", "AW", "DD", "IX", "UX", "OW", _
"UW", "AJ", "AR", "AAS", "AAF", "AAR", "AAX", _
"AAJ", "AWS", "AWF", "AWR", "AWX", "AWJ", "EJ", _
"ER", "EX", "EES", "EEF", "EER", "EEX", "EEJ", _
"IR", "IJ", "OJ", "OR", "OOS", "OOF", "OOR", _
"OOX", "OOJ", "OWS", "OWF", "OWR", "OWX", "OWJ", _
"UJ", "UR", "UWS", "UWF", "UWR", "UWX", "UWJ", _
"YF", "YJ", "YR", "YX")

Select Case UCase(InputMethod)
Case Is = "TELEX"
Temp = Telex_Type
Case Is = "VNI"
Temp = VNI_Type
End Select
For I = 0 To UBound(VN_Alp)
VNTyping = Replace(VNTyping, VN_Alp(I), Temp(I))
VNTyping = Replace(VNTyping, VN_Alp(I), Left(Temp(I), 1) & Mid(Temp(I), 2, Len(Temp(I))))
Next I
End Function

'---- Ham UniConvert
Function UniConvert(ByVal Text As String, ByVal InputMethod As String) As String
Dim VNI_Type, Telex_Type, CharCode, Temp, I As Long
'Code goc: ndu
'Sua loi va them chuyen doi chu HOA: Nguyen Duy Tuan
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", _
"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", _
"AF", "AS", "AA", "AX", "EF", "ES", "EE", _
"IF", "IS", "OF", "OS", "OO", "OX", "UF", _
"US", "YS", "AW", "DD", "IX", "UX", "OW", _
"UW", "AJ", "AR", "AAS", "AAF", "AAR", "AAX", _
"AAJ", "AWS", "AWF", "AWR", "AWX", "AWJ", "EJ", _
"ER", "EX", "EES", "EEF", "EER", "EEX", "EEJ", _
"IR", "IJ", "OJ", "OR", "OOS", "OOF", "OOR", _
"OOX", "OOJ", "OWS", "OWF", "OWR", "OWX", "OWJ", _
"UJ", "UR", "UWS", "UWF", "UWR", "UWX", "UWJ", _
"YF", "YJ", "YR", "YX")
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), _
ChrW(192), ChrW(193), ChrW(194), ChrW(195), ChrW(200), ChrW(201), ChrW(202), _
ChrW(204), ChrW(205), ChrW(210), ChrW(211), ChrW(212), ChrW(213), ChrW(217), _
ChrW(218), ChrW(221), ChrW(258), ChrW(272), ChrW(296), ChrW(360), ChrW(416), _
ChrW(431), ChrW(7840), ChrW(7842), ChrW(7844), ChrW(7846), ChrW(7848), ChrW(7850), _
ChrW(7852), ChrW(7854), ChrW(7856), ChrW(7858), ChrW(7860), ChrW(7862), ChrW(7864), _
ChrW(7866), ChrW(7868), ChrW(7870), ChrW(7872), ChrW(7874), ChrW(7876), ChrW(7878), _
ChrW(7880), ChrW(7882), ChrW(7884), ChrW(7886), ChrW(7888), ChrW(7890), ChrW(7892), _
ChrW(7894), ChrW(7896), ChrW(7898), ChrW(7900), ChrW(7902), ChrW(7904), ChrW(7906), _
ChrW(7908), ChrW(7910), ChrW(7912), ChrW(7914), ChrW(7916), ChrW(7918), ChrW(7920), _
ChrW(7922), ChrW(7924), ChrW(7926), ChrW(7928))

Select Case UCase(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

[/GPECODE]
Chưa hiểu dòng 63 dùng để làm gì vì nhìn thì giống như dòng 62.
Nếu đã có dòng 123 thì có lẽ không cần chữ hoa trong các mảng.
 
Chưa hiểu dòng 63 dùng để làm gì vì nhìn thì giống như dòng 62.
Nếu đã có dòng 123 thì có lẽ không cần chữ hoa trong các mảng.

Mình lấy code gốc của tác giả và chú tâm sửa lỗi ở mảng mã ký tự nên cũng không chú ý lắm đoạn cuối.
Với hàm VNTyping có lẽ dòng 63 là thừa.
Với hàm UniConvert thừa mảng ký tự chữ HOA.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom