Tặng Hàm MsgBox Việt hóa bằng Unicode tuyệt đẹp!

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,655
Được thích
16,711
Giới tính
Nam
Tặng Hàm MsgBox Việt hóa bằng Unicode tuyệt đẹp!

Với cải tiến lần này, MsgBox thân thiện hơn, đẹp hơn, nút lệnh theo Application nên mượt mà hơn.

Có thể chọn Nút lệnh mặc định để khi Enter là chạy thủ tục tại nút đó

Đặc biệt, một phát hiện mới là có thể tô đậm dòng tiêu đề bên trong nội dung MsgBox

Và hơn thế nữa, đó chính là có thể Việt hóa tên nút lệnh một cách dễ dàng theo ý muốn của chúng ta!

Picture1.jpg

Hàm chuyển đổi nút lệnh:

Mã:
Private Function MsgBoxHookProc(ByVal lMsg As Long, _
                                ByVal wParam As Long, _
                                ByVal lParam As Long) As Long
                            
    If lMsg = HCBT_ACTIVATE Then
        [COLOR=#006400]'De biet Charcode, dung ham ASCW("KyTu")[/COLOR]
        StrOK = ChrW$(272) & ChrW$(7891) & "&ng " & ChrW$(253)     [COLOR=#006400] 'Dong y[/COLOR]
        StrCancel = "&H" & ChrW$(7911) & "y b" & ChrW$(7887)       [COLOR=#006400] 'Huy bo[/COLOR]
        StrAbort = "&H" & ChrW$(7911) & "y ngang"                  [COLOR=#006400] 'Huy ngang[/COLOR]
        StrRetry = "&Th" & ChrW$(7917) & " l" & ChrW$(7841) & "i"  [COLOR=#006400] 'Thu lai[/COLOR]
        StrIgnore = "&B" & ChrW$(7887) & " qua"                     [COLOR=#006400]'Bo qua[/COLOR]
        StrYes = "&Có"                                              [COLOR=#006400]'Co[/COLOR]
        StrNo = "&Không"                                           [COLOR=#006400] 'Khong[/COLOR]
        StrYesAll = "Có &t" & ChrW$(7845) & "t c" & ChrW$(7843)     [COLOR=#006400]'Co tat ca[/COLOR]
    
        SetDlgItemText wParam, IdOK, StrConv(StrOK, vbUnicode)
        SetDlgItemText wParam, IdCancel, StrConv(StrCancel, vbUnicode)
        SetDlgItemText wParam, IdAbort, StrConv(StrAbort, vbUnicode)
        SetDlgItemText wParam, IdRetry, StrConv(StrRetry, vbUnicode)
        SetDlgItemText wParam, IdIgnore, StrConv(StrIgnore, vbUnicode)
        SetDlgItemText wParam, IdYes, StrConv(StrYes, vbUnicode)
        SetDlgItemText wParam, IdNo, StrConv(StrNo, vbUnicode)
        SetDlgItemText wParam, IdYesAll, StrConv(StrYesAll, vbUnicode)
    
        UnhookWindowsHookEx hHook
    End If
    MsgBoxHookProc = False
End Function

Hàm MyUniMsgBox:

Mã:
Function MyUniMsgBox(ByVal msgTitle As String, _
                     Optional msgText As String, _
                     Optional msgButtonType As MsoAlertButtonType, _
                     Optional msgIconType As MsoAlertIconType, _
                     Optional msgDefaultType As MsoAlertDefaultType) As VbMsgBoxResult
[COLOR=#006400]    'Cau truc:
    'MyUniMsgBox TieuDe (bat buoc), NoiDung (bat buoc), [KieuNutLenh], [KieuIcon], [KieuNutLenhMacDinh][/COLOR]
 
    hHook = SetWindowsHookEx(WH_CBT, AddressOf MsgBoxHookProc, 0, GetCurrentThreadId)
 
    On Error GoTo DefaultFirst
    MyUniMsgBox = Application.Assistant.DoAlert( _
                                        msgTitle, _
                                        msgText, _
                                        msgButtonType, _
                                        msgIconType, _
                                        msgDefaultType, _
                                        msoAlertCancelDefault, _
                                        False)
    Exit Function

DefaultFirst:
    On Error Resume Next
    MyUniMsgBox = Application.Assistant.DoAlert( _
                                        msgTitle, _
                                        msgText, _
                                        msgButtonType, _
                                        msgIconType, _
                                        msoAlertDefaultFirst, _
                                        msoAlertCancelDefault, _
                                        False)
End Function

Cách sử dụng:

Mã:
        MyUniMsgBox TieuDe, NoiDung

Picture2.jpg

Mã:
        MyUniMsgBox TieuDe, NoiDung & .[B3], _
                            msoAlertButtonOK, _
                            msoAlertIconInfo, _
                            msoAlertDefaultFirst

Picture3.jpg

Mã:
        MyUniMsgBox TieuDe, NoiDung & .[B6], _
                            msoAlertButtonYesNoCancel, _
                            msoAlertIconQuery, _
                            msoAlertDefaultThird

Picture4.jpg

Mã:
        MyUniMsgBox TieuDe, NoiDung & .[B8], _
                            msoAlertButtonAbortRetryIgnore, _
                            msoAlertIconCritical, _
                            msoAlertDefaultSecond

Picture5.jpg

Mã:
        MyUniMsgBox TieuDe, NoiDung & .[B7], _
                            msoAlertButtonYesAllNoCancel, _
                            msoAlertIconWarning, _
                            msoAlertDefaultFourth

Picture6.jpg

Các bạn sẽ thấy có quá nhiều thủ tục trong hàm, làm sao nhớ đây? Đơn giản thôi, các bạn chỉ cần nhớ cấu trúc:

MyUniMsgBox Tiêu đề (bắt buộc), [Nội dung], [Kiểu nút lệnh], [Kiểu Icon], [Kiểu nút lệnh mặc định]

Các kiểu trong dấu ngoặc móc là không bắt buộc, có hay không cũng không thành vấn đề, tùy theo kiểu thông báo mà các bạn thêm hoặc bớt.

Nhưng các bạn vẫn còn thắc mắc là trong cấu trúc có nhiều tiếng Anh khó nhớ quá, xin thưa là không có vấn đề gì, cứ sau khi đặt dấu phẩy sau Tiêu đề là nó sẽ hiển thị các List Constants cho các bạn lựa chọn!

Picture7.jpg

Picture8.jpg

Chúc các bạn có các thông báo thật Việt Nam!
 

File đính kèm

  • MyUniMsgBox.xls
    42 KB · Đọc: 1,249
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Gửi Bác. Tôi có mở file gửi kèm của bác đúng là có mượt nhưng các Thông báo chưa thật Việt Nam (tilte của Thông báo)
Bác xem giúp máy của tôi bị lỗi cái gì.
https://www.dropbox.com/s/d6x9n43dpketmwn/Doc1.doc

Thật ra không có gì khó khăn cả, như hình tôi gửi lên và bạn nhìn cũng biết, những hình ảnh đó đều là của Excel 2003 và Win XP cả.

Lý do mà bạn bị như thế là do bạn không chuyển font trong Display của hệ thống mà thôi.

Bạn click chuột phải ngoài Desktop, chọn vào Properties, tại đây chọn vào thẻ Appearence, bấm vào nút Avanced.

Tại đây, mục Item bạn chọn Active Title Bar, mục Font bạn có thể chọn là font Verdana hoặc Tahoma ... tuỳ ý (nhưng phải là font hiển thị được Unicode).

attachment.php


Bạn có thể cá nhân hoá cho nó dầy hơn hay mỏng hơn, cỡ chữ to hơn hay nhỏ hơn tuỳ bạn.

Giờ đây bạn có thể nhịp chân rồi đấy nhé!

---------------------------------------------

P/s: Đây là một cài đặt hết sức bình thường vì nó là font chuẩn Unicode cho nên bạn không phải ngại khi cài đặt như thế.

Chúc bạn có những MsgBox cực đẹp!

---------------------------------------------
Thật ra từ Win Vista trở về sau, nó đã mặc định sẳn là font Unicode rồi (Segoe UI), nên chúng ta không cần phải chỉnh nữa.

attachment.php
 

File đính kèm

  • Picture1.jpg
    Picture1.jpg
    77.6 KB · Đọc: 543
  • 15-06-2013 17-44-55.jpg
    15-06-2013 17-44-55.jpg
    88.9 KB · Đọc: 530
Lần chỉnh sửa cuối:
Upvote 0
Từ những hàm UniMsgBox sưu tầm, tôi đã cải tiến lại và gửi tặng các bạn.

Với cải tiến lần này, MsgBox thân thiện hơn, đẹp hơn, nút lệnh theo Application nên mượt mà hơn.

Có thể chọn Nút lệnh mặc định để khi Enter là chạy thủ tục tại nút đó

Đặc biệt, một phát hiện mới là có thể tô đậm dòng tiêu đề bên trong nội dung MsgBox

Và hơn thế nữa, đó chính là có thể Việt hóa tên nút lệnh một cách dễ dàng theo ý muốn của chúng ta!

attachment.php


Hàm chuyển đổi nút lệnh:

Mã:
Private Function MsgBoxHookProc(ByVal lMsg As Long, _
                                ByVal wParam As Long, _
                                ByVal lParam As Long) As Long
                                
    If lMsg = HCBT_ACTIVATE Then
        [COLOR=#006400]'De biet Charcode, dung ham ASCW("KyTu")[/COLOR]
        StrOK = ChrW$(272) & ChrW$(7891) & "&ng " & ChrW$(253)     [COLOR=#006400] 'Dong y[/COLOR]
        StrCancel = "&H" & ChrW$(7911) & "y b" & ChrW$(7887)       [COLOR=#006400] 'Huy bo[/COLOR]
        StrAbort = "&H" & ChrW$(7911) & "y ngang"                  [COLOR=#006400] 'Huy ngang[/COLOR]
        StrRetry = "&Th" & ChrW$(7917) & " l" & ChrW$(7841) & "i"  [COLOR=#006400] 'Thu lai[/COLOR]
        StrIgnore = "&B" & ChrW$(7887) & " qua"                     [COLOR=#006400]'Bo qua[/COLOR]
        StrYes = "&Có"                                              [COLOR=#006400]'Co[/COLOR]
        StrNo = "&Không"                                           [COLOR=#006400] 'Khong[/COLOR]
        StrYesAll = "Có &t" & ChrW$(7845) & "t c" & ChrW$(7843)     [COLOR=#006400]'Co tat ca[/COLOR]
        
        SetDlgItemText wParam, IdOK, StrConv(StrOK, vbUnicode)
        SetDlgItemText wParam, IdCancel, StrConv(StrCancel, vbUnicode)
        SetDlgItemText wParam, IdAbort, StrConv(StrAbort, vbUnicode)
        SetDlgItemText wParam, IdRetry, StrConv(StrRetry, vbUnicode)
        SetDlgItemText wParam, IdIgnore, StrConv(StrIgnore, vbUnicode)
        SetDlgItemText wParam, IdYes, StrConv(StrYes, vbUnicode)
        SetDlgItemText wParam, IdNo, StrConv(StrNo, vbUnicode)
        SetDlgItemText wParam, IdYesAll, StrConv(StrYesAll, vbUnicode)
        
        UnhookWindowsHookEx hHook
    End If
    MsgBoxHookProc = False
End Function

Hàm MyUniMsgBox:

Mã:
Function MyUniMsgBox(ByVal msgTitle As String, _
                     Optional msgText As String, _
                     Optional msgButtonType As MsoAlertButtonType, _
                     Optional msgIconType As MsoAlertIconType, _
                     Optional msgDefaultType As MsoAlertDefaultType) As VbMsgBoxResult
[COLOR=#006400]    'Cau truc:
    'MyUniMsgBox TieuDe (bat buoc), NoiDung (bat buoc), [KieuNutLenh], [KieuIcon], [KieuNutLenhMacDinh][/COLOR]
    
    hHook = SetWindowsHookEx(WH_CBT, AddressOf MsgBoxHookProc, 0, GetCurrentThreadId)
    
    On Error GoTo DefaultFirst
    MyUniMsgBox = Application.Assistant.DoAlert( _
                                        msgTitle, _
                                        msgText, _
                                        msgButtonType, _
                                        msgIconType, _
                                        msgDefaultType, _
                                        msoAlertCancelDefault, _
                                        False)
    Exit Function

DefaultFirst:
    On Error Resume Next
    MyUniMsgBox = Application.Assistant.DoAlert( _
                                        msgTitle, _
                                        msgText, _
                                        msgButtonType, _
                                        msgIconType, _
                                        msoAlertDefaultFirst, _
                                        msoAlertCancelDefault, _
                                        False)
End Function

Cách sử dụng:

Mã:
        MyUniMsgBox TieuDe, NoiDung
attachment.php


Mã:
        MyUniMsgBox TieuDe, NoiDung & .[B3], _
                            msoAlertButtonOK, _
                            msoAlertIconInfo, _
                            msoAlertDefaultFirst
attachment.php


Mã:
        MyUniMsgBox TieuDe, NoiDung & .[B6], _
                            msoAlertButtonYesNoCancel, _
                            msoAlertIconQuery, _
                            msoAlertDefaultThird
attachment.php


Mã:
        MyUniMsgBox TieuDe, NoiDung & .[B8], _
                            msoAlertButtonAbortRetryIgnore, _
                            msoAlertIconCritical, _
                            msoAlertDefaultSecond
attachment.php


Mã:
        MyUniMsgBox TieuDe, NoiDung & .[B7], _
                            msoAlertButtonYesAllNoCancel, _
                            msoAlertIconWarning, _
                            msoAlertDefaultFourth
attachment.php



Các bạn sẽ thấy có quá nhiều thủ tục trong hàm, làm sao nhớ đây? Đơn giản thôi, các bạn chỉ cần nhớ cấu trúc:

MyUniMsgBox Tiêu đề (bắt buộc), [Nội dung], [Kiểu nút lệnh], [Kiểu Icon], [Kiểu nút lệnh mặc định]

Các kiểu trong dấu ngoặc móc là không bắt buộc, có hay không cũng không thành vấn đề, tùy theo kiểu thông báo mà các bạn thêm hoặc bớt.

Nhưng các bạn vẫn còn thắc mắc là trong cấu trúc có nhiều tiếng Anh khó nhớ quá, xin thưa là không có vấn đề gì, cứ sau khi đặt dấu phẩy sau Tiêu đề là nó sẽ hiển thị các List Constants cho các bạn lựa chọn!

attachment.php


Chúc các bạn có các thông báo thật Việt Nam!
Em sử dụng hàm của anh như sau: MyUniMsgBox TieuDe, NoiDung, msoAlertButtonOKCancel, msoAlertIconWarning
Em có viết một Sub để xóa một vùng dữ liệu. Nếu người dùng nhấn nút đồng ý thì xóa nhưng chưa thực hiện được.
Rất mong Anh và các bạn xem giúp!. Em xin cảm ơn|!.
Mã:
Public Sub Xoa()       
Dim TieuDe As String, NoiDung As String
    Dim Ws As Worksheet
    'Dim MyUniMsgBox As Integer
    With Sheets("Bang_phu")
        TieuDe = .[K4].Value    '.[A2] & Chr(10) & .[A3]  "Chr(10) hoac vblf la de xuong dong)
        NoiDung = .[K3].Value
    End With
    ActiveSheet.Unprotect
    Set Ws = Sheets("Tet")
    Ws.Select
    MyUniMsgBox TieuDe, NoiDung, msoAlertButtonOKCancel, msoAlertIconWarning
    If msoAlertButtonOK = True Then
        Ws.Range("A5:H100").EntireRow.Delete
    Else
        Exit Sub
    End If
    Set Ws = Nothing
End Sub
 

File đính kèm

  • Tet.rar
    23.4 KB · Đọc: 55
Lần chỉnh sửa cuối:
Upvote 0
Em sử dụng hàm của anh như sau: MyUniMsgBox TieuDe, NoiDung, msoAlertButtonOKCancel, msoAlertIconWarning
Em có viết một Sub để xóa một vùng dữ liệu. Nếu người dùng nhấn nút đồng ý thì xóa nhưng chưa thực hiện được.
Rất mong Anh và các bạn xem giúp!. Em xin cảm ơn|!.
Mã:
Public Sub Xoa()       
Dim TieuDe As String, NoiDung As String
    Dim Ws As Worksheet
    'Dim MyUniMsgBox As Integer
    With Sheets("Bang_phu")
        TieuDe = .[K4].Value    '.[A2] & Chr(10) & .[A3]  "Chr(10) hoac vblf la de xuong dong)
        NoiDung = .[K3].Value
    End With
    ActiveSheet.Unprotect
    Set Ws = Sheets("Tet")
    Ws.Select
    MyUniMsgBox TieuDe, NoiDung, msoAlertButtonOKCancel, msoAlertIconWarning
    If msoAlertButtonOK = True Then
        Ws.Range("A5:H100").EntireRow.Delete
    Else
        Exit Sub
    End If
    Set Ws = Nothing
End Sub
Hì hì... Loay hoay một hồi mới tìm ra cách khắc phục
Mã:
Public Sub Xoa()
    Dim TieuDe As String, NoiDung As String, Thongbao As String
    Dim Ws As Worksheet
    With Sheets("Bang_phu")
        TieuDe = .[K4].Value    '.[A2] & Chr(10) & .[A3]  "Chr(10) hoac vblf la de xuong dong)
        NoiDung = .[K3].Value
    End With
    ActiveSheet.Unprotect
    Set Ws = Sheets("Tet")
    Ws.Select
    Thongbao = MyUniMsgBox(TieuDe, NoiDung, msoAlertButtonOKCancel, msoAlertIconWarning)
    If Thongbao = True Then
        Ws.Range("A5:H100").EntireRow.Delete
    Else
        Exit Sub
    End If
    Set Ws = Nothing
End Sub
 
Upvote 0
Em sử dụng hàm của anh như sau: MyUniMsgBox TieuDe, NoiDung, msoAlertButtonOKCancel, msoAlertIconWarning
Em có viết một Sub để xóa một vùng dữ liệu. Nếu người dùng nhấn nút đồng ý thì xóa nhưng chưa thực hiện được.
Rất mong Anh và các bạn xem giúp!. Em xin cảm ơn|!.
Mã:
Public Sub Xoa()       
Dim TieuDe As String, NoiDung As String
    Dim Ws As Worksheet
    'Dim MyUniMsgBox As Integer
    With Sheets("Bang_phu")
        TieuDe = .[K4].Value    '.[A2] & Chr(10) & .[A3]  "Chr(10) hoac vblf la de xuong dong)
        NoiDung = .[K3].Value
    End With
    ActiveSheet.Unprotect
    Set Ws = Sheets("Tet")
    Ws.Select
    MyUniMsgBox TieuDe, NoiDung, msoAlertButtonOKCancel, msoAlertIconWarning
    If msoAlertButtonOK = True Then
        Ws.Range("A5:H100").EntireRow.Delete
    Else
        Exit Sub
    End If
    Set Ws = Nothing
End Sub

Tôi sửa lại code cho bạn:

Mã:
Public Sub Xoa()
    Dim TieuDe As String, NoiDung As String, Thongbao As String
    Dim Ws As Worksheet
    With Sheets("Bang_phu")
        TieuDe = .[K4].Value    '.[A2] & Chr(10) & .[A3]  "Chr(10) hoac vblf la de xuong dong)
        NoiDung = .[K3].Value
    End With
    ActiveSheet.Unprotect
    Set Ws = Sheets("Tet")
    Ws.Select
    Thongbao = MyUniMsgBox(TieuDe, NoiDung, msoAlertButtonOKCancel, msoAlertIconWarning)
[COLOR=#ff0000][B]    If Thongbao = [/B][/COLOR][COLOR=#0000ff][B][SIZE=4]1 [/SIZE][/B][/COLOR][COLOR=#ff0000][B]Then[/B][/COLOR]
        Ws.Range("A5:H100").EntireRow.Delete
    End If
    Set Ws = Nothing
End Sub

Ở dòng mà tôi tô đỏ, có chỉ số là 1 màu xanh, bạn nên căn cứ theo thông số của hàm MyUniMsgBox mà làm việc thôi, không có TRUE hoặc FALSE gì ở đây hết!

Private Const IdOK = 1
Private Const IdCancel = 2
Private Const IdAbort = 3
Private Const IdRetry = 4
Private Const IdIgnore = 5
Private Const IdYes = 6
Private Const IdNo = 7
Private Const IdYesAll = 8
 
Upvote 0
sao chữ "đồng ý" của em nó lại hiện "đồng u" thế , em dùng win 8.1
Capture.JPG
 
Upvote 0

File đính kèm

  • Setting.jpg
    Setting.jpg
    83.1 KB · Đọc: 99
Upvote 0
có cách nào chuyển file đi từa lưa máy này máy kia mà không bị lỗi font không thầy.
Có thể đổi font hệ thống bằng code khi chạy chương trình, trả lại font hệ thống khi thoát chương trình. Song, cách này cũng khá mạo hiểm bởi nếu phát sinh ra lỗi thì không thể trả lại font hệ thống.
 
Upvote 0
Có thể đổi font hệ thống bằng code khi chạy chương trình, trả lại font hệ thống khi thoát chương trình. Song, cách này cũng khá mạo hiểm bởi nếu phát sinh ra lỗi thì không thể trả lại font hệ thống.
thầy cho em hỏi thêm làm thế nào làm cho khung msgbox nó được như thế này vậy thầy
Chưa có tên.png
nó mờ mờ vậy ấy thầy.
để em tìm cách hiển thị tiếng việt bằng cách khác xem được không ^^
 
Upvote 0
Upvote 0
đây thầy, đâu có liên quan gì đến win đâu thầy.
Bạn nói mờ là cụ thể nó mờ cái gì? Tôi thấy nó bình thường mà? Riêng cái hàm của tôi viết cho MsgBox là không bị lỗi nha, chỉ tại font hiển thị của máy không đúng thôi. Chỉnh lại font hệ thống kiểu Unicode là được.
 
Upvote 0
Bạn nói mờ là cụ thể nó mờ cái gì? Tôi thấy nó bình thường mà? Riêng cái hàm của tôi viết cho MsgBox là không bị lỗi nha, chỉ tại font hiển thị của máy không đúng thôi. Chỉnh lại font hệ thống kiểu Unicode là được.
vâng. em xin giải thích mờ mờ thế này
msgbox bình thường thì nó màu trắng đục luôn với nút ok nó vuông vắn chứ không phải cái khung màu xanh dương thế kia và nút ok lại có viền mờ xung quanh màu xanh như thế?. trong file em đính kèm #17 có cả 4 mẫu như thế ấy thầy.
có phải chỉ cần thêm code của thầy
Mã:
Private Function MsgBoxHookProc(ByVal lMsg As Long, _
                                ByVal wParam As Long, _
                                ByVal lParam As Long) As Long
                                
    If lMsg = HCBT_ACTIVATE Then
        'De biet Charcode, dung ham ASCW("KyTu")
        StrOK = ChrW$(272) & ChrW$(7891) & "&ng " & ChrW$(253)      'Dong y
        StrCancel = "&H" & ChrW$(7911) & "y b" & ChrW$(7887)        'Huy bo
        StrAbort = "&H" & ChrW$(7911) & "y ngang"                   'Huy ngang
        StrRetry = "&Th" & ChrW$(7917) & " l" & ChrW$(7841) & "i"   'Thu lai
        StrIgnore = "&B" & ChrW$(7887) & " qua"                     'Bo qua
        StrYes = "&Có"                                              'Co
        StrNo = "&Không"                                            'Khong
        StrYesAll = "Có &t" & ChrW$(7845) & "t c" & ChrW$(7843)     'Co tat ca
        
        SetDlgItemText wParam, IdOK, StrConv(StrOK, vbUnicode)
        SetDlgItemText wParam, IdCancel, StrConv(StrCancel, vbUnicode)
        SetDlgItemText wParam, IdAbort, StrConv(StrAbort, vbUnicode)
        SetDlgItemText wParam, IdRetry, StrConv(StrRetry, vbUnicode)
        SetDlgItemText wParam, IdIgnore, StrConv(StrIgnore, vbUnicode)
        SetDlgItemText wParam, IdYes, StrConv(StrYes, vbUnicode)
        SetDlgItemText wParam, IdNo, StrConv(StrNo, vbUnicode)
        SetDlgItemText wParam, IdYesAll, StrConv(StrYesAll, vbUnicode)
        
        UnhookWindowsHookEx hHook
    End If
    MsgBoxHookProc = False
End Function
thì có thể chuyển thành tiếng việt được không?
 
Upvote 0
vâng. em xin giải thích mờ mờ thế này
msgbox bình thường thì nó màu trắng đục luôn với nút ok nó vuông vắn chứ không phải cái khung màu xanh dương thế kia và nút ok lại có viền mờ xung quanh màu xanh như thế?. trong file em đính kèm #17 có cả 4 mẫu như thế ấy thầy.
có phải chỉ cần thêm code của thầy
Ui trời, tôi có thể mã hóa tiếng Việt các nút lệnh của MsgBox trong VBA luôn, nhưng để tôi nói rõ hơn vấn đề này cho bạn hiểu.

Có thể có nhiều cách để gọi cái thông báo đó mà chúng ta tạm gọi là MsgBox đi. Những gì bạn thấy MsgBox mượt mà, có cái mà bạn gọi là xanh nhạt, lúc ẩn lúc hiện bao quanh nút lệnh, thì đó chính là những Control hoặc Object trực tiếp của Application. Còn MsgBox mà ta thường dùng trong VBA nó có nút lệnh vuông, màu nền có 2 phần trắng và xám nhạt, nó thô thiển hơn và không có cái viền xanh lơ bao quanh, nói rõ về cái viền này, nó chính là nút default chỉ bao quanh đúng 1 nút (trong nhiều nút) mà chúng ta chỉ định.

Với các MsgBox do Application quản lý, đặc điểm của chúng không những đẹp, nhưng nó quan trọng hơn là nó có thể nhận mã Unicode, tức ta có thể đọc được chữ tiếng Việt có dấu (cái này ta chẳng cần code kiếc gì nó cũng hiện được tiếng Việt). Với MsgBox của VBA thì lại hoàn toàn không thể, trừ khi ta làm hàm hay các thủ tục cho nó.

Bạn thử với InputBox và Application.InputBox bạn sẽ hiểu hơn về một dạng của VBA và một dạng do Application tác động trực tiếp.
 
Upvote 0
Web KT
Back
Top Bottom