Langsung ke konten utama

Input Tanggal Otomatis di Excel dengan Kalender VBA (Class Module)

Input Tanggal Otomatis di Excel dengan Kalender VBA (Class Module)

Ingin memasukkan tanggal ke Excel cukup dengan klik tanggal di kalender? Gak perlu ketik manual, gak usah pakai shape, dan yang penting: gak ribet! Dalam artikel ini, kamu akan belajar cara membuat form kalender otomatis di Excel dengan VBA yang menggunakan class module untuk menangani event tombol tanggal.

Solusi ini cocok banget untuk aplikasi presensi, form data, atau input jadwal di Excel. Yuk kita buat!

📖 Daftar Isi

🎯 Fitur yang Akan Dibuat

  • UserForm kalender dengan layout tanggal otomatis
  • Tombol navigasi << dan >> untuk bulan
  • Dropdown bulan dan tahun
  • Highlight tanggal hari ini
  • Disable tombol kosong
  • Tampil otomatis saat klik sel

📦 Struktur Proyek VBA

KomponenFungsi
CalendarFormUserForm utama dengan layout kalender
CalendarButtonClass module untuk handle event tombol tanggal
Module1Helper & variabel global

🛠️ Langkah-Langkah Pembuatan

📁 1. Buat Workbook Macro-Enabled

  1. Simpan file sebagai .xlsm
  2. Buka VBA Editor dengan Alt + F11

🧰 2. Buat UserForm: CalendarForm

  • Tambah ComboBox untuk bulan: cboBulan
  • Tambah ComboBox untuk tahun: cboTahun
  • Tambah tombol navigasi: cmdPrev (<<) dan cmdNext (>>)

Jangan tambahkan tombol tanggal satu per satu. Nanti dibuat otomatis lewat kode!

📁 3. Tambah Class Module: CalendarButton

Public WithEvents btn As MSForms.CommandButton

Public Sub Init(ctrl As MSForms.CommandButton)
    Set btn = ctrl
End Sub

Private Sub btn_Click()
    If btn.Enabled And btn.Caption <> "" Then
        If Not SelTarget Is Nothing Then
            SelTarget.Value = btn.Caption & " " & CalendarForm.cboBulan.Value & " " & CalendarForm.cboTahun.Value
            Unload CalendarForm
        End If
    End If
End Sub

🧾4. Tambahkan Module Biasa: Module1

Public SelTarget As Range

Function MonthNameToNumber(monthName As String) As Integer
    MonthNameToNumber = Month(DateValue("1 " & monthName & " 2000"))
End Function

5. Kode Lengkap CalendarForm

🔩Deklarasi Variable


  	Private tombolTanggal() As MSForms.CommandButton
	Private Const JmlKolom As Integer = 7
	Private Const JmlBaris As Integer = 6
	Private Const UkuranBtn As Integer = 24
	Private Const JarakKiri As Integer = 20
	Private Const JarakAtas As Integer = 60
	Dim daftarBtn() As New clsTanggalBtn

🧱 Userform_Initialize


Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = 1 To 12
        cboBulan.AddItem MonthName(i)
    Next i
    For i = Year(Date) - 5 To Year(Date) + 5
        cboTahun.AddItem i
    Next i
    cboBulan.Value = MonthName(Month(Date))
    cboTahun.Value = Year(Date)

    BuatTombolTanggal
    TampilkanHari
End Sub

🧷 Buat Tombol Tanggal


  Private Sub BuatTombolTanggal()
    Dim baris As Integer, kolom As Integer, index As Integer
    Dim btn As MSForms.CommandButton
    Dim lebar As Double: lebar = 30
    Dim tinggi As Double: tinggi = 25
    Dim kiri As Double: kiri = 20
    Dim atas As Double: atas = 60
    

    ReDim daftarBtn(0 To 41)

    For index = 0 To 41
        Set btn = Me.Controls.Add("Forms.CommandButton.1", "btn" & index, True)
        With btn
            .Width = lebar
            .Height = tinggi
            kolom = index Mod 7
            baris = Int(index / 7)
            .Left = kiri + kolom * (lebar + 5)
            .Top = atas + baris * (tinggi + 5)
            .Font.Size = 9
            .Tag = "tanggal"
            .Caption = ""
            .Enabled = False
        End With
        Set daftarBtn(index) = New clsTanggalBtn
        daftarBtn(index).Init btn, Me
    Next index
End Sub

📅 Tampilkan Hari


  
  Private Sub TampilkanHari()
    Dim tglAwal As Date
    Dim today As Date: today = Date
    Dim tglHariIni As Integer: tglHariIni = Day(today)
    Dim blnHariIni As Integer: blnHariIni = Month(today)
    Dim thnHariIni As Integer: thnHariIni = Year(today)
    tglAwal = DateSerial(cboTahun.Value, MonthNameToNumber(cboBulan.Value), 1)

    Dim hariAwal As Integer
    hariAwal = Weekday(tglAwal, vbMonday) ' Senin = 1

    Dim jumlahHari As Integer
    jumlahHari = Day(DateSerial(cboTahun.Value, MonthNameToNumber(cboBulan.Value) + 1, 0))

    Dim i As Integer
    For i = 0 To 41
        With Controls("btn" & i)
            .Caption = ""
            .Enabled = False
            .BackColor = RGB(240, 240, 240) ' Abu muda / buram
        End With
    Next i

    For i = 1 To jumlahHari
        Dim kolomHari As Integer
        Dim idx As Integer: idx = i + hariAwal - 2
        kolomHari = idx Mod 7 ' Minggu = 6 (karena indeks mulai dari 0)
        With Controls("btn" & idx)
        .Caption = i
        .Enabled = True
        .BackColor = &HFFFFFF      ' Putih bersih
        .ForeColor = vbBlack       ' Warna teks normal
        .Font.Bold = False         ' Biasa
        
        ' Tandai hari Minggu
        If kolomHari = 6 Then
            .ForeColor = RGB(200, 0, 0) ' Merah untuk teks Minggu
            .BackColor = RGB(255, 235, 238) ' Latar pink lembut
        End If

        ' Tandai hari ini
        If i = tglHariIni And MonthNameToNumber(cboBulan.Value) = blnHariIni And cboTahun.Value = thnHariIni Then
            .BackColor = RGB(0, 120, 215)  ' Biru khas Windows
            .ForeColor = vbWhite
            .Font.Bold = True
            End If
        End With
    Next i
End Sub

🔄 Navigasi Bulan


Private Sub cmdPrev_Click()
    Dim bulan As Integer
    Dim tahun As Integer
    bulan = MonthNameToNumber(cboBulan.Value)
    tahun = cboTahun.Value
    
    bulan = bulan - 1
    If bulan < 1 Then
        bulan = 12
        tahun = tahun - 1
    End If
    
    cboBulan.Value = MonthName(bulan)
    cboTahun.Value = tahun
    TampilkanHari
End Sub

Private Sub cmdNext_Click()
    Dim bulan As Integer
    Dim tahun As Integer
    bulan = MonthNameToNumber(cboBulan.Value)
    tahun = cboTahun.Value
    
    bulan = bulan + 1
    If bulan > 12 Then
        bulan = 1
        tahun = tahun + 1
    End If
    
    cboBulan.Value = MonthName(bulan)
    cboTahun.Value = tahun
    TampilkanHari
End Sub

🔩Fungsi Nama Bulan Ke Angka


	Public Function MonthNameToNumber(namaBulan As String) As Integer
    Dim i As Integer
    For i = 1 To 12
        If MonthName(i) = namaBulan Then
            MonthNameToNumber = i
            Exit Function
        End If
    Next i
	End Function

Semua kode di atas ditaruh di CalendarForm

🔘 6. Form Muncul Otomatis di Sheet

Di Sheet1 → View Code:


    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 4 And Target.Row = 3 And Target.Cells.Count = 1 Then ' Ganti ke kolom dan baris tempat tanggal
        calendarForm.Show
    End If
	End Sub

