Mari lakukan sebuah eksperimen:
Misalkan kita memiliki dua workbook yang sedang terbuka.
Data Penjualan.xlsx
Aplikasi Laporan.xlsm
Makro VBA disimpan di dalam workbook Aplikasi Laporan.xlsm.
Kemudian pengguna mengaktifkan workbook Data Penjualan.xlsx, lalu menjalankan makro.
Sekarang muncul pertanyaan:
Workbook mana yang dimaksud oleh ThisWorkbook?
Workbook mana yang dimaksud oleh ActiveWorkbook?
Jawaban dari pertanyaan tersebut merupakan salah satu konsep yang paling penting dalam VBA Excel.
Eksperimen 1 — Mengenal ThisWorkbook
ThisWorkbook selalu mengacu pada workbook tempat kode VBA disimpan.
Contoh:
MsgBox ThisWorkbook.Name
Jika makro berada di:
Aplikasi Laporan.xlsm
maka hasilnya selalu:
Aplikasi Laporan.xlsm
Tidak peduli workbook mana yang sedang aktif.
Eksperimen 2 — Mengenal ActiveWorkbook
Sekarang jalankan kode berikut.
MsgBox ActiveWorkbook.Name
Jika workbook yang aktif adalah:
Data Penjualan.xlsx
maka hasilnya adalah:
Data Penjualan.xlsx
Artinya, ActiveWorkbook selalu mengikuti workbook yang sedang digunakan oleh pengguna.
Eksperimen 3 — Jalankan Keduanya Bersamaan
Cobalah kode berikut.
Sub BandingkanWorkbook()
MsgBox "ThisWorkbook : " & ThisWorkbook.Name & vbCrLf & _
"ActiveWorkbook : " & ActiveWorkbook.Name
End Sub
Jika makro berada pada:
Aplikasi Laporan.xlsm
dan pengguna sedang membuka:
Data Penjualan.xlsx
hasilnya adalah:
ThisWorkbook : Aplikasi Laporan.xlsm
ActiveWorkbook : Data Penjualan.xlsx
Perbedaan ini menunjukkan bahwa kedua objek tersebut tidak selalu menunjuk ke workbook yang sama.
Memahami Perbedaannya dengan Analogi
Bayangkan Anda bekerja di sebuah kantor.
-
ThisWorkbook adalah ruang kerja Anda sendiri.
-
ActiveWorkbook adalah ruang yang sedang Anda masuki saat ini.
Anda mungkin sedang berada di ruang rapat, ruang arsip, atau ruang administrasi.
Namun, ruang kerja Anda tetap sama.
Begitu pula dalam VBA.
Makro selalu "berasal" dari ThisWorkbook, sedangkan pengguna bisa saja sedang bekerja pada ActiveWorkbook.
Kapan Menggunakan ThisWorkbook?
Gunakan ThisWorkbook ketika:
-
Mengakses worksheet yang berada di workbook tempat makro disimpan.
-
Menyimpan pengaturan aplikasi.
-
Membaca data konfigurasi.
-
Membuat aplikasi berbasis Excel (
.xlsm).
Contoh:
ThisWorkbook.Save
Perintah tersebut akan menyimpan workbook tempat makro berada.
Kapan Menggunakan ActiveWorkbook?
Gunakan ActiveWorkbook ketika:
-
Makro bekerja pada workbook yang sedang digunakan pengguna.
-
Membuat alat bantu yang dapat digunakan pada berbagai workbook.
-
Mengolah data dari workbook yang aktif.
Contoh:
ActiveWorkbook.Save
Workbook yang disimpan adalah workbook yang sedang aktif, bukan selalu workbook tempat makro berada.
Studi Kasus
Sebuah perusahaan memiliki aplikasi otomatisasi bernama:
Generator Laporan.xlsm
Aplikasi tersebut digunakan untuk mengolah data dari workbook lain.
Jika kode berikut digunakan:
ThisWorkbook.Worksheets("Template")
maka VBA akan mengambil worksheet Template dari workbook aplikasi.
Sebaliknya,
ActiveWorkbook.Worksheets("Template")
akan mencari worksheet Template pada workbook yang sedang aktif.
Apabila workbook aktif tidak memiliki worksheet tersebut, program akan menghasilkan Runtime Error.
Kesalahan yang Paling Sering Terjadi
Menggunakan ActiveWorkbook Padahal yang Dimaksud ThisWorkbook
Contoh:
ActiveWorkbook.Save
Padahal yang ingin disimpan adalah workbook aplikasi.
Akibatnya, workbook pengguna yang justru disimpan.
Menggunakan ThisWorkbook untuk Mengolah Data Pengguna
Jika data berada pada workbook lain, penggunaan ThisWorkbook akan membuat program membaca workbook yang salah.
Menganggap Keduanya Selalu Sama
Jika hanya satu workbook yang terbuka, hasil dari:
ThisWorkbook.Name
dan
ActiveWorkbook.Name
memang bisa sama.
Namun, ketika beberapa workbook dibuka bersamaan, hasilnya dapat berbeda.
Tips Praktis
✔ Gunakan ThisWorkbook untuk mengakses workbook tempat makro disimpan.
✔ Gunakan ActiveWorkbook untuk mengakses workbook yang sedang digunakan oleh pengguna.
✔ Jika aplikasi melibatkan banyak workbook, tentukan dengan jelas workbook mana yang menjadi sumber data dan mana yang menjadi aplikasi.
✔ Hindari menggunakan ActiveWorkbook jika Anda menginginkan workbook yang pasti.
✔ Tambahkan komentar pada kode agar tujuan penggunaan masing-masing objek lebih mudah dipahami.
Ringkasan Perbandingan
ThisWorkbook | ActiveWorkbook |
|---|---|
| Workbook tempat kode VBA berada. | Workbook yang sedang aktif. |
| Tidak berubah meskipun pengguna berpindah workbook. | Berubah mengikuti workbook yang aktif. |
Cocok untuk aplikasi .xlsm. |
Cocok untuk makro yang bekerja pada workbook pengguna. |
| Lebih stabil untuk aplikasi utama. | Lebih fleksibel untuk pengolahan data lintas workbook. |
Kesimpulan
Meskipun sama-sama digunakan untuk mengakses workbook, ThisWorkbook dan ActiveWorkbook memiliki fungsi yang berbeda. ThisWorkbook selalu mengacu pada workbook tempat kode VBA disimpan, sedangkan ActiveWorkbook mengacu pada workbook yang sedang aktif digunakan. Memahami perbedaan ini akan membantu Anda menghindari kesalahan saat bekerja dengan beberapa workbook sekaligus dan menghasilkan kode VBA yang lebih aman, jelas, serta mudah dipelihara.
Tantangan Praktik
Tantangan 1
Buka dua workbook yang berbeda, kemudian jalankan prosedur yang menampilkan ThisWorkbook.Name dan ActiveWorkbook.Name. Amati perbedaannya ketika Anda berpindah workbook.
Tantangan 2
Buat prosedur yang menyimpan workbook aplikasi menggunakan ThisWorkbook.Save, kemudian bandingkan hasilnya dengan ActiveWorkbook.Save.
Tantangan 3
Buat sebuah workbook .xlsm yang memiliki worksheet Template. Kemudian buka workbook lain yang berisi data. Tulis dua prosedur, satu menggunakan ThisWorkbook.Worksheets("Template") dan satu lagi menggunakan ActiveWorkbook.Worksheets("Template"). Bandingkan perilaku keduanya saat workbook aktif berubah.
