Memanggil Procedure Antar Module pada VBA Excel: Menghubungkan Kode dalam Project yang Terstruktur

 

Mini Project: Membuat Aplikasi Rekap Penjualan

Bayangkan ketika sedang mengembangkan aplikasi rekap penjualan di Excel.

Agar project mudah dikelola, kita dapat membagi kode ke dalam beberapa module.

ModuleData
    - AmbilData()
    - SimpanData()

ModulePerhitungan
    - HitungTotal()
    - HitungDiskon()

ModuleLaporan
    - CetakLaporan()

Kemudian muncul pertanyaan:

Bagaimana cara prosedur di ModuleData menjalankan prosedur yang berada di ModulePerhitungan?

Jawabannya adalah dengan memanggil procedure antar module.


Mengapa Project Perlu Dibagi ke Dalam Module?

Saat project masih kecil, semua prosedur mungkin dapat ditempatkan dalam satu module.

Namun, ketika jumlah prosedur terus bertambah, struktur project akan menjadi sulit dipahami.

Contoh yang kurang baik:

Module1

Sub InputData()

Sub HitungTotal()

Sub CetakLaporan()

Sub BackupData()

Sub KirimEmail()

Sub HapusData()

Sub ImportExcel()

Sub ExportPDF()

...

Sebuah module yang berisi puluhan bahkan ratusan prosedur akan menyulitkan proses pencarian maupun pemeliharaan kode.

Solusinya adalah mengelompokkan prosedur berdasarkan fungsinya.


Mengenal Standard Module

Di VBA Editor, Anda dapat membuat beberapa Standard Module.

Contohnya:

ModuleData
ModulePerhitungan
ModuleLaporan
ModuleUtilitas

Setiap module dapat berisi beberapa Sub maupun Function.

Walaupun berada pada module yang berbeda, prosedur tersebut tetap dapat saling berkomunikasi selama memiliki ruang lingkup (scope) yang sesuai.


Cara Memanggil Procedure Antar Module

Misalkan terdapat prosedur berikut pada ModulePerhitungan.

Sub HitungTotal()

    MsgBox "Menghitung total penjualan..."

End Sub

Kemudian pada ModuleUtama.

Sub JalankanProgram()

    HitungTotal

End Sub

Saat JalankanProgram() dijalankan, VBA akan mencari prosedur HitungTotal meskipun prosedur tersebut berada pada module yang berbeda.


Memanggil dengan Kata Kunci Call

Selain menuliskan nama prosedur secara langsung, Anda juga dapat menggunakan kata kunci Call.

Sub JalankanProgram()

    Call HitungTotal

End Sub

Kedua cara tersebut menghasilkan proses yang sama.


Memanggil Procedure dengan Parameter

Misalkan pada ModuleLaporan terdapat prosedur berikut.

Sub CetakLaporan(Judul As String)

    MsgBox Judul

End Sub

Prosedur tersebut dapat dipanggil dari module lain.

Sub Proses()

    CetakLaporan "Laporan Penjualan Bulanan"

End Sub

Output:

Laporan Penjualan Bulanan

Memanggil Function Antar Module

Hal yang sama juga berlaku untuk Function.

Pada ModulePerhitungan.

Function HitungPPN(Harga As Double) As Double

    HitungPPN = Harga * 0.11

End Function

Pada ModuleUtama.

Sub HitungTagihan()

    Dim Pajak As Double

    Pajak = HitungPPN(500000)

    MsgBox Pajak

End Sub

Karena HitungPPN bersifat umum, fungsi tersebut dapat digunakan oleh banyak prosedur tanpa perlu menulis ulang logika perhitungannya.


Memanggil Procedure Berdasarkan Nama Module

Jika terdapat dua prosedur dengan nama yang sama pada module yang berbeda, Anda dapat menyebutkan nama modulenya.

Misalnya:

ModuleData

Sub Bersihkan()
ModuleLaporan

Sub Bersihkan()

Pemanggilan dapat dilakukan seperti berikut.

Call ModuleData.Bersihkan

atau

ModuleLaporan.Bersihkan

Cara ini membantu VBA mengetahui prosedur mana yang harus dijalankan.


Pengaruh Scope terhadap Pemanggilan Procedure

Tidak semua prosedur dapat dipanggil dari module lain.

Perhatikan contoh berikut.

Private Sub HitungTotal()

End Sub

Karena menggunakan Private, prosedur tersebut hanya dapat dipanggil dari module yang sama.

Sebaliknya:

Public Sub HitungTotal()

End Sub

Prosedur di atas dapat dipanggil dari module lain dalam project.


Studi Kasus

Misalkan Anda membuat aplikasi inventaris barang.

Struktur project:

ModuleData
│
├── InputBarang()
├── EditBarang()
└── HapusBarang()

