Chuyển mã Tiếng Việt, thay thế Unikey Toolkit (Hơn 17 kiểu mã)

Liên hệ QC

HeSanbi

Nam Nhân✨Hiếu Lễ Nghĩa Trí Tín✨
Tham gia
24/2/13
Bài viết
2,595
Được thích
4,001
Giới tính
Nam
Hôm nay tôi lại chia sẻ cho các bạn một đoạn code giúp các bạn có thể chuyển các bảng mã Tiếng Việt với nhau.
Thực ra là một ứng dụng được viết giữa chừng của tôi. Nhưng khi viết mã tôi cảm thấy cảm hứng không còn nữa, và dừng giữa chừng, nên đành chia sẻ để các bạn có hứng thú thì phát triển thành ứng dụng chuyển mã Tiếng Việt.
Chứ nếu tôi cứ để trong kho, thì thật phí chất xám mà tôi đã đổ vào nó.

Code không chỉ có công dụng để chuyển mã, mà có thể ứng dụng vào việc tìm kiếm Tiếng Việt nếu các bạn muốn.
Nếu trong VBE của bạn đã đặt phông phù hợp với bảng mã nào đó thì các bạn có thể dùng code chuyển mã này để viết tiếng Việt trong VBE

Và code chuyển mã này có thể thay thế tốt với cách chuyển mã từ UniKey Toolkit

Với code chuyển mã thì có đến 19 kiểu mã:

  1. Unicode Dựng sẵn
  2. Unicode Tổ hợp
  3. TCVN3
  4. VISCII
  5. VPS
  6. BK-HCM 1
  7. BK-HCM 2
  8. Vietware F
  9. Vietware X
  10. VNI Windows
  11. VNU
  12. VIQR
  13. UTF-8
  14. Win-CP 1258
  15. Hex Unicode
  16. Decimal NCRs
  17. Hex NCRs
  18. Không dấu 1 (Không thể chuyển ngược lại)
  19. Không dấu 2 (Không thể chuyển ngược lại)

Hàm chuyển mã - convertVNICode:
Mã:
Call convertVNICode("chuỗi hoặc Range (vùng)", "Từ mã", "sang mã")
Các bạn có thể nhập mã chuyển là số thứ tự hoặc Tên mã trong Danh sách mã

Hàm tự động phát hiện mã - detectVNICode:
Mã:
Call detectVNICode("chuỗi")

Hàm danh sách mã - ListVNICode

Nếu các bạn cài thêm Add-in Tool VBA cũng do tôi phát triển sẽ trợ giúp tốt trong việc code:



Nếu các bạn phát triển code mà có khó khăn gì cứ đăng câu hỏi ở bên dưới. Chúc các bạn thành công.


Hình ảnh mã tiếng Việt với phông thích hợp, nếu chuyển Add-in thành Book thì sẽ có:


chuyển mã tiếng Việt 2.jpg


Hình ảnh ứng dụng chuyển mã nếu hoàn thành:

chuyển mã tiếng Việt.jpg


Mã VBA:
JavaScript:
' __   _____   _ ®
' \ \ / / _ | / \
'  \ \ /| _ \/ / \
'   \_/ |___/_/ \_\
'
Option Explicit


Private Sub convertVNICode_test()
  Dim UTF8 As Variant, Char As Variant, A As Variant, b As Variant

  Char = VBA.Array(ChrW(7898), ChrW(7899), ChrW(7900), ChrW(7901), ChrW(7902), ChrW(7903), ChrW(7904), ChrW(7905), ChrW(7906), ChrW(7907), _
                   ChrW(7912), ChrW(7913), ChrW(7914), ChrW(7915), ChrW(7916), ChrW(7917), ChrW(7918), ChrW(7919), ChrW(7920), ChrW(7921), _
                   ChrW(416), ChrW(218), ChrW(250), ChrW(217), ChrW(249), ChrW(7910), ChrW(7911), ChrW(360), ChrW(361), ChrW(7908), ChrW(7909), _
                   ChrW(7922), ChrW(7923), ChrW(7926), ChrW(7927), ChrW(7928), ChrW(7929), ChrW(7924), ChrW(7925))

  UTF8 = VBA.Array("Õì", "õì", "ÕÌ", "õÌ", "ÕÒ", "õÒ", "ÕÞ", "õÞ", "Õò", "õò", _
                   "Ýì", "ýì", "ÝÌ", "ýÌ", "ÝÒ", "ýÒ", "ÝÞ", "ýÞ", "Ýò", "ýò", _
                   "õ", "Õ", "YÌ", "yÌ", "YÒ", "yÒ", "YÞ", "yÞ", "Yò", "yò", "ã ý Ý õ Õ Yì yì ð")

  Dim Text As String
  Text = VBA.Join(Char, " ")
  Text = convertVNICode(Text, 2, 14)
  Debug.Print Text
  Text = VBA.Join(UTF8, " ")
  Text = convertVNICode(Text, 14, 2)

  'Debug.Print convertVNICode("R" & ChrW(7845) & "t vui " & ChrW(273) & "" & ChrW(432) & "" & ChrW(7907) & "c g" & ChrW(7863) & "p b" & ChrW(7841) & "n", _
                             2, 14)
                     
End Sub
Private Sub convertVNICode_test2()
  Dim s$, i%, r As Range, RG As Range, ws As Excel.Worksheet
  Set ws = ActiveSheet
  Set RG = ws.Range("A2").Resize(6000)
  convertVNICode RG, constVniWin(), constUnicodeDS()
End Sub

