Menampilkan informasi atau sebuah pesan yang digunakan sebagai interaksi antara program dengan pengguna merupakan hal yang sangat penting dalam sebuah aplikasi.
Biasanya untuk menampilkan sebuah pesan menggunakan fungsi dari MSGBOX.
Materi tentang Msgbox bisa dibaca di Materi VBA Dasar Msgbox
vba.co.id
Seperti yang sudah dipelajari, msgbox akan menutup jika sudah ada aksi atau Interaksi dari pengguna berupa penekanan tombol atau menutup Msgbox dengan mengklik tanda silang.
Nah kali ini, saya akan membuat sebuah Msgbox yang bisa menutup sendiri sesuai dengan waktu yang ditentukan.
Ada 2 cara yang bisa dibuat untuk membuat Msgbox yang menutup secara otomatis. Pertama bisa menggunakan WScript.Shell Object yang kedua menggunakan Windows API
Untuk membuat Msgbox yang menutup secara otomatis, yang pertama bisa menggunakan Object dari Wscript.Shell dengan fungsi popup untuk scriptnya bisa ditulis seperti dibawah ini.
Sub ContohPesanNutupSendiri() Dim WS As Object, Cfg As String Dim Waktu As Integer, Pesan As String Waktu = 3 Pesan = "Pesan ini akan menutup otomatis dalam 3 detik" Set WS = CreateObject("WScript.Shell") Cfg = "mshta.exe vbscript:close(CreateObject(""WScript.Shell"")." & _ "Popup(""" & Pesan & """," & Waktu & ",""vba.co.id"",vbInformation))" WS.Run Cfg End Sub
Berikut ini adalah pesan yang ditampilkan, dan akan menutup secara otomatis dalam 3 detik.
Cara ini terlihat cukup baik dan ringan namun memiliki sedikit kekurangan.
Kekurangan menggunakan WScript.Shell adalah pesan yang ditampilkan tidak support multi baris atau tidak bisa membuat baris baru.
Baik itu Carriage Return (vbCr), Line Feed (vbLf) atau menggunakan Fungsi vbNewline. Sehingga pesan yang ditampilkan dimuat dalam 1 baris saja.
Cara kedua adalah dengan menggunakan Windows API memanfaatkan fungsi dari MsgBoxTimeout
.
Windows API ini sudah saya buat untuk 32Bit dan juga 64Bit menggunakan Compiler Directive atau Preprocessor.
Tempatkan script ini pada posisi paling atas dari Standard Module.
#If Win64 Then Private Declare PtrSafe Function MsgBoxTimeout _ Lib "user32" _ Alias "MessageBoxTimeoutA" ( _ ByVal hwnd As LongPtr, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal wType As VbMsgBoxStyle, _ ByVal wlange As Long, _ ByVal dwTimeout As Long) _ As Long #Else Private Declare Function MsgBoxTimeout _ Lib "user32" _ Alias "MessageBoxTimeoutA" ( _ ByVal hwnd As Long, _ ByVal lpText As String, _ ByVal lpCaption As String, _ ByVal wType As VbMsgBoxStyle, _ ByVal wlange As Long, _ ByVal dwTimeout As Long) _ As Long #End If
Setelah itu Fungsi dari MsgboxTimeOut sudah bisa untuk digunakan di module ataupun di Userform. Contohnya bisa dibuat seperti dibawah ini.
Sub TestMsgbox() MsgBoxTimeout 0, "Saya Andi Setiadi!" & vbCrLf & _ "Pesan Ini akan menutup sendiri setelah 4 Detik." , _ "VBA.co.id", vbInformation, 0, 4000 End Sub
Berikut ini adalah hasil pesan yang ditampilkan dan akan menutup setelah 4 detik.
Cara kedua ini bisa menutupi kekurangan dari cara pertama, dimana dengan menggunakan Windows API memiliki kelebihan yaitu pesan yang ditampilkan sudah bisa menggunakan baris baru seperti Cariage Return (vbCr) atau LineFeed (vbLf) atau menggunakan Fungsi vbNewline.