VBA (Visual Basic for Applications) adalah varian VB yang berjalan di dalam aplikasi Office seperti Excel, Word, dan Access, sehingga programnya mengubah isi dokumen yang sedang dibuka. Topik ini memetakan keterampilan VB.NET yang langsung terpakai pada VBA, menegaskan batas yang tidak terbawa, lalu menunjukkan skenario otomasi Excel yang paling sering ditulis, mulai dari membaca sel, mengisi baris, sampai menampilkan MsgBox. Setelah topik ini, keterampilan VB.NET yang sudah terbentuk dapat diperluas ke makro Office dengan kepastian tentang bagian mana yang sama dan bagian mana yang berbeda.
VBA berjalan di dalam aplikasi Office#
VBA bukan aplikasi berdiri sendiri dan tidak menggunakan runtime .NET. Kode VBA dimuat dan dijalankan oleh aplikasi pembukanya, yang disebut host, sebagaimana dotnet run menjalankan program VB.NET melalui runtime .NET. Program VBA yang disebut makro (macro) tersimpan di dalam berkas dokumen itu sendiri, misalnya di dalam buku kerja (workbook) Excel, dan ditulis pada editor VBA yang dibuka dengan Alt+F11 dari aplikasi Office.
Cara kerja ini menetapkan batasnya. Pustaka kelas .NET, mulai dari LINQ hingga tipe List(Of T), tidak tersedia karena tidak ada runtime .NET di dalam aplikasi Office. Yang tersedia adalah model objek milik host, yaitu Application, Workbook, Worksheet, dan Range pada Excel, yang didokumentasikan pada rujukan resmi Microsoft Learn sebagaimana tercantum di bagian akhir. Sintaks bahasanya tetap VB, sehingga Dim, If, For Each, Sub, dan Function bekerja persis seperti yang sudah dipelajari, hanya tanpa pustaka .NET di sekelilingnya.
Makro dijalankan dari tab Developer, dari tombol yang dipasangkan padanya, atau dari peristiwa buku kerja seperti pembukaan berkas. Tidak ada proyek, berkas .vbproj, maupun kompilasi terpisah, karena seluruh siklus penulisan dan pelaksanaannya terjadi di dalam aplikasi Office itu sendiri.
Keterampilan VB.NET yang langsung terpakai#
Bagian inti bahasa VB.NET terbawa utuh ke VBA. Deklarasi variabel, percabangan, perulangan, dan prosedur menggunakan sintaks yang sama, sehingga keterampilan menulis logika VB.NET yang telah terlatih langsung terpakai tanpa penyesuaian.
| Keterampilan VB.NET | Status pada VBA |
|---|---|
Dim x As Integer = 0 | sintaksnya sama persis |
If...Then...ElseIf...Else...End If | sama |
For i = 1 To n ... Next | sama |
For Each ... In ... Next | sama |
Sub dan Function dengan parameter | sama |
Select Case ... End Select | sama |
Class dengan properti | modul kelas (class module), satu kelas per berkas |
Console.WriteLine | Debug.Print atau MsgBox |
Perbedaan penempatannya pun kecil. Kelas pada VBA ditulis pada modul kelas, yaitu satu berkas untuk satu kelas, alih-alih beberapa kelas dalam satu berkas sumber. Keluaran program tidak lagi melalui console, karena Debug.Print menulis ke jendela Immediate pada editor VBA, sedangkan MsgBox menampilkan jendela pesan kepada pengguna. Contoh pertama berikut membaca isi sel B1 lalu menampilkannya melalui MsgBox.
' tidak-dijalankan
Sub SapaDiSel()
Dim nama As String
nama = Range("B1").Value
MsgBox "Selamat datang, " & nama
End SubProsedur Sub SapaDiSel ditulis pada modul biasa di editor VBA, dan Range("B1") merujuk sel B1 pada lembar kerja yang sedang aktif. Properti Value mengembalikan isi selnya, dan penyambungan teks menggunakan operator & karena VBA tidak memiliki interpolasi string.
Batas dan pemetaan ke VBA#
Sebagian fitur VB.NET yang digunakan sehari-hari tidak ada padanannya di VBA. LINQ, generics, async/await, literal XML, dan interpolasi string semuanya bergantung pada runtime .NET yang tidak ikut ke dalam aplikasi Office. Koleksi digantikan oleh Collection atau array, penanganan error menggunakan pernyataan On Error alih-alih Try...Catch, dan pemeriksaan tipe berpindah ke fungsi seperti IsEmpty serta IsNumeric.
Tabel berikut merangkum padanan yang paling sering diperlukan.
| Konsep VB.NET | Padanan di VBA |
|---|---|
$"Total: {n}" | penyambungan "Total: " & n |
Try ... Catch | On Error GoTo |
List(Of T) | Collection atau array |
MessageBox.Show | MsgBox |
| Properti kelas | Property Get dan Property Set pada modul kelas |
| Pustaka kelas .NET | model objek host, misalnya Application, Workbook, Range |
Integer untuk indeks baris | Long, karena Integer pada VBA hanya 16 bit |
Pemeriksaan tipe VBA secara bawaan berjalan lambat karena late binding, yaitu kecocokan tipe diperiksa saat program berjalan alih-alih saat ditulis. Pernyataan Option Explicit pada baris pertama modul mewajibkan setiap variabel dideklarasikan dengan Dim. Kebiasaan ini penting karena tanpa deklarasi wajib, nama variabel yang salah ketik menjadi variabel baru bertipe Variant yang membuat program tetap berjalan dengan hasil yang salah.
Skenario otomasi Excel yang sering#
Otomasi Excel bertumpu pada tiga objek, yaitu Range untuk merujuk sel atau rentang sel, Cells untuk merujuk sel dengan indeks baris dan kolom, serta Offset untuk berpindah antarsel secara relatif. Ketiganya sering muncul bersama perulangan, dan contoh berikut mengisi kolom rekap dari kolom sumber lalu menjumlahkan hasilnya pada baris penutup.
' tidak-dijalankan
Sub IsiKolomRekap()
Dim baris As Long
Dim total As Double
total = 0
For baris = 2 To 6
Cells(baris, 3).Value = Cells(baris, 2).Value * 1.1
total = total + Cells(baris, 3).Value
Next baris
Cells(7, 3).Value = total
End SubPola For baris = 2 To 6 adalah pola perulangan baris yang paling umum, dengan baris 1 diperkirakan berisi judul kolom. Cells(baris, 3) merujuk kolom ketiga pada baris yang sedang diproses, sehingga indeks yang naik satu per satu bergerak menyusuri tabel. Nilai yang dibaca dari sel ikut dihitung secara langsung karena tipe Variant-nya dikonversi otomatis oleh host.
Apabila tujuannya memeriksa setiap sel pada satu rentang, perulangan For Each lebih ringkas daripada menghitung indeksnya.
' tidak-dijalankan
Sub TandaiSelKosong()
Dim sel As Range
For Each sel In Range("B2:B10")
If IsEmpty(sel.Value) Then
sel.Offset(0, 1).Value = "kosong"
End If
Next sel
End SubMembaca dokumentasi objek Excel mengikuti hierarkinya, yaitu Application di puncak, lalu Workbook, kemudian Worksheet, dan akhirnya Range pada dasar hierarki. Daftar isi Excel VBA reference pada Microsoft Learn menyusun seluruh objek tersebut, dan setiap halaman objeknya memuat properti serta metodenya, misalnya Range.Value, Range.Offset, dan Worksheet.Cells. Mengetahui hierarki ini mempermudah mencari padanan ketika perilaku VB.NET yang biasa digunakan tidak ada di VBA.
Kesalahan umum#
Kesalahan pertama adalah menggunakan Integer sebagai indeks baris Excel. Tipe Integer pada VBA hanya 16 bit dengan nilai terbesar 32.767, sedangkan lembar kerja modern memiliki lebih dari satu juta baris, sehingga perulangan besar langsung melempar error luapan. Gunakan Long untuk setiap indeks baris sebagaimana contoh Sub IsiKolomRekap.
Kesalahan kedua adalah menulis makro tanpa Option Explicit. Variabel yang salah ketik menjadi variabel baru bertipe Variant dan program berjalan sampai selesai dengan hasil yang keliru tanpa satu pun pesan. Deklarasi wajib mengubah kesalahan diam-diam itu menjadi error kompilasi yang menyebut barisnya.
Kesalahan ketiga adalah membawa sintaks VB.NET apa adanya, misalnya List(Of T), interpolasi $"...", atau Try...Catch. Semuanya ditolak editor VBA karena tidak ada runtime .NET di dalam aplikasi Office. Gunakan padanan pada tabel pemetaan, yaitu Collection, penyambungan &, dan pernyataan On Error.
Ringkasan#
- VBA berjalan di dalam host Office tanpa runtime .NET, sehingga makro tersimpan di dalam dokumen dan sintaks dasar VB seperti
Dim,If,For Each, sertaSubtetap berlaku. - Fitur yang bergantung pada .NET tidak terbawa, dan padanannya adalah
Collection, penyambungan&, sertaOn Error, sementara pemeriksaan tipe bawaannya bersifat late binding. - Otomasi Excel bertumpu pada
Range,Cells, danOffsetyang ditelusuri denganFor...NextatauFor Each, sertaOption Explicitdiaktifkan danLonguntuk indeks baris.
Referensi#
- Excel VBA reference — Microsoft Learn — Daftar isi lengkap model objek Excel untuk VBA.
- Range object (Excel) — Microsoft Learn
— Properti dan metode objek
Range, termasukValuedanOffset. - Worksheet.Cells property (Excel) — Microsoft Learn — Merujuk sel dengan indeks baris dan kolom.
- Option Explicit statement — Microsoft Learn — Perintah deklarasi wajib pada tingkat modul.