JTPediaQuiz - Bank Soal, Quiz Interactive, Contoh-contoh Soal Ujian Sekolah, Uji Kompetensi, Ulangan Harian, DLL. More info

Cara Membuat Custom untuk Menutup (Close/Quit) Aplikasi VBA Excel

More Info:

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
default notif proses menutup (close/quit)

Dengan menggunakan macro dan vba excel, notifikasi dan visual proses mengeluarkan file project bisa di custom dengan sedikit modifikasi menggunakan msgbox atau dengan sebuah form yang dilengkapi beberapa object yang diperlukan sehingga hasilnya akan seperti berikut:

Gbr 2. Custom Notifikasi
custom notif proses menutup (close/quit)

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
    Jika semuanya sudah dibuat, susun dan tempatkan semua object seperti pada contoh berikut:

    Gbr 3. Form_Close_Quit_WB
    object form notif proses menutup (close/quit)
  • 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:
    Assign Macro Form Close/Quit
  • 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

Contoh Project VBA Excel yang Menggunakan Custom Close/Quit

Powered by Blogger.