Tự động đóng Msgbox

Euler

Administrator
Thành viên BQT
Đoạn code dưới đây sẽ hiển thị thông báo ra giữa màn hình là "tuhocvba.net"
Mã:
Sub Sample()
    MsgBox "tuhocvba.net"
End Sub
Bạn cần đăng nhập để thấy đính kèm

và nó chỉ biến mất khi bạn ấn vào phím OK.
Nếu người dùng không ấn vào phím OK thì điều gì sẽ xảy ra? Hộp thoại này cứ đứng đó và không chịu biến mất đi! Muốn nó biến mất, người dùng phải ấn vào OK.
Vậy thì nếu chúng ta muốn nó tự động biến mất sau một khoảng thời gian nhất định thì phải làm thế nào?
Thật đáng tiếc là Excel VBA không cung cấp cho chúng ta hàm tiện lợi như thế.
Tuy nhiên chúng ta có thể sử dụng Windows Scripting Host(WSH) để làm việc này.
Popup của WSH sẽ hiển thị ra và tự động biến mất sau khoảng thời gian nhất định. Khoảng thời gian này chúng ta có thể chỉ định tùy ý.
Sau đây hãy xem đoạn code mẫu dưới đây:
Mã:
Sub Sample2()
    Dim WSH As Object
    Set WSH = CreateObject("WScript.Shell")
    WSH.Popup "Se tu dong Close sau 5 giay", 5, "Title", vbInformation
    Set WSH = Nothing
End Sub
Tôi đã thí nghiệm code trên và thấy đúng là hộp thoại cảnh báo đã tự động close. Khoảng thời gian không chính xác 5s, có lẽ là khoảng 6-7s. Theo lý thuyết thì sẽ đóng sau 5s, nếu ai giải thích giúp tôi điều này thì tôi rất biết ơn.

Cấu trúc của Popup được mô tả như sau:
WSH.Popup(strNoiDungCanhBao,[nSecondsToWait],[strTitle],[nType])

Tên tham sốÝ nghĩa
strNoiDungCanhBaoĐây là nội dung cảnh báo, bạn nhất định phải chỉ định tham số này, không được lược bỏ.
nSecondsToWaitThời gian để tự động đóng hộp thoại (đơn vị: giây ). Bạn có thể lược bỏ tham số này.
strTitleTiêu đề hộp thoại cảnh báo, có thể lược bỏ tham số này.
nTypeChủng loại icon và nút bấm. Bạn có thể lược bỏ tham số này.
Tất nhiên, trước khoảng thời gian mà bạn chỉ định sẽ đóng hộp thoại tự động, nếu người dùng ấn vào nút bấm trên hộp thoại thì hộp thoại đó cũng sẽ biến mất.
Giả sử bạn chỉ định sau 5s thì hộp thoại tự động đóng. Nhưng ở giây thứ 3, người dùng ấn OK thì lập tức hộp thoại sẽ bị đóng.

Tiếp theo tôi diễn giải tham số nType :
Giá trịTên hằng số trong VBAÝ nghĩa
0vbOKOnlyHiển thị nút bấm OK.
1vbOKCancelHiển thị nút bấm OKCancel
2vbAbortRetryIgnoreHiển thị nút bấm AbortRetryIgnore.
Abort là dừng giữa chừng.
Retry là cố chạy lại lần nữa.
Ignore là phớt lờ.
3vbYesNoCancelHiển thị nút bấm YesNoCancel
4vbYesNoHiển thị nút bấm YesNo
5vbRetryCancelHiển thị nút bấm RetryCancel
16vbCritical
Bạn cần đăng nhập để thấy đính kèm
32vbQuestion
Bạn cần đăng nhập để thấy đính kèm
48vbExclamation
Bạn cần đăng nhập để thấy đính kèm
64vbInformation
Bạn cần đăng nhập để thấy đính kèm

Chúng ta thấy rằng các hằng số vbYesNo , vbQuestion ,... giống với hàm .

Để biết người dùng ấn vào nút bấm nào trên hộp thoại cảnh báo của phương thức Popup-điều này cũng tương tự như , ta có bảng dưới đây:
Giá trịTên hằng số trong VBANút bấm mà người dùng đã nhấn là
1vbOKNgười dùng ấn vào nút OK
2vbCancelNgười dùng ấn vào nút Cancel
3vbAbortNgười dùng ấn vào nút Abort (dừng giữa chừng)
4vbRetryNgười dùng ấn vào nút Retry (chạy lại)
5vbIgnoreNgười dùng ấn vào nút Ignore (phớt lờ)
6vbYesNgười dùng ấn vào nút Yes
7vbNoNgười dùng ấn vào nút No

Chúng ta thấy rằng nó cũng giống với các hằng số của hàm . Khi vượt quá thời gian tự động đóng hộp thoại, giá trị trả về là -1.
Như vậy, qua bảng trên, chúng ta hiểu thêm về đoạn code mà Admin tuhocvba hỗ trợ bạn @TranTrinh .
Mã:
Sub Sample2()
    Dim wsh As Object, msg As String
    Set wsh = CreateObject("WScript.Shell")
    msg = "tuhocvba"
    If wsh.Popup(msg, 5, "Tieude", 4) = 6 Then Range("A1") = 123
End Sub
Nếu người dùng ấn vào phím YES (=6) thì ghi vào ô A1 giá trị 123.

Nguồn tham khảo và dịch:

Ngoài ứng dụng tự động đóng hộp thoại, , chúng ta đã biết bạn @NhanSu đã chỉ ra rằng có thể ứng dụng WSH POPUP để hiển thị hộp thoại mà nội dung là tiếng việt có dấu.
 
Top