Khắc phục [QR-Code] sai do bộ gõ tiếng Việt ?

Liên hệ QC

Hoàng Nhật Phương

Thành viên gắn bó
Tham gia
5/11/15
Bài viết
1,894
Được thích
1,213
Xin chào các bạn.
Có thể sử dụng code để điều khiển ứng dụng Unikey được không ạ?
Ví dụ: Unikey đang ở chế độ gõ tiếng Việt, sau khi chạy code chuyển sang chế độ gõ tiếng Anh. Hoặc Unikey đang mở thì đóng lại ạ.
**********************************
Bài viết của tôi đã được giải quyết,hiện tôi đã đưa vào áp dụng kết quả đã OK đối với tôi.

Trong chủ đề có nhiều hướng giải quyết, nhưng tôi xin phép được trích dẫn link các bài viết tiêu biểu trong chủ đề để các bạn tiện theo dõi:
1.https://www.giaiphapexcel.com/diendan/threads/khắc-phục-qr-code-sai-do-bộ-gõ-tiếng-việt.140358/#post-902152
2.https://www.giaiphapexcel.com/diendan/threads/khắc-phục-qr-code-sai-do-bộ-gõ-tiếng-việt.140358/page-3#post-902364
3.https://www.giaiphapexcel.com/diendan/threads/khắc-phục-qr-code-sai-do-bộ-gõ-tiếng-việt.140358/page-7#post-902900

Xin trân trọng cảm ơn tất cả mọi người đã nhiệt tình giúp đỡ và đóng góp ý kiến, đặc biệt với sự giúp đỡ tận tình của các thành viên: Bác @batman1 (@siwtom ) , Anh @huuthang_bd , Anh @Nguyễn Duy Tuân và Bạn @HeSanbi

Xin trân trọng cảm ơn BQT đã tạo ra và đã mang đến cho tôi và mọi người một nơi thật tuyệt vời, một nơi để mọi người cùng nhau có thể trao đổi/học hỏi và cùng nhau thành công trong sự nghiệp.
 
Lần chỉnh sửa cuối:
Upvote 0
Các bạn có dùng phần mềm diệt virus bản quyền/xịn không? Hay nó bị ngu ngơ nhỉ ? Máy mình là máy đóng gói các giải pháp cho nhiều khách hàng cả tây và ta chảng ai báo virus cả. Hay Máy chủ GPE bị nhiễm? :D
 
Upvote 0
Các bạn có dùng phần mềm diệt virus bản quyền/xịn không? Hay nó bị ngu ngơ nhỉ ? Máy mình là máy đóng gói các giải pháp cho nhiều khách hàng cả tây và ta chảng ai báo virus cả. Hay Máy chủ GPE bị nhiễm? :D

Không biết phần mềm trên máy tính của OT có xịn không nhưng công ty phải bỏ ra khoảng 10trieu để mua Win10+Office2016 đó ạ.
 
Upvote 0
Thôi tôi đành lưu file về định dạng XLSM để các phần mềm diệt virus nó có khả năng kiểm tra đc kỹ nội dung trong file để nó có kết luận không ngu ngơ :D . File trước tôi lưu dạng "XLS" để các bạn có thể mở đc cả trên Excel 2003.
 

File đính kèm

  • Barcode_Scanner_Unikey.xlsm
    238.1 KB · Đọc: 24
Upvote 0
Các bạn có dùng phần mềm diệt virus bản quyền/xịn không? Hay nó bị ngu ngơ nhỉ ? Máy mình là máy đóng gói các giải pháp cho nhiều khách hàng cả tây và ta chảng ai báo virus cả. Hay Máy chủ GPE bị nhiễm? :D
Con virus đây này anh : "AutoClickUnikey"
Có ai mà đi đặt cái tên Macro như thế này. Nó bắt lỗi ngay
 
Upvote 0
Upvote 0
Hóa ra cái phần mềm kia nó ngu ngơ thiệt. Ai lại lấy tên macro để coi là virus chứ :D
Em đâu có dùng phần mềm duyệt Virus. Mấy bạn không biết VBA thì mới lo sợ.
FIle của anh em tải về xem qua mã nguồn tự hiểu là có Virus hay không.
Đây chính là trang chóng sợ hãi giành cho người luôn sợ hãi đây:
https://www.virustotal.com/vi/ - Miễn phí - Hãy tin Cộng đồng tìm virus này
Capture.PNG
Bài đã được tự động gộp:

Hóa ra cái phần mềm kia nó ngu ngơ thiệt. Ai lại lấy tên macro để coi là virus chứ :D
Anh Tuân khi đăng File anh chụp cái ảnh như thế lên, cho các bạn ấy link kiểm tra nữa thì "đố mà than phiền "
 