Cara

🎉 Penutup

Dengan menggunakan class module, tampilan dan logika kalender jadi lebih rapi dan fleksibel. Bisa dikembangkan untuk range tanggal, hari libur, atau bahkan tema gelap!

Kalau kamu mau versi siap pakai dalam bentuk .xlb bisa dididwnload di sini. Selamat mencoba dan semoga ngetik tanggal manual jadi tinggal kenangan 😄

Komentar

Postingan populer dari blog ini

Cara Membuat Kuitansi di Excel dan Mencetak Otomatis Semua Data Sekaligus dengan VBA

Cara Membuat Kuitansi di Excel dan Mencetak Otomatis Semua Data Sekaligus dengan VBA " /> " /> " /> Daftar Isi Pendahuluan Disclaimer Persiapan Data Transaksi Desain Template Kuitansi Menambahkan Rumus Terbilang (Rupiah) Kode VBA untuk Mencetak Semua Data Cara Menjalankan Makro Tips Tambahan Penutup 📍 Pendahuluan Excel sangat fleksibel dalam membuat dokumen cetak seperti kuitansi pembayaran. Namun, jika Anda memiliki banyak transaksi, mencetak satu per satu bisa memakan waktu. Dengan VBA (Visual Basic for Applications), Anda bisa mencetak semua kuitansi secara otomatis dengan sekali klik. ⚠️ Disclaimer Artikel ini berfokus pada penggunaan VBA untuk mencetak semua data sekaligus. Desain tem...

Excel Custom Number Format: Biar Tampilan Angka Makin Estetik dan Fungsional!

Excel Custom Number Format: Biar Tampilan Angka Makin Estetik dan Fungsional! Halo teman-teman! 🌸 Pernah nggak sih kamu buka file Excel dan lihat angka-angkanya tampilannya cantik banget? Ada yang pakai warna, ada tanda plus-minus otomatis, bahkan ada yang tampil kayak “Rp 10.000” langsung tanpa pakai rumus apa-apa. Nah, itu semua bukan sihir, tapi hasil dari fitur canggih bernama Custom Number Format di Excel! Yuk kita bahas dari awal, pelan-pelan, biar kamu bisa langsung praktek dan tampil sebagai Excel Queen atau King di kantor atau kampus! 👑 Daftar Isi 1. Apa Itu Custom Number Format? 2. Cara Akses Menu Custom Number Format 3. Struktur Dasar Custom Number Format 4. Simbol-Simbol Penting dalam Custom Number Format 5. Contoh-Contoh Custom Format yang Keren dan Berguna 6. Satuan Otomatis: Ribu, Juta, Miliar 7. Menampilkan Teks Setelah Angka 8. Tambahkan Warna Otomatis Berdasarkan Nilai 9. Con...

Cara Meningkatkan Formula Excel Kamu dengan Named Range: Rahasia Rapi dan Ramping di Dunia Pendidikan

Memaksimalkan Formula Excel dengan Named Range di Dunia Pendidikan 📌 Daftar Isi 1. Pendahuluan: Kenapa Formula Excel Bisa Ruwet? 2. Apa Itu Named Range di Excel? 3. Manfaat Named Range untuk Guru dan Tenaga Administrasi 4. Langkah-Langkah Membuat Named Range 5. Cara Menggunakan Named Range dalam Formul 6. Kesalahan Umum dalam Menggunakan Named Range 7. Tips Profesional: Gunakan Named Range Dinamis 8. Studi Kasus: Rapor K13 9. Kesimpulan 1. Pendahuluan: Kenapa Formula Excel Bisa Ruwet? Pernahkah kamu membuka file Excel dan menemukan formula seperti ini? =IF(AND(B2>=75,C2="Hadir"),"LULUS","TIDAK LULUS") Formula seperti itu mungkin jelas bagi kamu, tapi ketika digunakan oleh orang lain atau mengalami perubahan layout, referensinya bisa kacau. Maka dari itu, kita perlu solusi: Named Range . Klik untuk Hadiah 2. Apa Itu Named Range d...