CRUD Form Worksheet Range

Pada tutorial kali ini, bagaimana gambaran CRUD (Create, Read, Update dan Delete) didalam VBA menggunakan Userform dengan Database dalam Excel berbentuk Range.

Worksheet berbentuk range adalah yang paling umum dan merupakan tutorial yang banyak digunakan dalam dunia VBA, jika dibandingkan dengan data worksheet berbentuk Table.

Sebelum memulai aplikasi ada beberapa tahapan yang harus dibuat sebelum langsung terjun ke coding.

Beberapa langkah telah saya sederhanakan agar lebih mudah dipahami.

seperti contohnya saya tidak memasukan proses pembuatan DFD (Data Flow Diagram) atau melakukan proses Normalisasi Database.

Disini saya buat point point utama saja tetapi masih tetap dalam jalur proses pembuatan yang benar.

Tahap 1: Database

Membuat database adalah langkah awal dalam membuat sebuah aplikasi.

Buatlah sebuah table sederhana yang nantinya digunakan untuk menyimpan data.

pada materi kali ini, saya hanya membuaty 5 isian saja seperti yang terlihat dibawah ini

Tahap 2: UserForm

Setelah database berhasil dibuat, kini saatnya untuk melajutkan ke pembuatan Userform.

Buatlah userform sesuai dengan isian yang dibutuhkan dalam Database.

Misalnya seperti menambahkan isian untuk Id Barang, Nama Barang , Jenis Barang dan juga Harga, dan juga ditambahkan beberapa Button yang dibutuhkan.

Untuk Nomor tidak perlu dimasukan kedalam Userform dimana Nomor ini akan kita isi oleh sistem secara otomatis.

Untuk lebih detailnya bisa di lihat pada gambar diatas, silahkan buat masing masing control dengan Name harus dibuat sama, agar proses coding tidak perlu disesuikan lagi.

Tahap 3: Coding

Untuk membuat coding, tahap pertama yang dibuat adalah sebuah fungsi yang nantinya akan banyak digunakan oleh Userform.

Berdasarkan pengalaman, fungsi menghitung baris akan banyak dibutuhkan oleh berbagai fungsi CRUD ini.

Oleh Kerana itu fungsi menghitung baris ini dibuat menjadi fugsi tersendiri dan dibuat didalam standard module agar bisa diakses secara Global.

Simpan script ini di Standard module

Const MyApp As String = "Data Input"
Function GetBaris() As Long
GetBaris = Sheet1.Range("A" & Sheet1.Rows.Count).End(xlUp).Row
End Function

Setelah itu proses coding dilanjut dengan membuat fungsi untuk membuat ID Barang otomatis, Mengurustkan Nomor otomatis dan juga beberapa fungsi lain yang nantikan akan dibutuhkan.

Fungsi ini bisa disimpan didalam Module Userform (Object Module)

Fungsi untuk membuat ID otomatis

Private Function BuatID() As String
Dim Baris As Long
Dim IDLama As String
Baris = GetBaris

If Not Baris = 1 Then
    IDLama = Sheet1.Range("B" & Baris)
    Baris = CLng(Right(IDLama, 5)) + 1
End If
BuatID = "ID" & Format(Baris, "00000")
End Function

Subrutine untuk membuat Nomor Urut Otomatis

Private Sub Urut()
Dim i As Long

For i = 2 To GetBaris
    Sheet1.Range("A" & i).Value = i - 1
Next i
End Sub

Selanjutnya, buat juga Subrutine untuk membersihkan User Form. Subrutine ini juga harus dibuat terpisah karena pada beberapa fungsi CRUD subrutine ini akan selalu digunakan

Private Sub BersihForm()
TBIDBarang.Text = vbNullString
TBNamaBarang.Text = vbNullString
CBJenisBarang.Text = vbNullString
TBHargaBarang.Text = vbNullString
End Sub

Selanjutnya tambahkan juga script pada Events Initialize, dimana Subrutine ini akan dijalankan ketika Userform dijalankan.

ada beberapa script yang harus ditambahkan ketika Userform dijalankan, diantaraya yaitu

  • Mengiisi Combobox Jenis Barang
  • Mengosongkan Isian Userform
  • Mengiisi ID Baru

Sehingga Script pada Events Initialize bisa diisi seperti berikut ini

Private Sub UserForm_Initialize()
CBJenisBarang.RowSource = Sheet1.Range("L1:L2").Address
Call BersihForm
TBIDBarang.Text = BuatID
End Sub

Jika digabungkan, maka script pada Userform Module akan menjadi seperti dibawah ini.

Private Function BuatID() As String
Dim Baris As Long
Dim IDLama As String
Baris = GetBaris

If Not Baris = 1 Then
    IDLama = Sheet1.Range("B" & Baris)
    Baris = CLng(Right(IDLama, 5)) + 1
End If
BuatID = "ID" & Format(Baris, "00000")
End Function

Private Sub Urut()
Dim i As Long

For i = 2 To GetBaris
    Sheet1.Range("A" & i).Value = i - 1
Next i
End Sub

Private Sub BersihForm()
TBIDBarang.Text = vbNullString
TBNamaBarang.Text = vbNullString
CBJenisBarang.Text = vbNullString
TBHargaBarang.Text = vbNullString
End Sub

Private Sub UserForm_Initialize()
CBJenisBarang.RowSource = Sheet1.Range("L1:L2").Address
Call BersihForm
TBIDBarang.Text = BuatID
End Sub

Private Sub BTBatal_Click()
Call BersihForm
TBIDBarang.Text = BuatID
End Sub

' Module Hapus (Delete)
'----------------------------------------------------------------
Private Sub BTHapus_Click()
Dim DBarea As Range
Dim HC As Range

If TBIDBarang.Text = "" Then
    MsgBox "Silahkan isi ID Barang!", vbInformation, MyApp
    Exit Sub
End If

Set DBarea = Sheet1.Range("B2:B" & GetBaris)
Set HC = DBarea.Find(TBIDBarang.Value, , xlValues, xlWhole)
If HC Is Nothing Then
    MsgBox "Data ID Barang tidak ditemukan!", vbInformation, MyApp
Else
    HC.EntireRow.Delete
    MsgBox "Data berhasil Disimpan!"
End If
TBIDBarang.Text = BuatID
Call Urut
End Sub

Private Sub BTKeluar_Click()
Unload Me
End Sub

' Module Load data (Read)
'----------------------------------------------------------------

Private Sub BTLoad_Click()
Dim DBarea As Range
Dim HC As Range

If TBIDBarang.Text = "" Then
    MsgBox "Silahkan Isi ID Barang", vbCritical, MyApp
    Exit Sub
End If

Set DBarea = Sheet1.Range("B2:B" & GetBaris)
Set HC = DBarea.Find(TBIDBarang, , xlValues, xlWhole)
If HC Is Nothing Then
    MsgBox "ID barang Tidak ditemukan", vbInformation, MyApp
    BersihForm
    TBIDBarang.Text = BuatID
Else
    TBIDBarang.Text = HC.Value
    TBNamaBarang.Text = HC.Offset(0, 1).Value
    CBJenisBarang.Text = HC.Offset(0, 2).Value
    TBHargaBarang.Text = HC.Offset(0, 3).Value
End If
End Sub

' Module Simpan (Create)
'----------------------------------------------------------------
Private Sub BTSimpan_Click()
Dim Baris As Long
Dim IsiData As Variant
Dim DBarea As Range, HC As Range

Set DBarea = Sheet1.Range("B2:B" & GetBaris)
Set HC = DBarea.Find(TBIDBarang, , xlValues, xlWhole)
If HC Is Nothing Then
    Baris = GetBaris + 1
Else
    Baris = HC.Row
End If

IsiData = Array(Baris - 1, TBIDBarang.Value, TBNamaBarang.Value _
             , CBJenisBarang.Value, TBHargaBarang.Value)

Sheet1.Range("A" & Baris).Resize(1, 5).Value = IsiData
MsgBox "Data berhasil diSimpan!", vbInformation, MyApp
Call BersihForm
TBIDBarang.Text = BuatID
End Sub

Tahap Akhir : Testing

Setelah coding semua berhasil dibuat, silahkan dicoba

Download File

4 thoughts on “CRUD Form Worksheet Range

Leave a Reply

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

Tutorial Lainnya
Chat WhatsApp
WhatsApp