ModulePerhitungan
│
├── HitungStok()
└── HitungNilaiPersediaan()

ModuleLaporan
│
└── CetakLaporan()

ModuleUtama
│
└── JalankanAplikasi()

Isi JalankanAplikasi().

Sub JalankanAplikasi()

    InputBarang

    HitungStok

    CetakLaporan

End Sub

Dengan struktur seperti ini, setiap module memiliki tanggung jawab yang jelas sehingga project lebih mudah dikembangkan.


Tips Mengelola Banyak Module

Jika project mulai berkembang, buatlah pengelompokan module berdasarkan fungsi.

Contoh:

ModuleIsi
ModuleData Input, edit, hapus data
ModulePerhitungan Seluruh proses perhitungan
ModuleLaporan Cetak dan ekspor laporan
ModuleUtilitas Fungsi umum yang sering digunakan
ModuleUtama Titik awal menjalankan aplikasi

Struktur seperti ini akan sangat membantu ketika jumlah prosedur terus bertambah.


Kesalahan yang Sering Terjadi

1. Procedure Bertipe Private

Private Sub SimpanData()

End Sub

Jika dipanggil dari module lain, VBA akan menampilkan error karena prosedur tersebut tidak dapat diakses.


2. Nama Procedure Ganda

Misalnya terdapat dua prosedur bernama Cetak() pada module yang berbeda.

Untuk menghindari kebingungan, gunakan nama yang lebih spesifik atau panggil dengan format:

ModuleLaporan.Cetak

3. Semua Procedure Diletakkan dalam Satu Module

Walaupun program tetap berjalan, struktur seperti ini akan menyulitkan proses pengembangan dan pemeliharaan.

Biasakan mengelompokkan prosedur berdasarkan tanggung jawabnya.


Praktik Terbaik

✅ Pisahkan prosedur berdasarkan fungsi.

✅ Gunakan Public hanya untuk prosedur yang memang perlu dipanggil dari module lain.

✅ Berikan nama module yang mencerminkan isi atau tanggung jawabnya.

✅ Hindari membuat satu module berisi terlalu banyak prosedur.

✅ Gunakan Function untuk logika perhitungan yang digunakan oleh banyak prosedur.


Ringkasan

KonsepPenjelasan
Procedure antar module Prosedur pada satu module dapat dipanggil dari module lain jika memiliki scope yang sesuai.
Public Sub Dapat dipanggil dari seluruh module dalam project.
Private Sub Hanya dapat dipanggil dari module tempat prosedur tersebut berada.
Call Digunakan untuk memanggil prosedur, tetapi bersifat opsional.
NamaModule.NamaProcedure Digunakan jika ingin memperjelas module tujuan atau menghindari konflik nama.

Kesimpulan

Kemampuan memanggil procedure antar module merupakan dasar penting dalam membangun aplikasi VBA yang terstruktur. Dengan membagi kode ke dalam beberapa module dan menghubungkannya melalui pemanggilan prosedur, program menjadi lebih rapi, mudah dibaca, serta lebih mudah dipelihara.

Gunakan Public untuk prosedur yang memang perlu diakses dari module lain, sedangkan Private untuk prosedur yang hanya digunakan secara internal. Pengelompokan module yang baik juga akan memudahkan pengembangan project seiring bertambahnya fitur.


Latihan Mandiri

Latihan 1

Buat dua module:

  • ModuleData

  • ModuleUtama

Pada ModuleData, buat prosedur InputData() yang menampilkan pesan "Data berhasil disimpan.". Panggil prosedur tersebut dari ModuleUtama.


Latihan 2

Buat sebuah Function bernama HitungDiskon() pada ModulePerhitungan, kemudian panggil fungsi tersebut dari ModuleUtama untuk menghitung diskon sebuah produk.


Latihan 3

Buat sebuah prosedur Private pada satu module, lalu coba panggil dari module lain. Amati pesan kesalahan yang muncul. Setelah itu ubah menjadi Public dan jalankan kembali untuk melihat perbedaannya.

Hubungi Kami

Kantor Berkreasi
Alamat :
Pens Sky Venture - Sukolilo Surabaya
Karangrejo Tmur 17 Surabaya

Email : kantor.berkreasi@gmail.com
WA : wa.me/6287761589881  
(Support  Mbak Ana)

Tim Pengembang

Dr. Rojabi Azharghany, M.Si, S.Sos
Dr. H. Agus Sulthoni Imami, S.Psi. M.Pd.I.
Ali Ishaq, M.Pd.
Didik Rahwiniyanto, S.Si., M.Pd.
Mujiburrohman, M.Pd.
Mohammad Zikky, S.ST, M.T
Amien sawedi, S.Pd.
Didik P Wicaksono, M.Pd.