Xin hướng dẫn cách hiển thị MsgBox bằng Tiếng Việt có dấu

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

huevantran

Thành viên chính thức
Tham gia
27/4/22
Bài viết
55
Được thích
42
Em chào các Anh/Chị thành viên GPE,
Hiện tại em muốn hiển thị MsgBox "Đã gửi thành công" trên màn hình Excel sau khi chạy code.
Em đã vào Word để ghi lại Macro, sau đó em có MsgBox là: MsgBox ChrW(272) & "ã g" & ChrW(7917) & "i thành công"
Tuy nhiên khi chạy code thì bị lỗi như hình:
1681712941285.png
Máy em đang sử dụng mã UNI, kiểu gõ Telex.
Nhờ các Anh/Chị xem giúp ạ.
 
Em chào các Anh/Chị thành viên GPE,
Hiện tại em muốn hiển thị MsgBox "Đã gửi thành công" trên màn hình Excel sau khi chạy code.
Em đã vào Word để ghi lại Macro, sau đó em có MsgBox là: MsgBox ChrW(272) & "ã g" & ChrW(7917) & "i thành công"
Tuy nhiên khi chạy code thì bị lỗi như hình:
View attachment 289128
Máy em đang sử dụng mã UNI, kiểu gõ Telex.
Nhờ các Anh/Chị xem giúp ạ.
Dừng thử cách này coi được không, số 3 là thông báo sẽ tắt sau 3s
MyString là đoạn text bạn cần hiển thị

CreateObject("Wscript.shell").PopUp UniCodeConvert(MyString), 3
 
Upvote 0
Function UniConvert(Text As String, InputMethod As String) As String
Dim VNI_Type, Telex_Type, CharCode, Temp, i As Long
UniConvert = Text

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 InputMethod
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


Sub Test4()
Dim Text As String
Text = "DDax guwri thafnh coong"
Application.ExecuteExcel4Macro ("ALERT(""" & UniConvert(Text, "Telex") & """,2)")
End Sub


Góp nhặt trên mạng nha bạn. <3
 
Upvote 0
Em chào các Anh/Chị thành viên GPE,
Hiện tại em muốn hiển thị MsgBox "Đã gửi thành công" trên màn hình Excel sau khi chạy code.
Em đã vào Word để ghi lại Macro, sau đó em có MsgBox là: MsgBox ChrW(272) & "ã g" & ChrW(7917) & "i thành công"
Tuy nhiên khi chạy code thì bị lỗi như hình:
View attachment 289128
Máy em đang sử dụng mã UNI, kiểu gõ Telex.
Nhờ các Anh/Chị xem giúp ạ.

Tôi thì cứ dùng cái hàm đơn giản này:

JavaScript:
Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
    Public Declare PtrSafe Function MessageBoxW Lib "user32" _
                                    (ByVal hwnd As LongPtr, _
                                    ByVal lpText As LongPtr, _
                                    ByVal lpCaption As LongPtr, _
                                    ByVal wType As Long) As Long
#Else
    Private Declare Function GetActiveWindow Lib "user32" () As Long
    Public Declare Function MessageBoxW Lib "user32" _
                            (ByVal hwnd As Long, _
                            ByVal lpText As Long, _
                            ByVal lpCaption As Long, _
                            ByVal wType As Long) As Long
#End If

Public Function MsgBoxUni(ByVal sMsgUni As String, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal sTitleUni As String = vbNullString) As VbMsgBoxResult
    MsgBoxUni = MessageBoxW(GetActiveWindow, StrPtr(sMsgUni), StrPtr(sTitleUni), Buttons)
End Function

Sau đó áp dụng:

MsgBoxuni ChrW(272) & "ã g" & ChrW(7917) & "i thành công"

- Chuyển mã trước trong quá trình thiết kế, khỏi mất thời gian dùng hàm để chuyển đổi Unicode trong quá trình thực thi.
 
Upvote 0
Dừng thử cách này coi được không, số 3 là thông báo sẽ tắt sau 3s
MyString là đoạn text bạn cần hiển thị

CreateObject("Wscript.shell").PopUp UniCodeConvert(MyString), 3
Cháu đã thử cách của chú, nhưng bị báo lỗi không tìm thấy hàm UniCodeConvert chú ạ.
Function UniConvert(Text As String, InputMethod As String) As String
Dim VNI_Type, Telex_Type, CharCode, Temp, i As Long
UniConvert = Text

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 InputMethod
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


Sub Test4()
Dim Text As String
Text = "DDax guwri thafnh coong"
Application.ExecuteExcel4Macro ("ALERT(""" & UniConvert(Text, "Telex") & """,2)")
End Sub


Góp nhặt trên mạng nha bạn. <3
Tôi thì cứ dùng cái hàm đơn giản này:

JavaScript:
Option Explicit

#If VBA7 Then
    Private Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
    Public Declare PtrSafe Function MessageBoxW Lib "user32" _
                                    (ByVal hwnd As LongPtr, _
                                    ByVal lpText As LongPtr, _
                                    ByVal lpCaption As LongPtr, _
                                    ByVal wType As Long) As Long
#Else
    Private Declare Function GetActiveWindow Lib "user32" () As Long
    Public Declare Function MessageBoxW Lib "user32" _
                            (ByVal hwnd As Long, _
                            ByVal lpText As Long, _
                            ByVal lpCaption As Long, _
                            ByVal wType As Long) As Long
#End If

Public Function MsgBoxUni(ByVal sMsgUni As String, Optional ByVal Buttons As VbMsgBoxStyle = vbOKOnly, Optional ByVal sTitleUni As String = vbNullString) As VbMsgBoxResult
    MsgBoxUni = MessageBoxW(GetActiveWindow, StrPtr(sMsgUni), StrPtr(sTitleUni), Buttons)
End Function

Sau đó áp dụng:

MsgBoxuni ChrW(272) & "ã g" & ChrW(7917) & "i thành công"

- Chuyển mã trước trong quá trình thiết kế, khỏi mất thời gian dùng hàm để chuyển đổi Unicode trong quá trình thực thi.
Em đã thử cả 2 cách và đều đã làm được rồi ạ.
Em cảm ơn mọi người đã chỉ giúp em nha.
 
Upvote 0
Cháu đã thử cách của chú, nhưng bị báo lỗi không tìm thấy hàm UniCodeConvert chú ạ.


Em đã thử cả 2 cách và đều đã làm được rồi ạ.
Em cảm ơn mọi người đã chỉ giúp em nha.
chưa xong đâu .. tôi thấy có vẻ chịu học nên tôi vẽ cho thôi

Muốn sử dụng tiếng việt cho Msgbox thì khi chuyển mã bất cứ từ nào có dấu phải chuyển hết ... nếu không sẽ đúng trên máy này và sai trên máy khác

hãy tìm trên GPE này có hết rồi hàm nào chuyển mã đạt theo tiêu chí dòng trên thì dùng còn không thì bỏ đi không cần thiết lưu lại

xem hình

1681735261511.png

Thành công nó sẽ như sau

Mã:
"Th" & ChrW(224) & "nh c" & ChrW(244) & "ng"

Như vậy sau này không mất công làm lại nữa

Tham khảo bài sau của Tôi

 
Lần chỉnh sửa cuối:
Upvote 0
Nếu chỉ để hiển thị như yêu cầu, dùng cách của bài 2 là nhanh gọn:
Rich (BB code):
Sub dagui()
CreateObject("Wscript.shell").PopUp ChrW(272) & "ã g" & ChrW(7917) & "i thành công", 3
End Sub
 
Upvote 0
chưa xong đâu .. tôi thấy có vẻ chịu học nên tôi vẽ cho thôi

Muốn sử dụng tiếng việt cho Msgbox thì khi chuyển mã bất cứ từ nào có dấu phải chuyển hết ... nếu không sẽ đúng trên máy này và sai trên máy khác

hãy tìm trên GPE này có hết rồi hàm nào chuyển mã đạt theo tiêu chí dòng trên thì dùng còn không thì bỏ đi không cần thiết lưu lại

xem hình

View attachment 289136

Thành công nó sẽ như sau

Mã:
"Th" & ChrW(224) & "nh c" & ChrW(244) & "ng"

Như vậy sau này không mất công làm lại nữa

Tham khảo bài sau của Tôi

Cảm ơn anh đã chỉ dẫn, em sẽ lưu ý chuyển mã hết các ký tự có dấu để tránh bị lỗi font khi chạy ở máy khác.
Nếu chỉ để hiển thị như yêu cầu, dùng cách của bài 2 là nhanh gọn:
Rich (BB code):
Sub dagui()
CreateObject("Wscript.shell").PopUp ChrW(272) & "ã g" & ChrW(7917) & "i thành công", 3
End Sub
Cảm ơn anh, em đã thử, kết quả cũng chính xác luôn ạ.
 
Upvote 0
Web KT

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

Back
Top Bottom