Lần chỉnh sửa cuối:
Upvote 0
Máy em đang dùng đây là Win10 64bit gồm 2 Office64 2016 và Office64 2010. Như anh nói thì đã gặp lỗi rồi.
Máy em đang dùng đây là Win10 64bit gồm 2 Office64 2016 và Office64 2010. Như anh nói thì đã gặp lỗi rồi.
Cái này tôi biết. Đề phòng mọi người có ý kiến nên tôi viết rất rõ mà
Chỉ dùng với Office 32 bit vì tôi không khai báo cho 64 bit.
Chỉ là bạn không chịu đọc kỹ mà thôi.
 
Upvote 0
Upvote 0
Cái này tôi biết. Đề phòng mọi người có ý kiến nên tôi viết rất rõ mà

Chỉ là bạn không chịu đọc kỹ mà thôi.

Đoạn anh Batman1 trích dẫn là liên quan loạt bài trao đổi về kiểu Long trong môi trường 64 bit giữa em và HeSanbi đấy. :)
 
Upvote 0
Tôi hướng dẫn chóng sợ hãi nhé:
https://www.virustotal.com/vi/ là trang quét virus nhiều định dạng file với hơn 60 phần mềm duyệt virus tiên tiến có cả BKAV. Và luôn luôn update bản mới nhất
Chỉ cần đăng link hoặc file.
Sau đây là hình ảnh cho file mà OT bị WinDefender cho là Virus
Capture.PNG
 
Upvote 0
Vừa đi làm về thì mọi người đã làm xong rồi.
Tuân đã làm thì tin tưởng là chuẩn rồi. Tôi cũng không có các phiên bản Windows khác để test. Nhưng Tuân nên làm thêm để sao không chỉ cho cô OT dùng mà cho cả những người về sau muốn thao tác với các icon khác, ứng dụng khác.

Tức đại loại thế này. Sửa Vietnamese thành Sub chẳng hạn, vd. ListIcons, không có AutoClickUnikey và những cái khác. ListIcons trong vòng lặp For k = 0 To nCount - 1 sẽ nhập các dữ liệu vào mảng TrayInfo(...) As TRAYITEM, mà
Mã:
Private Type TRAYITEM
    hwnd As ...
        uID As ...
        uCallbackMessage As ...
    filename As ...
    sTip As ...
End Type
hwnd, uID, uCallbackMessage thì sao chép từ TRAYDATA(XP) sang. Chỉ còn filename nữa thôi.

Tiếp đó là code để phục vụ cô OT. Vd.

Mã:
Function Vietnamese(Optional ByVal TurnOff As Boolean = True) As Boolean
Dim k As Long
    ListIcons
    For k = 1 To UBound(TrayInfo)
        If TrayInfo(k).filename = "UnikeyNT.exe" Then ' hoặc kiểm tra sTip
            ' làm các việc của cô OT
            Exit For
        End If
    Next k
End Function

Làm thế để nếu ai thích vọc những icon khác, ứng dụng khác thì người ta chỉ việc viết sub của người ta và thay
Mã:
If TrayInfo(k).filename = "UnikeyNT.exe" Then
bằng
Mã:
If TrayInfo(k).filename = "xyz.exe" Then ' hoặc kiểm tra sTip

