Jangan Sampai Tertukar! Memahami Perbedaan ThisWorkbook dan ActiveWorkbook dalam VBA Excel

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

ThisWorkbookActiveWorkbook
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.

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.