Pembahasan kali ini adalah mengenai class module sebagai solusi terbaik untuk menyelesaikan contoh kasus suatu UserForm terdiri dari 12 TextBox yang mewakili setiap nama-nama bulan untuk diisi dengan suatu jumlah anggaran pengeluaran seperti yang ditunjukkan pada Gambar1.

Gambar1

Adapun kotak-kotak isian tersebut harus menolak masukan aksara selain angka. 

Contoh berikut hanya dapat menangani TextBox1 pada module UserForm dan tidak berlaku untuk TextBox lainnya:

Private Sub TextBox1_KeyPress(ByVal tb As MSForms.ReturnInteger)
Select Case tb
Case 48 To 57
Case Else
tb = 0
MsgBox "Masukkan angka saja.", vbCritical, "Peringatan!"
End Select
End Sub

Jika TextBox berjumlah banyak, ditambah lagi jika proses validasi angka dikembangkan agar memungkinkan untuk angka negatif atau angka desimal, maka banyak sekali pembaruan yang akan Anda lakukan pada setiap TextBox, dan parahnya lagi, volume kode yang berlebih dapat membuat desain menjadi buruk karena menghasilkan galat.

Namun, jika Anda menambahkan suatu class module, maka Anda dapat menentukan suatu objek yang akan menjadi suatu kelompok dalam contoh 12 TextBox.

Gambar2

Misalnya Anda memberi nama kelompok objek yaitu gt dan ini menandakan bahwa objek-objek pada kelompok tersebut merupakan TextBox seperti garis kode berikut pada class module yang ditunjukkan pada Gambar2:

Public WithEvents gt As MSForms.TextBox

Setelah objek gt dibuat sebagai kelompok TextBox, selanjutnya Anda memasukkannya untuk menangani event KeyPress yang sama dengan menuliskan satu per satu ke setiap 12 TextBox tersebut.

Seperti yang ditunjukkan pada kode di bawah ini, objek gt mengenali event KeyPress yang dicetuskan oleh keyboard untuk memasukkan data pada salah satu diantara 12 TextBox.

Private Sub gt_KeyPress(ByVal tb As MSForms.ReturnInteger)
Select Case tb
Case 48 To 57
Case Else
tb = 0
MsgBox "Masukkan angka saja.", vbCritical, "Peringatan!"
End Select
End Sub

Pada titik ini masih bersifat rancangan, langkah selanjutnya adalah membuat objek yang Anda tentukan (mendeteksi objek) untuk membuatnya agar menjadi objek yang memberikan respons terhadap event sehingga terhubung dengan metode dan properti.

Di atas module UserForm, tetapkan variabel untuk 12 TextBox untuk mendeteksi objek class gt dengan kata kunci New untuk nama module Class1:

Dim kt(1 To 12) As New Class1

Dengan memakai event Initialize, tetapkan variabel jenis Integer misalnya ktc yang mewakili untuk melakukan loop ke setiap 12 TextBox.

Jadikan setiap TextBox sebagai bagian dari class gt:

Private Sub UserForm_Initialize()
Dim ktc As Integer
For ktc = 1 To 12
Set kt(ktc).gt = _
Controls("TextBox" & ktc)
Next ktc
End Sub

Dengan begini, kode akan jauh lebih pendek dan sederhana.

Ketika Anda membuka UserForm dan mencoba memasukkan aksara selain angka pada kotak isian mana saja diantara 12 kotak isian yang ada, maka masukan akan langsung ditolak.

Itulah pembahasan tentang cara menggunakan Class Module untuk sejumlah TextBox pada UserForm Macro VBA Excel.

Selamat mencoba dan semoga bermanfaat.