Ngoài ra người ta có thể không muốn nhấn chuột mà muốn làm các việc khác với icon thì người ta chỉ viết sub thích hợp thôi chứ code chính ListIcons không phải sửa. Vọc với icon thì thoải mái vì có hwnd, uID, uCallbackMessage trong TRAYITEM rồi. Thậm chí có thể gọi Shell_NotifyIcon(NIM_DELETE ... để xóa icon. Tất nhiên xóa icon trên tray thôi chứ ứng dụng vẫn chay.
 
Upvote 0
Tôi hướng dẫn chóng sợ hãi nhé:
https://www.virustotal.com/vi/ là trang quét virus nhiều định dạng file với hơn 60 phần mềm duyệt virus tiên tiến có cả BKAV. Và luôn luôn update bản mới nhất
Chỉ cần đăng link hoặc file.
Sau đây là hình ảnh cho file mà OT bị WinDefender cho là Virus
View attachment 211524
Cảm ơn HeSanbi đã kiểm tra giúp ạ. Không có virut thì yên tâm rồi ạ, mai đến công ty OT tải về test thử xem sao ạ.
OT chưa bào giờ thấy code trong chủ đề nào của OT mà lại khủng khiếp như chủ đề này ạ @@!

Hihi,có lẽ thời gian tới anh Tuân cũng tính nâng cấp Atool tích hợp vấn đề QR-Code này luôn nhỉ :p
----
Thực ra vấn đề của OT cũng đã được Bác Siwtom và Anh Hữu Thắng giúp đỡ giải quyết ổn rồi ạ, từ lúc OT đưa vào sử dụng đến giờ chưa thấy phát sinh vấn đề gì ạ (chắc không sợ mấy chú và mấy ông lái xe bên ngoài quét mã vạch nữa rồi).

Nhưng OT thấy đây là vấn đề chung được nhiều người quan tâm vì thế mà mọi người vẫn đưa rất nhiều giải pháp giải pháp khác nên OT vẫn theo dõi để tham khảo thêm ạ, chứ không có ý muốn đòi hỏi gì thêm ạ.
Với OT thì đã đủ (vì IT chỉ cài cho Unikey ở tất cả các máy) nhưng có thể đối với bạn khác còn gặp phải tính huống khác như không sử dụng Unikey mà lại sử dụng VietKey hoặc những tính huống khác như Bác Siwtom đã đề cập ở bài 154 :D, nên rất mong các Bác/Anh và các bạn tiếp tục trao đổi.

Xin trân trọng cảm ơn tất cả mọi người đã giúp đỡ ạ.
Oanh Thơ
 
Upvote 0
Dựa theo code gốc của anh Batman1, mình hoàn chỉnh thêm code để:
+ Tương thích với các version Windows: XP, Vista, 7, 10 32, 64-bit, Office 32,64-bit
+ Tự tìm Unikey trên các cửa sổ thuộc khu vực Traybar
+ Tự tắt, mở Unikey khi con trỏ ở TextBox nhận thiết bị scanner hay khi thoát thì khôi phục lại unikey

Khai báo kiểu dữ liệu và hàm API tương thích với 32 và 64-bit
PHP:
#If Win64 And VBA7 Then
Private Type TBButton
    iBitmap As Long
    idCommand As Long
    fsState As Byte
    fsStyle As Byte
    bReserved(0 To 5) As Byte
    dwData As LongPtr
    iString As LongPtr
End Type
#Else
Private Type TBButton
    iBitmap As Long
    idCommand As Long
    fsState As Byte
    fsStyle As Byte
    bReserved(0 To 5) As Byte
    dwData As Long
    dummy(0 To 3) As Byte
    iString As Long
End Type
#End If

Private Type TBButtonXP
    iBitmap As Long
    idCommand As Long
    fsState As Byte
    fsStyle As Byte
    bReserved(0 To 1) As Byte
    dwData As Long
    iString As Long
End Type

Private Type TRAYDATA
    hwnd As Long
    dummy(0 To 3) As Byte
    uID As Long
    uCallbackMessage As Long
    Reserved(0 To 7) As Long
    hIcon As Long
End Type

Private Type TRAYDATAXP
    #If VBA7 Then
    hwnd As LongPtr
    #Else
    hwnd As Long
    #End If
    uID As Long
    uCallbackMessage As Long
    Reserved(0 To 7) As Long
    hIcon As Long
End Type

#If VBA7 Then
Private Declare PtrSafe Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As LongPtr
Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr
Private Declare PtrSafe Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As LongPtr, ByRef lpdwProcessId As Long) As Long
Private Declare PtrSafe Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr
Private Declare PtrSafe Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As LongPtr
Private Declare PtrSafe Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As LongPtr, ByRef lpAddress As Any, ByRef dwSize As LongPtr, ByVal flAllocationType As Long, ByVal flProtect As Long) As LongPtr
Private Declare PtrSafe Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As LongPtr, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As LongPtr, ByRef lpNumberOfBytesWritten As LongPtr) As Long
Private Declare PtrSafe Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As LongPtr, ByRef lpAddress As Any, ByRef dwSize As LongPtr, ByVal dwFreeType As Long) As LongPtr
Private Declare PtrSafe Function CloseHandle Lib "kernel32.dll" (ByVal hObject As LongPtr) As Long
#Else
Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32.dll" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As Long, ByRef lpdwProcessId As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpAddress As Any, ByRef dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, ByRef lpNumberOfBytesWritten As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32.dll" (ByVal hProcess As Long, ByRef lpAddress As Any, ByRef dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
#End If

Phần code xử lý tắt mở Unikey
Mã:
Function VietnameseOff() As Boolean
    'VietnameseOff = True 'Unikey is clicked
    'VietnameseOff = False 'Not Unikey
    VietnameseOff = Vietnamese(True)
End Function

Function VietnameseOn() As Boolean
    'VietnameseOn = True 'Unikey is clicked
    'VietnameseOn = False 'Not Unikey
    VietnameseOn = Vietnamese(False)
End Function

Function Vietnamese(Optional ByVal TurnOff As Boolean = True) As Boolean
    Dim nCount, k As Long, sTip As String
  
    Dim tb As TBButton, tray As TRAYDATA
    Dim tbXp As TBButtonXP, trayXp As TRAYDATAXP 'Windows XP-> < 10
    Dim pid As Long
    #If VBA7 Then
    Dim pMemory As LongPtr, hTB As LongPtr, hProcess As LongPtr, BytesRead As LongPtr
    #Else
    Dim pMemory As Long, hTB As Long, hProcess As Long, BytesRead As Long
    #End If
    'Variables Added by Nguyen Duy Tuan
    Dim HasUnikeybutton As Boolean, sTemp As String, CountLoop As Long
    Dim WinXPVISTA As Boolean, IsUnikeyVN As Boolean
    '----------------------------------
    WinXPVISTA = IsWinXPOrVista
    hTB = TrayToolbarWnd(Not WinXPVISTA)
  
lbBegenFind:
    CountLoop = CountLoop + 1
    If hTB = 0 Then Exit Function
    GetWindowThreadProcessId hTB, pid
    hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, pid)
    If hProcess = 0 Then Exit Function
    nCount = SendMessage(hTB, TB_BUTTONCOUNT, 0, 0)
    pMemory = VirtualAllocEx(hProcess, ByVal 0, ByVal 1024, MEM_COMMIT, PAGE_READWRITE)
    For k = 0 To nCount - 1
        SendMessage hTB, TB_GETBUTTON, k, pMemory
        sTip = String(256, Chr(0))
        If WinXPVISTA Then
            ReadProcessMemory hProcess, ByVal pMemory, tbXp, LenB(tbXp), BytesRead
            ReadProcessMemory hProcess, ByVal tbXp.dwData, trayXp, LenB(trayXp), BytesRead
            ReadProcessMemory hProcess, ByVal tbXp.iString, ByVal StrPtr(sTip), 256, BytesRead
        Else
            ReadProcessMemory hProcess, ByVal pMemory, tb, LenB(tb), BytesRead
            ReadProcessMemory hProcess, ByVal tb.dwData, tray, LenB(tray), BytesRead
            ReadProcessMemory hProcess, ByVal tb.iString, ByVal StrPtr(sTip), 256, BytesRead
        End If
      
        sTip = Left(sTip, InStr(1, sTip, Chr(0)) - 1)
      
        'Check window has Unikey button
        sTemp = Replace(sTip, "turn off", "")
        sTemp = Replace(sTemp, "turn on", "")
        HasUnikeybutton = sTemp = "Click to  Vietnamese mode" 'DO NOT CHANGE IT
        '------------------------------
        If HasUnikeybutton Then
            IsUnikeyVN = InStr(sTip, " turn off ") > 0
            If (IsUnikeyVN And TurnOff) Or (Not IsUnikeyVN And Not TurnOff) Then
                If WinXPVISTA Then
                    AutoClickUnikey trayXp.hwnd, trayXp.uCallbackMessage, trayXp.uID
                Else
                    AutoClickUnikey tray.hwnd, tray.uCallbackMessage, tray.uID
                End If
                Vietnamese = True
            End If
            Exit For
        End If
    Next k
  
    If Not WinXPVISTA And (Not HasUnikeybutton And CountLoop = 1) Then 'Unikey may be in "TrayNotifyWnd" area
        hTB = TrayToolbarWnd(False)
        GoTo lbBegenFind
    End If
  
    VirtualFreeEx hProcess, pMemory, 0, MEM_RELEASE
    CloseHandle hProcess