Function convertVNICode(ByVal SourceInput, ByVal fromcode$, ByVal tocode$)
  If fromcode = tocode Then
    GoTo g
  End If
  On Error Resume Next
  Dim O, A, b, i, j, c, d, g, f, dt As Object, ds As Object, e As Boolean
  Select Case TypeName(SourceInput)
  Case "Range": Set O = SourceInput
  Case "String": O = SourceInput
  Case Else: Exit Function
  End Select
  A = fromcode
  b = tocode
  getVNICode A, b
  c = LBound(A): d = UBound(A)
  g = LBound(b): f = UBound(b)
  ' dt là các kyì týò câÌn thay thêì trýõìc các kyì týò khác
  ' ds là các kyì týò ðýõòc thay thêì có trùng viò trí khác
  Set dt = VBA.CreateObject("Scripting.Dictionary")
  Set ds = VBA.CreateObject("Scripting.Dictionary")
  ' Các trýõÌng hõòp có thêÒ xaÒy ra:
  '   1. Nêìu khác viò trí, có chung kyì týò.(CâÌn thay thêì sau cùng)
  '     VD: a, b, c, d, e
  '         b, h, j, l, k
  '   2. Nêìu týÌ bên này có chýìa kyì týò bên kia, có hai trýõÌng hõòp:
  '      + Kyì týò trùng ðýìng viò trí trýõìc (CâÌn thay thêì sau)
  '        VD: a, b, c, j, e
  '            g, h, aj, l, m
  '      + Kyì týò trùng ðýìng viò trí sau (CâÌn thay thêì sau)
  '        VD: a, b, c, d, e
  '            g, h, ja, l, m
  '   3. Nêìu hai kyì týò cùng viò trí, bãÌng nhau thiÌ không thay thêì.
  For j = g To f
    For i = c To d
      If A(i) = b(j) Then
        If i <> j Then
          ds(A(i)) = VBA.Array(i, j)
        End If
      ElseIf b(j) Like "*" & A(i) & "*" Then
        dt(A(i)) = VBA.Array(i, j)
      End If
    Next
  Next
  If IsObject(O) Then
    SpeedOn e
    For Each i In dt.items()
      O.Replace What:=A(i(1)), Replacement:=b(i(1)), LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Next
    For i = c To d
      If A(i) <> b(i) Then
        If Not (dt.exists(A(i)) Or ds.exists(A(i))) Then
          O.Replace What:=A(i), Replacement:=b(i), LookAt:=xlPart, SearchOrder _
            :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
        End If
      End If
    Next
    For Each i In ds.items()
      O.Replace What:=A(i(1)), Replacement:=b(i(1)), LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
    Next
    SpeedOff e
  Else
    For Each i In dt.items()
      O = VBA.Replace(O, A(i(1)), b(i(1)))
    Next
    For i = c To d
      If A(i) <> b(i) Then
        If Not (dt.exists(A(i)) Or ds.exists(A(i))) Then
          O = VBA.Replace(O, A(i), b(i))
        End If
      End If
    Next
    For Each i In ds.items()
      O = VBA.Replace(O, A(i(1)), b(i(1)))
    Next
    convertVNICode = O
  End If

g:
  Set dt = Nothing
  Set ds = Nothing
  On Error GoTo 0
End Function

Private Sub detectVNICode_test()
  'Debug.Print detectVNICode(ChrW(7844) & " " & ChrW(7855))
  Debug.Print detectVNICode([A2:A1000])
  'Debug.Print convertVNICode([A2], detectVNICode([A2]), constUnicodeDS)
End Sub

Function detectVNICode(ByVal Source) As Integer
  On Error Resume Next

  Dim r, t$, i, j, k%, A, m&, X%, s&, l&, l1&, l2%, key$
  Dim d As Object, D2 As Object
  Static z As Object
  Set d = priDictionary
  Set D2 = priDictionary
  If z Is Nothing Then
    Set z = VNICodes2
  End If
  Select Case TypeName(Source)
  Case "Range":
    For Each r In Source
      t = r.Value: GoSub detect
    Next
  Case "String":
    If Source = vbNullString Then
      Exit Function
    End If
    t = Source: GoSub detect
  End Select
  If d.Count Then
    For Each j In d.Keys()
      A = d(j)
      If A > m Then
        m = A: X = j
      End If
    Next
    detectVNICode = X
  End If
Exit Function
detect:
  l1 = Len(t)
  For Each j In z.Keys()
    l2 = Len(j)
    s = 1
r:
    l = InStr(s, t, j)
    If l Then
      For k = 0 To l2 - 1
        key = l + k
        If d.exists(key) Then
          s = l + l2: If s <= l1 Then GoTo r
        Else
          d.Add key, k
        End If
      Next
      D2.Add j, z(j)
    End If

N:
  Next
  d.RemoveAll
  For Each j In D2.Keys()
    For Each i In D2(j)
      key = i
      If d.exists(key) Then
        k = d(key) + 1
        d.Remove key
        d.Add key, k
      Else
        d.Add key, 1
      End If
    Next
  Next
Return
End Function
Private Function StandardizedForRE(ByVal Text$) As String
  Dim A, i%, sp$(), l&, s$
  For Each A In Array("\", ".", "?", "+", "*", "(", ")", "[", "]", "{", "}", "^", "$")
    Text = Replace(Text, A, "\" & A)
  Next
  sp = Split(Text, "/")
  For A = 0 To UBound(sp)
    l = Len(Text)
    For i = 1 To l
      s = Mid(sp(i), i, 1)
      Select Case AscW(s)
      Case Is <= 128:
      Case Else:
      End Select
    Next
  Next

End Function
Sub VNICodes2_test()
  Dim O, i
  Set O = VNICodes2
  For Each i In O.Keys()
    Debug.Print i
  Next
End Sub

Function VNICodes2() As Object
  On Error Resume Next
  Static d As Object
  If Not d Is Nothing Then GoTo e
  Dim z, i%, j%, v$, sp, A(), l1&, l2%
  Set d = priDictionary
  z = VNICodes
  For i = 2 To 15
    sp = Split(z(i), "/")
    For l1 = 3 To 1 Step -1
      For j = LBound(sp) To UBound(sp)
        v = sp(j)
        l2 = Len(v)
        If l2 = l1 Then
          If d.exists(v) Then
            A = d(v): d.Remove v
            ReDim Preserve A(UBound(A) + 1)
            A(UBound(A)) = i
            d.Add v, A
          Else
            d.Add v, Array(i)
          End If
        End If
N:
      Next
    Next
  Next
e:
  Set VNICodes2 = d
End Function
Private Function priDictionary()
  Set priDictionary = VBA.CreateObject("Scripting.Dictionary")
End Function


Function VNICodes()
'https://en.wikipedia.org/wiki/Byte_order_mark
  Const n_ = vbNullString
  Dim A$, b$, c$, d$, e$, f, g, H, i%, j%, z(18)
  A = ChrW(&H300): b = ChrW(&H301): c = ChrW(&H303): d = ChrW(&H309): e = ChrW(&H323)
  f = VBA.Array(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, 193, 192, 7842, 195, 7840, 258, 7854, 7856, 7858, 7860, 7862, 194, 7844, 7846, 7848, 7850, 7852, 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, 272)
  g = VBA.Array(97, 97, 97, 97, 97, 259, 259, 259, 259, 259, 259, 226, 226, 226, 226, 226, 226, 101, 101, 101, 101, 101, 234, 234, 234, 234, 234, 234, 105, 105, 105, 105, 105, 111, 111, 111, 111, 111, 244, 244, 244, 244, 244, 244, 417, 417, 417, 417, 417, 417, 117, 117, 117, 117, 117, 432, 432, 432, 432, 432, 432, 121, 121, 121, 121, 121, 273, 65, 65, 65, 65, 65, 258, 258, 258, 258, 258, 258, 194, 194, 194, 194, 194, 194, 69, 69, 69, 69, 69, 202, 202, 202, 202, 202, 202, 73, 73, 73, 73, 73, 79, 79, 79, 79, 79, 212, 212, 212, 212, 212, 212, 416, 416, 416, 416, 416, 416, 85, 85, 85, 85, 85, 431, 431, 431, 431, 431, 431, 89, 89, 89, 89, 89, 272)
  H = VBA.Array(b, A, d, c, e, n_, b, A, d, c, e, n_, b, A, d, c, e, b, A, d, c, e, n_, b, A, d, c, e, b, A, d, c, e, b, A, d, c, e, n_, b, A, d, c, e, n_, b, A, d, c, e, b, A, d, c, e, n_, b, A, d, c, e, b, A, d, c, e, n_, b, A, d, c, e, n_, b, A, d, c, e, n_, b, A, d, c, e, b, A, d, c, e, n_, b, A, d, c, e, b, A, d, c, e, b, A, d, c, e, n_, b, A, d, c, e, n_, b, A, d, c, e, b, A, d, c, e, n_, b, A, d, c, e, b, A, d, c, e, n_)
UnicodeHex:  z(16) = f
DecimalNCRs:  z(17) = f
HexNCRs: z(18) = f
  For i = LBound(f) To UBound(f)
    A = Hex(f(i))
    A = String(4 - Len(A), "0") & A
    z(16)(i) = "\u" & A
    z(17)(i) = "&#" & f(i) & ";"
    z(18)(i) = "&#x" & A & ";"
    f(i) = ChrW(f(i))
    g(i) = ChrW(g(i)) & H(i)
  Next
NotMask1____0: z(j) = "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/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/d/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/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/D"
NotMask2____1: j = j + 1: z(j) = "a/a/a/a/a/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/" & ChrW(259) & "/â/â/â/â/â/â/e/e/e/e/e/ê/ê/ê/ê/ê/ê/i/i/i/i/i/o/o/o/o/o/ô/ô/ô/ô/ô/ô/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/" & ChrW(417) & "/u/u/u/u/u/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/" & ChrW(432) & "/y/y/y/y/y/" & ChrW(273) & "/A/A/A/A/A/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/" & ChrW(258) & "/Â/Â/Â/Â/Â/Â/E/E/E/E/E/Ê/Ê/Ê/Ê/Ê/Ê/I/I/I/I/I/O/O/O/O/O/Ô/Ô/Ô/Ô/Ô/Ô/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/" & ChrW(416) & "/U/U/U/U/U/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/" & ChrW(431) & "/Y/Y/Y/Y/Y/" & ChrW(272)
UnicodeDS___2: j = j + 1: z(j) = Join(f, "/")
UnicodeTH___3: j = j + 1: z(j) = Join(g, "/")
TCVN3_______4: j = j + 1: z(j) = "¸/µ/¶/·/¹/¨/¾/»/¼/½/Æ/©/Ê/Ç/È/É/Ë/Ð/Ì/Î/Ï/Ñ/ª/Õ/Ò/Ó/Ô/Ö/Ý/×/Ø/Ü/Þ/ã/ß/á/â/ä/«/è/å/æ/ç/é/¬/í/ê/ë/ì/î/ó/ï/ñ/ò/ô//ø/õ/ö/÷/ù/ý/ú/û/ü/þ/®/¸/µ/¶/·/¹/¡/¾/»/¼/½/Æ/¢/Ê/Ç/È/É/Ë/Ð/Ì/Î/Ï/Ñ/£/Õ/Ò/Ó/Ô/Ö/Ý/×/Ø/Ü/Þ/ã/ß/á/â/ä/¤/è/å/æ/ç/é/¥/í/ê/ë/ì/î/ó/ï/ñ/ò/ô/¦/ø/õ/ö/÷/ù/ý/ú/û/ü/þ/§"
VISCII______5: j = j + 1: z(j) = "á/à/ä/ã/Õ/å/¡/¢/Æ/Ç/£/â/¤/¥/¦/ç/§/é/è/ë/¨/©/ê/ª/«/¬//®/í/ì/ï/î/¸/ó/ò/ö/õ/÷/ô/¯/°/±/²/µ/½/¾/¶/·/Þ/þ/ú/ù/ü/û/ø/ß/Ñ/×/Ø/æ/ñ/ý/Ï/Ö/Û/Ü/ð/Á/À/Ä/Ã/€/Å//‚/Æ/Ç/ƒ/Â/„/…/†/ç/‡/É/È/Ë/ˆ/‰/Ê/Š/‹/Œ//Ž/Í/Ì/›/Î/˜/Ó/Ò/™/õ/š/Ô///‘/’/“/´/•/–/—/³/”/Ú/Ù/œ//ž/¿/º/»/¼/ÿ/¹/Ý/Ÿ/Ö/Û/Ü/Ð"
VPS_________6: j = j + 1: z(j) = "á/à/ä/ã/å/æ/¡/¢/£/¤/¥/â/Ã/À/Ä/Å/Æ/é/è/È/ë/Ë/ê/‰/Š/‹/Í/Œ/í/ì/Ì/ï/Î/ó/ò/Õ/õ/†/ô/Ó/Ò/°/‡/¶/Ö/§/©/ª/«/®/ú/ù/û/Û/ø/Ü/Ù/Ø/º/»/¿/š/ÿ/›/Ï/œ/Ç/Á/€//‚/å/ˆ//Ž//ð/¥/Â/ƒ/„/…/Å/Æ/É/×/Þ/þ/Ë/Ê//“/”/•/Œ/´/µ/·/¸/Î/¹/¼/½/¾/†/Ô/–/—/˜/™/¶/÷//ž/Ÿ/¦/®/Ú/¨/Ñ/¬/ø/Ð//¯/±/»/¿/Ý/²/ý/³/œ/ñ"
BKHCM1______7: j = j + 1: z(j) = "¾/¿/À/Á/Â/×/Ø/Ù/Ú/Û/Ü/Ý/Þ/ß/à/á/â/Ã/Ä/Å/Æ/Ç/ã/ä/å/æ/ç/è/È/É/Ê/Ë/Ì/Í/Î/Ï/Ð/Ñ/é/ê/ë/ì/í/î/ï/ð/ñ/ò/ó/ô/Ò/Ó/Ô/Õ/Ö/õ/ö/÷/ø/ù/ú/û/ü/ý/þ/ÿ/½/€//‚/ƒ/„/™/š/›/œ//˜/Ÿ/~/¡/¢/£/¤/…/†/‡/ˆ/‰/¥/¦/§/¨/©/ª/Š/‹/Œ//Ž///‘/’/“/«/¬//®/¯/°/±/²/³/´/µ/¶/”/•/–/—/˜/·/¸/¹/º/»/¼/{/^/`/|/Ž/}"
BKHCM2______8: j = j + 1: z(j) = "aá/aâ/aã/aä/aå/ù/ùæ/ùç/ùè/ùé/ùå/ê/êë/êì/êí/êî/êå/eá/eâ/eã/eä/eå/ï/ïë/ïì/ïí/ïî/ïå/ñ/ò/ó/ô/õ/oá/oâ/oã/oä/oå/ö/öë/öì/öí/öî/öå/ú/úá/úâ/úã/úä/úå/uá/uâ/uã/uä/uå/û/ûá/ûâ/ûã/ûä/ûå/yá/yâ/yã/yä/yå/à/AÁ/AÂ/AÃ/AÄ/AÅ/Ù/ÙÆ/ÙÇ/ÙÈ/ÙÉ/ÙÅ/Ê/ÊË/ÊÌ/ÊÍ/ÊÎ/ÊÅ/EÁ/EÂ/EÃ/EÄ/EÅ/Ï/ÏË/ÏÌ/ÏÍ/ÏÎ/Ïå/Ñ/Ò/Ó/Ô/Õ/OÁ/OÂ/OÃ/OÄ/OÅ/Ö/ÖË/ÖÌ/ÖÍ/ÖÎ/ÖÅ/Ú/ÚÁ/ÚÂ/ÚÃ/ÚÄ/ÚÅ/UÁ/UÂ/UÃ/UÄ/UÅ/Û/ÛÁ/ÛÂ/ÛÃ/ÛÄ/ÛÅ/YÁ/YÂ/YÃ/YÄ/YÅ/À"
VietwareF___9: j = j + 1: z(j) = "À/ª/¶/º/Á/Ÿ/Å/Â/Ã/Ä/Æ/¡/Ê/Ç/È/É/Ë/Ï/Ì/Í/Î/Ñ/£/Õ/Ò/Ó/Ô/Ö/Û/Ø/Ù/Ú/Ü/â/ß/à/á/ã/¤/ç/ä/å/æ/è/¥/ì/é/ê/ë/í/ò/î/ï/ñ/ó/§/÷/ô/õ/ö/ø/ü/ù/ú/û/ÿ/¢/À/ª/¶/º/Á/–/Å/Â/Ã/Ä/Æ/—/Ê/Ç/È/É/Ë/Ï/Ì/Í/Î/Ñ/™/Õ/Ò/Ó/Ô/Ö/Û/Ø/Ù/Ú/Ü/â/ß/à/á/ã/š/ç/ä/å/æ/è/›/ì/é/ê/ë/í/ò/î/ï/ñ/ó/œ/÷/ô/õ/ö/ø/ü/ù/ú/û/ÿ/˜"
VietwareX__10: j = j + 1: z(j) = "aï/aì/aí/aî/aû/à/àõ/àò/àó/àô/àû/á/áú/áö/áø/áù/áû/eï/eì/eí/eî/eû/ã/ãú/ãö/ãø/ãù/ãû/ê/ç/è/é/ë/oï/oì/oí/oî/oü/ä/äú/äö/äø/äù/äü/å/åï/åì/åí/åî/åü/uï/uì/uí/uî/uû/æ/æï/æì/æí/æî/æû/yï/yì/yí/yî/yñ/â/AÏ/AÌ/AÍ/AÎ/AÛ/À/ÀÕ/ÀÒ/ÀÓ/ÀÔ/ÀÛ/Á/ÁÚ/ÁÖ/ÁØ/ÁÙ/ÁÛ/EÏ/EÌ/EÍ/EÎ/EÛ/Ã/ÃÚ/ÃÖ/ÃØ/ÃÙ/ÃÛ/Ê/Ç/È/É/Ë/OÏ/OÌ/OÍ/OÎ/OÜ/Ä/ÄÚ/ÄÖ/ÄØ/ÄÙ/ÄÜ/Å/ÅÏ/ÅÌ/ÅÍ/ÅÎ/ÅÜ/UÏ/UÌ/UÍ/UÎ/UÛ/Æ/ÆÏ/ÆÌ/ÆÍ/ÆÎ/ÆÛ/YÏ/YÌ/YÍ/YÎ/YÑ/Â"
VniWin_____11: j = j + 1: z(j) = "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Õ/Î/Ñ"
VNU________12: j = j + 1: z(j) = "Ÿ/¡/¨/¬//¯/°/±/²/³/´/µ/¶/·/¸/¹/º/¾/¿/À/Á/Â/Å/Æ/Ë/Ì/Í/Î/Ï/Ö/×/Ø/Ù/Ü/Ý/Þ/ß/à/á/â/ã/ä/å/æ/ç/è/é/ê/ë/ì/î/ï/ð/ñ/ò/õ/ö/÷/ø/ù/ú/û/ü/ý/þ/ÿ/½/€/" & ChrW(129) & "/‚/Ã/" & ChrW(7840) & "/ƒ/" & ChrW(7854) & "/" & ChrW(7856) & "/" & ChrW(7858) & "/" & ChrW(7860) & "/" & ChrW(7862) & "/„/…/" & ChrW(7846) & "/" & ChrW(7848) & "/" & ChrW(6) & "/" & ChrW(7852) & "/É/È/" & ChrW(7866) & "/" & ChrW(7868) & "/" & ChrW(7864) & "/‰/" & ChrW(7870) & "/" & ChrW(7872) & "/" & ChrW(7874) & "/" & _
                                 ChrW(7876) & "/" & ChrW(7878) & "/Í/Ì/" & ChrW(7880) & "/" & ChrW(296) & "/" & ChrW(7882) & "/Œ/Ò/" & ChrW(7886) & "/Õ/" & ChrW(7884) & "/" & ChrW(141) & "/" & ChrW(7888) & "/" & ChrW(7890) & "/" & ChrW(7892) & "/" & ChrW(7894) & "/" & ChrW(7896) & "/" & ChrW(381) & "/" & ChrW(7898) & "/" & ChrW(7900) & "/" & ChrW(143) & "/" & ChrW(7904) & "/" & ChrW(7906) & "/˜/Ù/™/" & ChrW(360) & "/" & ChrW(7908) & "/œ/" & ChrW(157) & "/" & ChrW(7914) & "/" & ChrW(7916) & "/" & ChrW(7918) & "/" & ChrW(7920) & "/" & ChrW(382) & "/" & ChrW(7922) & "/" & ChrW(7926) & "/" & ChrW(7928) & "/" & ChrW(7924) & "/" & ChrW(272)
VIQR_______13: j = j + 1: z(j) = "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^./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./d-/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^./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./DD"
UTF8_______14: j = j + 1: z(j) = "á/à /ả/ã/ạ/ă/ắ/ằ/ẳ/ẵ/ặ/â/ấ/ầ/ẩ/ẫ/áº/é/è/ẻ/ẽ/ẹ/ê/ế/á»/ể/á»…/ệ/Ã/ì/ỉ/Ä©/ị/ó/ò/á»/õ/á»/ô/ố/ồ/ổ/á»—/á»™/Æ¡/á»›/á»/ở/ỡ/ợ/ú/ù/ủ/Å©/ụ/Æ°/ứ/ừ/á»/ữ/á»±/ý/ỳ/á»·/ỹ/ỵ/Ä‘/Ã/À/Ả/Ã/Ạ/Ä‚/Ắ/Ằ/Ẳ/Ẵ/Ặ/Â/Ấ/Ầ/Ẩ/Ẫ/Ậ/É/È/Ẻ/Ẽ/Ẹ/Ê/Ế/Ề/Ể/Ễ/Ệ/Ã/ÃŒ/Ỉ/Ĩ/Ị/Ó/Ã’/Ỏ/Õ/Ọ/Ô/á»/á»’/á»”/á»–/Ộ/Æ /Ớ/Ờ/Ở/á» /Ợ/Ú/Ù/Ủ/Ũ/Ụ/Ư/Ứ/Ừ/Ử/á»®/á»°/Ã/Ỳ/Ỷ/Ỹ/á»´/Ä/"
WinCP1258__15: j = j + 1: z(j) = "á/à/aÒ/aÞ/aò/ã/ãì/ãÌ/ãÒ/ãÞ/ãò/â/âì/âÌ/âÒ/âÞ/âò/é/è/eÒ/eÞ/eò/ê/êì/êÌ/êÒ/êÞ/êò/í/iÌ/iÒ/iÞ/iò/ó/oÌ/oÒ/oÞ/oò/ô/ôì/ôÌ/ôÒ/ôÞ/ôò/õ/õì/õÌ/õÒ/õÞ/õò/ú/ù/uÒ/uÞ/uò/ý/ýì/ýÌ/ýÒ/ýÞ/ýò/yì/yÌ/yÒ/yÞ/yò/ð/Á/À/AÒ/AÞ/Aò/Ã/Ãì/ÃÌ/ÃÒ/ÃÞ/Ãò/Â/Âì/ÂÌ/ÂÒ/ÂÞ/Âò/É/È/EÒ/EÞ/Eò/Ê/Êì/ÊÌ/ÊÒ/ÊÞ/Êò/Í/IÌ/IÒ/IÞ/Iò/Ó/OÌ/OÒ/OÞ/Oò/Ô/Ôì/ÔÌ/ÔÒ/ÔÞ/Ôò/Õ/Õì/ÕÌ/ÕÒ/ÕÞ/Õò/Ú/Ù/UÒ/UÞ/Uò/Ý/Ýì/ÝÌ/ÝÒ/ÝÞ/Ýò/Yì/YÌ/YÒ/YÞ/Yò/Ð"

  VNICodes = z
  Erase z
End Function

Function getVNICode(fromcode, tocode)
  Dim H, i, s, k%, z, l
  z = VNICodes
  l = ListVNICode

  H = fromcode: GoSub g: fromcode = H
  H = tocode: GoSub g: tocode = H
Exit Function
g:
  For i = LBound(l) To UBound(l)
    If H = l(i) Then
      H = i
      Exit For
    End If
  Next
  H = Split(z(H), "/")
Return
End Function

Function ListVNICode()
  ListVNICode = VBA.Array("Kh" & ChrW(244) & "ng d" & ChrW(7845) & "u 1", "Kh" & ChrW(244) & "ng d" & ChrW(7845) & "u 2", "Unicode D" & ChrW(7921) & "ng s" & ChrW(7861) & "n", "Unicode T" & ChrW(7893) & " h" & ChrW(7907) & "p", "TCVN3", "VISCII", "VPS", "BK-HCM 1", "BK-HCM 2", "Vietware F", "Vietware X", "VNI Windows", "VNU", "VIQR", "UTF-8", "Win-CP 1258", "Hex Unicode", "Decimal NCRs", "Hex NCRs")
End Function

Function constNotMask1(): constNotMask1 = 0: End Function
Function constNotMask2(): constNotMask2 = 1: End Function
Function constUnicodeDS(): constUnicodeDS = 2: End Function
Function constUnicodeTH(): constUnicodeTH = 3: End Function
Function constTCVN3(): constTCVN3 = 4: End Function
Function constVISCII(): constVISCII = 5: End Function
Function constVPS(): constVPS = 6: End Function
Function constBKHCM1(): constBKHCM1 = 7: End Function
Function constBKHCM2(): constBKHCM2 = 8: End Function
Function constVietwareF(): constVietwareF = 9: End Function
Function constVietwareX(): constVietwareX = 10: End Function
Function constVniWin(): constVniWin = 11: End Function
Function constVNU(): constVNU = 12: End Function
Function constVIQR(): constVIQR = 13: End Function
Function constUTF8(): constUTF8 = 14: End Function
Function constWinCP1258(): constWinCP1258 = 15: End Function
Function constHexUnicode(): constHexUnicode = 16: End Function
Function constDecimalNCRs(): constDecimalNCRs = 17: End Function
Function constHexNCRs(): constHexNCRs = 18: End Function

Function DialogExplorer(Optional FolderPath$, _
                        Optional sDesc$ = "All File", _
                        Optional sFilter$ = "*.*", _
                        Optional title$ = "File Open", _
                        Optional FileDialog& = 1, _
                        Optional InitialView& = 2, _
                        Optional ButtonName$ = "&Select", _
                        Optional MultiSelect As Boolean = 0) As Variant
  DialogExplorer = ""
  Dim Arr(), k, it
  With Application.FileDialog(FileDialog) '1|4'
    If ButtonName <> vbNullString Then .ButtonName = ButtonName
'    If FolderPath <> vbNullString Then
'      .InitialFileName = FolderPath
'    Else
'      .InitialFileName = Application.DefaultFilePath
'    End If
    If FileDialog = 1 Then
      .Filters.Clear
      .Filters.Add sDesc, sFilter
      If sDesc$ <> "All File" Then .Filters.Add "All File", "*.*"
    End If
    If title <> vbNullString Then .title = title
    .InitialView = InitialView 'msoFileDialogViewDetails'
    .AllowMultiSelect = IIf(FileDialog = 4, False, MultiSelect)
    If .Show Then
      If FileDialog = 4 Then
        DialogExplorer = .SelectedItems(1)
      Else
        For Each it In .SelectedItems
          ReDim Preserve Arr(k): Arr(k) = it: k = k + 1
        Next it
        DialogExplorer = Arr
      End If
    End If
    If FileDialog = 1 Then .Filters.Clear
  End With
End Function


Sub SpeedOn(Optional turned As Boolean, _
              Optional Screen As Boolean = True, _
              Optional Events As Boolean = True, _
              Optional Calcula As Boolean = True)
  SetSpeedApp True, turned, Screen, Events, Calcula
End Sub
Sub SpeedOff(Optional turned As Boolean = True, _
              Optional Screen As Boolean = True, _
              Optional Events As Boolean = True, _
              Optional Calcula As Boolean = True)
  If Not turned Then
    SetSpeedApp False, turned, Screen, Events, Calcula
  End If
End Sub

Sub SetSpeedApp(Optional ByVal TurnOn As Boolean = False, _
              Optional turned As Boolean, _
              Optional Screen As Boolean = True, _
              Optional Events As Boolean = True, _
              Optional Calcula As Boolean = True)
  On Error Resume Next
  With Application
    turned = (.ScreenUpdating = False And Screen) _
          Or (.EnableEvents = False And Events) _
          Or (.Calculation = xlCalculationManual And Calcula)
    If TurnOn And Not turned Then
       If .ScreenUpdating And Screen Then .ScreenUpdating = False
       If .EnableEvents And Events Then .EnableEvents = False
       If .Calculation <> xlCalculationManual And Calcula Then .Calculation = xlCalculationManual
        '.CalculateBeforeSave = False
        '.DisplayAlerts = False
        '.Cursor = xlWait
        '.StatusBar = True
        '.EnableCancelKey = xlErrorHandler
    ElseIf Not TurnOn And turned Then
      If Not .ScreenUpdating And Screen Then .ScreenUpdating = True
      If Not .EnableEvents And Events Then .EnableEvents = True
      If .Calculation <> xlAutomatic And Calcula Then .Calculation = xlAutomatic
      '.DisplayAlerts = True
      '.CalculateBeforeSave = True
      '.Cursor = xlDefault
      '.StatusBar = False
      '.EnableCancelKey = xlInterrupt
      '.StatusBar = n_
    End If
  End With
  'oAS.DisplayPageBreaks = False
End Sub




Function IsFileOpen(ByVal FileName As String)
  Dim f As Integer
  On Error Resume Next
  f = FreeFile()
  Open FileName For Input Lock Read As #f
  Close f
  On Error GoTo 0
  Select Case VBA.Err
  Case 0: IsFileOpen = False
  Case 70: IsFileOpen = True
  Case Else: IsFileOpen = VBA.Err
  End Select
  On Error GoTo 0
End Function

Function getFileExtend(ByVal FileName As String)
  Dim i%, s$, f$
  For i = Len(FileName) To 1 Step -1
    f = Mid(FileName, i, 1)
    If f Like "[\/.]" Then
      If f = "." Then
        f = s
      End If
      Exit For
    End If
    s = f & s
    f = vbNullString
  Next
  getFileExtend = f
End Function


Private Sub Clipboard_test()
  Call Clipboard("Xin ch" & ChrW(224) & "o t" & ChrW(7845) & "t c" & ChrW(7843) & " c" & ChrW(225) & "c b" & ChrW(7841) & "n")
  Debug.Print Clipboard()
End Sub
Function Clipboard(Optional StoreText As String) As String
  Dim X As Variant
  X = StoreText
  With VBA.CreateObject("htmlfile")
    With .parentWindow.clipboardData
      Select Case True
      Case Len(StoreText)
        .setData "Text", X
      Case Else
        Clipboard = .GetData("Text")
      End Select
    End With
  End With
End Function


Private Sub convertFileVNICode_test()
  Call convertFileVNICode(ThisWorkbook.FullName, 2, 5)
End Sub
Function convertFileVNICode(ByVal FileName$, ByVal fromcode$, ByVal tocode$)
  If IsFileOpen(FileName) Then
    GoTo e
  End If
  Dim Ext$, FSO As Object, f, SF$
  Set FSO = VBA.CreateObject("Scripting.FileSystemObject")
  Set f = FSO.GetFile(FileName)
  SF = f.Name
  Ext = LCase(getFileExtend(FileName))
  Select Case Ext
  Case "xlam", "xla", "xls", "xlsx", "xlsm", "xlsb"
  Case "rst", "csv", "txt", "xml", "htm", "html", "json", "js"
  End Select
e:
  Set FSO = Nothing
End Function


Add-in bên dưới chưa hoàn thành, chỉ để tham khảo:
 

File đính kèm

  • UniCharcode.xlam
    566.2 KB · Đọc: 26
Lần chỉnh sửa cuối:
chào bạn, tôi có dùng code này của bạn để phát hiện mã nhưng bị lỗi #name? bạn có thể giúp tôi cách tìm mã như File này với. cám ơn
:) Bạn lại lấy râu ông nọ cắm cằm bà kia rồi.
Code trong file là của anh batman1 và tên hàm là delectCode() hoặc delectCodeFull(). Bạn phải dùng đúng tên hàm chứ làm gì có hàm delectVNIcode().
 
Upvote 0
Những người thực sự cần việc chuyển mã này rất ít, nhưng khi gặp chuyện thì vô cùng hữu ích.
 
Upvote 0
Giải thuật phát hiện
chào bạn, tôi có dùng code này của bạn để phát hiện mã nhưng bị lỗi #name? bạn có thể giúp tôi cách tìm mã như File này với. cám ơn
Bài viết đã cũ nên tôi đã cập nhật lại giải thuật phát hiện mã, bạn có thể tham khảo
 

File đính kèm

  • tim Font chu Unicode-VNI-nhogiup (1).xlsm
    164.1 KB · Đọc: 47
Upvote 0
chào bạn, tôi có dùng code này của bạn để phát hiện mã nhưng bị lỗi #name? bạn có thể giúp tôi cách tìm mã như File này với. cám ơn
Tôi đề nghị bạn gỡ tập tin đính kèm và thay bằng tập tin không có code của tôi.

Tôi liên lạc với bạn qua đối thoại vì tôi lười chưa suy nghĩ thấu đáo nên tôi không dám chắc là code phát hiện bảng mã chính xác 100%, vì thế tôi không muốn công bố rộng rãi. Nếu công bố rộng rãi thì tôi bầy trò đối thoại làm gì.

Tôi đề nghị bạn gỡ tập tin đính kèm và thay bằng tập tin không có code của tôi. Ngoài ta tôi cấm bạn dùng code của tôi. Tôi rút lại sự giúp đỡ vì:
- tôi không muốn giúp bạn nữa.
- bạn cũng chả mất gì. Có code của tôi thì bạn cũng không giải quyết được gì, vẫn phải đi hỏi cách giải quyết.

Tôi tuyên bố rút lại code. Nếu bạn còn cố tình dùng code của tôi trong tương lai thì tôi sẽ yêu cầu BQT GPE xử lý bạn.

Bạn không cần xin lỗi gì cả. Tôi không giúp bạn nữa, và tôi không cho phép bạn đính kèm code của tôi. Mà có nó làm gì khi có nó cũng chả giúp được gì.

Một lần nữa tôi yêu cầu bạn gỡ code của tôi xuống.

:) Bạn lại lấy râu ông nọ cắm cằm bà kia rồi.
Code trong file là của anh batman1 và tên hàm là delectCode() hoặc delectCodeFull(). Bạn phải dùng đúng tên hàm chứ làm gì có hàm delectVNIcode().
Function detectVNICode người ta đặt trong Sheet1. :D
 
