Menghilangkan Bar Judul Pada UserForm di VBA


UserForm-login-tanpa-Title-Bar-VBA

Pada artikel sebelumnya, Excelnoob sudah membahas tentang menghilangkan Tanda X pada Userform yang bisa di baca disini. Pada pembahasan kali ini, kita akan membuat sebuah UserForm tanpa Bar Judul atau Title Bar. Masih menggunakan API yang sama seperti pada menghilangkan tanda X. Jadi untuk memodif Form Bawaan dari UserForm ini harus menggunkan bantuan dari Windows API.

Hasil dari menghilangkan Title Bar di Userform VBA akan terlihat seperti pada gambar dibawah ini.

Membuat UserForm Tanpa Title Bar

Untuk membuat sebuah userform tanpa titlebar seperti diatas, memang membutuhkan Windows API agar hal ini bisa dilakukan. Windows API yang digunakan bisa dilihat pada script dibawah ini, copy script ini kedalam Module

Option Explicit
Rem Auth : ExcelNoob.com
#If VBA7 And Win64 Then
Private Declare PtrSafe Function FindWindow Lib "user32" _
        Alias "FindWindowA" (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
Private Declare PtrSafe Function GetWindowLong Lib "user32" _
        Alias "GetWindowLongA" (ByVal hwnd As Long, _
        ByVal nIndex As Long) As Long
Private Declare PtrSafe Function SetWindowLong Lib "user32" _
        Alias "SetWindowLongA" (ByVal hwnd As Long, _
        ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long
Public Declare PtrSafe Function DrawMenuBar Lib "user32" _
        (ByVal hWnd As Long) As Long
#Else
Private Declare Function FindWindow Lib "user32" _
        Alias "FindWindowA" _
        (ByVal lpClassName As String, _
        ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLong Lib "user32" _
        Alias "GetWindowLongA" _
        (ByVal hwnd As Long, _
        ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" _
        Alias "SetWindowLongA" _
        (ByVal hwnd As Long, _
        ByVal nIndex As Long, _
        ByVal dwNewLong As Long) As Long
Public Declare Function DrawMenuBar Lib "user32" _
        (ByVal hWnd As Long) As Long
#End If

Sub SembunyikanJudul(oForm As Object)
Dim Style As Long, Menu As Long, hWndForm As Long
hWndForm = FindWindow("ThunderDFrame", oForm.Caption)
Style = GetWindowLong(hWndForm, &HFFF0)
Style = Style And Not &HC00000
SetWindowLong hWndForm, &HFFF0, Style
DrawMenuBar hWndForm
End Sub

Jika script diatas sudah dimasukan ke dalam Module, cara pengguna pada UserForm akan lebih mudah. Untuk Pengunaan Script API diatas, simpan kode dibawah ini kedalam UserForm_Initialize di UserForm yang ingin dihilangkan TitleBarnya.

Private Sub UserForm_Initialize()
'Sembunyikan Title Bar
SembunyikanJudul Me
End Sub

Hati-hati dalam menggunakan script diatas, yang perlu diingat adalah dengan menghilangkan Title Bar atau Bar Judul, maka akan menghilangkan juga tanda X pada userForm yang berfungsi untuk menutup userform. Jadi jangan lupa Untuk menambahkan 1 tombol keluar, untuk memudahkan keluar dari UserForm. Tapi jika sudah terlajur dijalankan dan lupa menambahkan tombol keluar, jangan dulu panik, karena masih bisa keluar dengan Shortcut Keyboard ALT + F4.

Dan berikut ini adalah hasil Sebelum dan sesudah title Bar dihilangkan. Perbedaan dari keduanya bisa dilihat pada Gambar dibawah ini.

Pada userForm2 tidak menggunakan API untuk Menyembunyikan TitleBar sedangkan pada UserForm1 menggunakan API sembunyikan TitleBar.

Drag Userform Tanpa Title Bar

Selain tombol keluar yang harus ada, Userform tanpa titlebar (Borderless) ini juga akan menyebabkan Userform tidak bisa di geser atau di Drag dengan mengunakan Mouse. Agar Userform bisa di Drag atau di geser-geser dengan mouse, tambahkan script dibawah ini pada UserForm.

Private m_sngDownX As Single
Private m_sngDownY As Single

Private Sub UserForm_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 1 Then
m_sngDownX = X
m_sngDownY = Y
End If
End Sub

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button And 1 Then
Me.Left = Me.Left + (X - m_sngDownX)
Me.Top = Me.Top + (Y - m_sngDownY)
End If
End Sub

Dengan menambahkan script diatas, sekarang userform bisa di digeser-geser dengan menggunakan mouse walaupun sudah dihilangkan Titlebar dari userform tersebut.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *