Cara Membuat Custom untuk Menutup (Close/Quit) Aplikasi VBA Excel
Proses Menutup File Project VBA Excel
Menutup (Close/Quit) Aplikasi sering dilakukan setelah kita menggunakan aplikasi/project tersetbut. Pada aplikasi microsoft office excel, secara default proses menutup (close/quit) file project excel yang sedang dibuka, bisa saja file project tersebut langsung di tutup tanpa notifikasi/peringatan (proses ini terjadi ketika datanya sudah di save sebelumnya) bisa saja sebelum keluar ada notif/peringatan dulu (ketika datanya ada perubahan dan sebelumnya tidak di save).
Default notifikasi/peringatan sebelum proses menutup (close/quit) file project excel terlihat seperti berikut:
Gbr 1. Default Notifikasi
Gbr 2. Custom Notifikasi
Cara Membuat Custom dan Modifiksi Proses Close/Quit Project VBA Excel
Pada contoh file project ini akan membuat dan mengcustom porses close/quit dengan menggunakan sebuah form dengan langkah-langkah seperti berikut:- Pada file excel yang sedang dibuka, buka visual basic editor (ALT+F11)
- Pada visual basic editor (VBE), tambahkan / buat sebuah user form dan berinama misalnya Form_Close_Quit_WB lalu tambahkan beberapa object yang diperlukan:
- Image: ImageBingkai
Untuk image ini, silahkan atur picture-nya sesuai kebutuhan - 1 Label: LabelNOTIF
- 2 OptonButton: OptSAVE dan OptNoSAVE
- 2 CommandButton: btnOK dan btnCANCEL
- Label: LabelNOTIF
Gbr 3. Form_Close_Quit_WB
- Image: ImageBingkai
- Insert / tambahkan sebuah Module (misalnya Module1) dan tambahkan SEMUA kode berikut:
Option Explicit
Public ControlClose As Boolean, SaveChangeX As Boolean, NextClose As Boolean
Public Const NamaAplikasi As String = "Sample Project"
Function CekOpenWorkBook()
'untuk cek apakah ada workbook/project lain yang sedang aktif / terbuka
CekOpenWorkBook = (Application.Workbooks.Count > 1)
End Function
Sub BeforeCloseWorkBook()
Application.DisplayAlerts = False 'alt jangan menampilkan notif/alert default saat data terakhir tidak disimpan
If CStr(CekOpenWorkBook()) = False Then
'tidak ada wb/project lain
If SaveChangeX = True Then
ThisWorkbook.Save
Application.Quit
Else
NextClose = True
Application.Quit 'next proses ke sub private beforeclose workbook
End If
Else
'ada wb/project lain
ThisWorkbook.Close SaveChanges:=SaveChangeX
End If
End Sub
Sub MCloseQuitApp()
Application.OnTime Now(), "oFormX" '!!! time
End Sub
Sub oFormX()
Form_Close_Quit_WB.Show
End Sub - Tambahkan kode berikut pada user form Form_Close_Quit_WB
Option Explicit
'untuk menghilankan button close user form Form_Close_Quit_WB
Const GWL_STYLE = -16
Const WS_CAPTION = &HC00000
#If VBA7 And Win64 Then
Private Declare PtrSafe Function GetWindowLong Lib "user32.dll" _
Alias "GetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
#Else
Private Declare Function GetWindowLong Lib "user32.dll" _
Alias "GetWindowLongA" ( _
ByVal hwnd As Long, _
ByVal nIndex As Long) As Long
#End If
#If VBA7 And Win64 Then
Private Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
#Else
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
#End If
#If VBA7 And Win64 Then
Private Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
#Else
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
#End If
#If VBA7 And Win64 Then
Private Declare PtrSafe Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#Else
Private Declare Function FindWindowA Lib "user32" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
#End If
Private Sub UserForm_Initialize()
Dim lngWindow As Long, lFrmHdl As Long
lFrmHdl = FindWindowA(vbNullString, Me.Caption)
lngWindow = GetWindowLong(lFrmHdl, GWL_STYLE)
lngWindow = lngWindow And (Not WS_CAPTION)
Call SetWindowLong(lFrmHdl, GWL_STYLE, lngWindow)
Call DrawMenuBar(lFrmHdl)
'SET DEFAULT HEIGHT + WIDTH FORM / atur sesuai resolusi layar
Me.Height = 108
Me.Width = 291
LabelNOTIF.Caption = "Akan Menutup Aplikasi [" & NamaAplikasi & "] INI...???!!!"
OptSAVE.Value = True 'default
SaveChangeX = True 'default
End Sub
Private Sub btnCANCEL_Click()
ControlClose = False
Unload Me
End Sub
Private Sub btnOK_Click()
ControlClose = True
Unload Me
Call BeforeCloseWorkBook
End Sub
Private Sub OptNoSAVE_Click()
'custom dont save: alternatif sebelum close/quit project
SaveChangeX = False
End Sub
Private Sub OptSAVE_Click()
'custom save: alternatif sebelum close/quit project
SaveChangeX = True
End Sub - Untuk custom close/quit selanjutnya, pada salah satu sheet (misalnya pada sheet1) tambahkan sebuah object / shapes dengan text Close/Quit
Arahkan event click object Close/Quit tersebut untuk mengekekusi custom close/quit Form_Close_Quit_WB dengan cara:
Klik kanan object (Close/Quit) ⟾ Assign Macro ⟾ Pada Macro Name, pilih MCloseQuitApp (sub modul yang sudah dibuat sebelumnya) seperti berikut:
- Terakhir silahkan simpan file project ini, misalnya:
- Untuk mencoba semua kode yang sudah dibuat, coba tutup file project ini baik dengan Close/Quit Excel maupun dengan button Close/Quit pada sheet yang sudah dibuat sebelumnya
Jika tidak ada kesalahan, sebelum proses menutup (close/quit) akan tampil seperti pada Gbr 2 di atas.
Catatan:
Pada fitur project ini, sebelum proses menutup akan mengecek dulu apakah ada atau tidak ada workbook/project lain yang sedang aktif/terbuka.
Jika ada workbook lain yang sedang aktif, maka proses nya akan close, dan jika tidak ada workbook lain maka prosesnya akan langsung quit