Upvote 0
Tôi tuyên bố rút lại code. Nếu bạn còn cố tình dùng code của tôi trong tương lai thì tôi sẽ yêu cầu BQT GPE xử lý bạn.
Bạn đang hiểu sai về File của tôi nhờ bạn Hesanbi rồi,
Bạn cũng không cần biết nguyên do đâu sao ?
Khi tôi cần giúp đỡ từ GPE tôi mới lên diễn đàn nhờ giúp, khi bạn hứa & giúp đỡ thì tôi cảm ơn, nhưng khi tôi nhận File từ bạn không thấy ở Sheet 1 có kết quả gì (do tôi không nhìn thấy kết quả nên cũng không có xem Code gì cả ), tôi tìm theo hướng dẫn của bạn ở Sheet 2 nhưng không thấy cách tìm bảng mã, chỉ thấy bạn hướng dãn chuyển mã nên tôi mới hỏi lại bạn cách tìm mã vì cái đó tôi đang cần ( vì tìm bảng mã trước rồi mới biết mã gì để chuyển ).
Do tôi cần gấp nên xem lại những bài trước có Code tìm bảng mã & tôi copy code rồi dán vào Sheet 1 nên khi gọi hàm theo code tôi copy bị dư chữ VNI nên kết quả sai tên ( lỗi #name ?), chứ không phải lấy Code của bạn này làm lại đi hỏi bạn kia, tôi cũng đi làm nên rất tôn trọng " mồ hôi" kiến thức của mọi người.
Còn việc bạn viết rằng nếu tôi cố tình....rồi bạn nhờ BQT GPE xử lý tôi ? khi tôi đọc bạn viết như vậy bạn biết tôi nghỉ gì không ? bạn có chắc rằng trong cuộc sống của bạn chưa bao giờ bị nhầm không ?
Do tôi vẫn còn tôn trọng bạn đã giúp tôi nên tôi sẽ : gỡ bài có code của bạn xuống, còn bạn muốn hiểu hay muốn nhờ ai đó xử lý tôi thì tùy bạn, nhưng bạn xúc phạm tôi là không được đâu nha.
Nếu bạn còn cố tình dùng code của tôi trong tương lai thì tôi sẽ yêu cầu BQT GPE xử lý bạn.
 
Upvote 0
tôi cũng đi làm nên rất tôn trọng " mồ hôi" kiến thức của mọi người.
Cách mà bạn đính kèm file lên đây có code của người khác khi họ chưa/ không muốn công khai (do chưa hoàn chỉnh) là bạn đã sai rồi. Khi đã trao đổi thông qua cuộc nói chuyện cá nhân là phải biết rồi, nếu muốn công khai đã trả lời thẳng trên bài của bạn.
Do tôi thấy bạn dùng hàm detectVNIcode() nên tôi nghĩ là bạn áp dụng hàm của Hesanbi mà sai cách, báo lỗi, nên tải về xem và thấy rằng đó không phải là code của Hesanbi.
Và tôi có thấy vấn đề xúc phạm gì ở đây đâu. Code là sở hữu trí tuệ của anh ta thì anh ta có quyền không cho xài, đơn giản vậy thôi.
 
Upvote 0
Cách mà bạn đính kèm file lên đây có code của người khác khi họ chưa/ không muốn công khai (do chưa hoàn chỉnh) là bạn đã sai rồi. Khi đã trao đổi thông qua cuộc nói chuyện cá nhân là phải biết rồi, nếu muốn công khai đã trả lời thẳng trên bài của bạn.
Do tôi nghỉ làm nên trên máy tính mượn của bạn tôi không có File gốc, vì vậy lấy File đã gửi ( do không nhìn thấy kết quả gì tưởng là File còn nguyên như lúc đầu tôi gửi ) rồi copy Code tìm bảng mã như đã chia sẻ ở trên dán vào nhưng không biết trong File lấy về có code rồi, cái này là tôi bị nhầm chứ không cố ý...còn ai đó nghĩ là tôi cố ý rồi...đòi xử lý tôi thì tôi không phục. Cám ơn bạn đã góp ý
 
Upvote 0
Bạn đang hiểu sai về File của tôi nhờ bạn Hesanbi rồi,
Bạn cũng không cần biết nguyên do đâu sao ?
Bạn lạ thật. Tôi không có nhiệm vụ phải biết bạn hiểu gì hay không hiểu gì. Tôi thấy tập tin trong bài #2 có code của tôi nên tôi yêu cầu gỡ xuống. Thế thôi.

Còn việc bạn viết rằng nếu tôi cố tình....rồi bạn nhờ BQT GPE xử lý tôi ? khi tôi đọc bạn viết như vậy bạn biết tôi nghỉ gì không ?
Về "cố tình" thì bạn đọc mà không hiểu. Xử lý là nói về chuyện "cố tình" dùng code trong tương lai. Về code ở bài #2 tôi chỉ yêu cầu gỡ bỏ thôi, tôi không dọa xử lý bài #2. Đọc lại cho ky
Nếu bạn còn cố tình dùng code của tôi trong tương lai thì tôi sẽ yêu cầu BQT GPE xử lý bạn.
 
Upvote 0
Cách mà bạn đính kèm file lên đây có code của người khác khi họ chưa/ không muốn công khai (do chưa hoàn chỉnh) là bạn đã sai rồi. Khi đã trao đổi thông qua cuộc nói chuyện cá nhân là phải biết rồi, nếu muốn công khai đã trả lời thẳng trên bài của bạn.
Do tôi thấy bạn dùng hàm detectVNIcode() nên tôi nghĩ là bạn áp dụng hàm của Hesanbi mà sai cách, báo lỗi, nên tải về xem và thấy rằng đó không phải là code của Hesanbi.
Tôi viết code từ A đến Z. Thậm chí cả code test cũng từ A đến Z luôn. Chỉ cần chạy code test thôi mà người ta cũng không có thời gian, cũng không có hứng, và "nên cũng không có xem Code gì cả", thì đủ thấy người ta trân trọng công sức của người khác đến nhường nào.

Viện cớ
tôi tìm theo hướng dẫn của bạn ở Sheet 2 nhưng không thấy cách tìm bảng mã
Nhưng rõ ràng trong sheet2 có

sheet2.jpg

Đọc xong mà không hiểu detectCode làm gì thì ít ra cũng nên tò mò xem nó làm gì mà người ta lại giới thiệu nó. Mà có 2 Sub testCode và Sub testCodeFull đều có từ TEST trong tên, sao không tò mò nhấn chạy nó nhỉ? Một cú nhấn nhẹ cũng không có. Bó tay.
 
Upvote 0
Tôi viết code từ A đến Z. Thậm chí cả code test cũng từ A đến Z luôn. Chỉ cần chạy code test thôi mà người ta cũng không có thời gian, cũng không có hứng, và "nên cũng không có xem Code gì cả", thì đủ thấy người ta trân trọng công sức của người khác đến nhường nào.

Viện cớ

Nhưng rõ ràng trong sheet2 có

View attachment 274351

Đọc xong mà không hiểu detectCode làm gì thì ít ra cũng nên tò mò xem nó làm gì mà người ta lại giới thiệu nó. Mà có 2 Sub testCode và Sub testCodeFull đều có từ TEST trong tên, sao không tò mò nhấn chạy nó nhỉ? Một cú nhấn nhẹ cũng không có. Bó tay.
1649751011974.png

tôi không rành về code nên mới nhờ GPE giúp, tôi cần tìm bảng mã nhưng bài đầu tiên tôi nhầm là tìm Font chữ nhưng theo hướng dẫn chuyển mã từ bạn tôi không dùng được nên copy đoạn code được chia sẻ từ các bài trên rồi dán vào sau đó gọi hàm theo Code bị sai #name ? ( tôi trích lại Code trong File ), nếu ai giúp tôi thì tôi biết ơn họ, còn ai đó vì lỗi nhỏ của tôi mà nhắc nhở nặng lời với tui là khg vui rồi.
 
Upvote 0
nhắc nhở nặng lời với tui là khg vui rồi.
Viết thế là không đúng rồi.

Bài #10, #11 ra đời vì có bài #7 lý do lý trấu. Không có bài #7 thì làm gì có bài #10, #11 được. Còn trong bài #2 tôi yêu cầu gỡ bỏ code của tôi vì tôi là tác giả. Bất kể vì lý do gì mà bạn gửi lên GPE tập tin có code của tôi thì tôi vẫn có quyền yêu cầu gỡ bỏ. Sao lại là nặng lời chuyện yêu cầu gỡ bỏ? Còn chuyện nhờ GPE xử lý khi "dùng code của tôi trong TƯƠNG LAI" thì dễ hiểu. Sống trong một xã hội có luật pháp đàng hoàng thì khi quyền lợi của mình bị xâm phạm thì nhờ pháp luật bảo vệ chứ còn nhờ ai?

Có lẽ viết thêm cũng vô ích nên tôi dừng ở đây.
 
Upvote 0
Web KT

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

Back
Top Bottom