End Function

Private Function TrayToolbarWnd(ByVal CheckFloatWindow As Boolean)
    Dim hTB
    If CheckFloatWindow Then 'run it if OS is not Windows XP
        hTB = FindWindow("NotifyIconOverflowWindow", vbNullString)
    End If
    If hTB <> 0 Then
        hTB = FindWindowEx(hTB, 0, "ToolbarWindow32", vbNullString)
    Else
        hTB = FindWindow("Shell_TrayWnd", vbNullString)
        If hTB <> 0 Then
            hTB = FindWindowEx(hTB, 0, "TrayNotifyWnd", vbNullString)
            If hTB <> 0 Then
                hTB = FindWindowEx(hTB, 0, "SysPager", vbNullString)
                If hTB <> 0 Then hTB = FindWindowEx(hTB, 0, "ToolbarWindow32", vbNullString)
            End If
        End If
    End If
    TrayToolbarWnd = hTB
End Function

#If VBA7 Then
Private Sub AutoClickUnikey(ByVal TrayHwnd As LongPtr, _
                            ByVal uCallbackMessage As Long, _
                            ByVal TrayUID As LongPtr)
                      
#Else
Private Sub AutoClickUnikey(ByVal TrayHwnd As Long, _
                            ByVal uCallbackMessage As Long, _
                            ByVal TrayUID As Long)
#End If

    PostMessage TrayHwnd, uCallbackMessage, TrayUID, WM_LBUTTONDOWN
    PostMessage TrayHwnd, uCallbackMessage, TrayUID, WM_LBUTTONUP

End Sub
Giờ OT mới để ý cái video của anh Tuân, hấp dẫn thật ^_^
Form này anh có đưa tình huống xử lý lỗi khi bật CapsLock không vậy ạ (hiện OT đang chưa có điều kiện để thử).
 
Upvote 0
Cảm ơn HeSanbi đã kiểm tra giúp ạ. Không có virut thì yên tâm rồi ạ, mai đến công ty OT tải về test thử xem sao ạ.
OT chưa bào giờ thấy code trong chủ đề nào của OT mà lại khủng khiếp như chủ đề này ạ @@!

Hihi,có lẽ thời gian tới anh Tuân cũng tính nâng cấp Atool tích hợp vấn đề QR-Code này luôn nhỉ :p
----
Thực ra vấn đề của OT cũng đã được Bác Siwtom và Anh Hữu Thắng giúp đỡ giải quyết ổn rồi ạ, từ lúc OT đưa vào sử dụng đến giờ chưa thấy phát sinh vấn đề gì ạ (chắc không sợ mấy chú và mấy ông lái xe bên ngoài quét mã vạch nữa rồi).

Nhưng OT thấy đây là vấn đề chung được nhiều người quan tâm vì thế mà mọi người vẫn đưa rất nhiều giải pháp giải pháp khác nên OT vẫn theo dõi để tham khảo thêm ạ, chứ không có ý muốn đòi hỏi gì thêm ạ.
Với OT thì đã đủ (vì IT chỉ cài cho Unikey ở tất cả các máy) nhưng có thể đối với bạn khác còn gặp phải tính huống khác như không sử dụng Unikey mà lại sử dụng VietKey hoặc những tính huống khác như Bác Siwtom đã đề cập ở bài 154 :D, nên rất mong các Bác/Anh và các bạn tiếp tục trao đổi.

Xin trân trọng cảm ơn tất cả mọi người đã giúp đỡ ạ.
Oanh Thơ

@Nguyễn Hoàng Oanh Thơ
Nếu bài viết đã nhận được kết quả thì lời khuyên của tôi:
1. OT sửa lại bài viết , tổng hợp lại bài và thêm: "Bài viết đã hoàn thành:" có thể sao chép code tốt nhất để đại diện ở bài đăng chính của OT
2. Tải lên file đã được anh @batman1 hoặc file hỗ trợ tốt nhất.
3. Tag @tên người đã hỗ trợ đóng góp cho bạn. và để tên người đóng góp chính là anh @batman1
(Sự đền đáp dễ nhất)

Không biết OT có hiểu điều tôi nói không?
 
Upvote 0
@Nguyễn Hoàng Oanh Thơ
Nếu bài viết đã nhận được kết quả thì lời khuyên của tôi:
1. OT sửa lại bài viết , tổng hợp lại bài và thêm: "Bài viết đã hoàn thành:" có thể sao chép code tốt nhất để đại diện ở bài đăng chính của OT
2. Tải lên file đã được anh @batman1 hoặc file hỗ trợ tốt nhất.
3. Tag @tên người đã hỗ trợ đóng góp cho bạn. và để tên người đóng góp chính là anh @batman1
(Sự đền đáp dễ nhất)

Không biết OT có hiểu điều tôi nói không?

Cảm ơn HeSanbi đã góp ý, OT cũng đã thông tin cụ thể code mà OT đang sử dụng trong chủ đề ở bài 88 rồi ạ:
https://www.giaiphapexcel.com/diendan/threads/khắc-phục-qr-code-sai-do-bộ-gõ-tiếng-việt.140358/page-5#post-902734

OT sẽ tạo file đính kèm và thông tin ở bài 1 ạ,cũng nhờ có bạn mà chủ đề mới hấp dẫn tới tận bài này, hi vọng bạn còn tiếp tục nhiều ý tưởng khác nữa mà chưa Show ra ạ :)
OT chúc bạn sức khỏe và thành công!
 
Upvote 0
Upvote 0
Web KT
Back
Top Bottom