Tự động đóng Msgbox

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ĩastrNoiDungCanhBaoĐâ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.

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ĩa0vbOKOnlyHiển thị nút bấm OK.1vbOKCancelHiển thị nút bấm OKCancel2vbAbortRetryIgnoreHiể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 YesNoCancel4vbYesNoHiển thị nút bấm YesNo5vbRetryCancelHiển thị nút bấm RetryCancel16vbCritical

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 OK2vbCancelNgười dùng ấn vào nút Cancel3vbAbortNgườ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 Yes7vbNoNgườ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

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

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.

Đoạn code dưới đây sẽ hiển thị thông báo ra giữa màn hình là “tuhocvba.net”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?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(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:Cấu trúc của Popup được mô tả như sau:WSH.Popup(strNoiDungCanhBao,[nSecondsToWait],[strTitle],[nType])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 :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: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àNhư vậy, qua bảng trên, chúng ta hiểu thêm về đoạn code màhỗ trợ bạn @TranTrinh Nếu người dùng ấn vào phímthì ghi vào ô A1 giá trị 123.Nguồn tham khảo và dịch: