Pendahuluan
Saat menulis program menggunakan VBA Excel, Anda akan sering bekerja dengan objek seperti Workbook, Worksheet, Range, Chart, maupun objek lainnya. Tidak jarang, sebuah objek yang sama harus diakses berkali-kali untuk mengubah berbagai properti atau menjalankan beberapa metode.
Sebagai contoh, ketika ingin mengubah isi sel, mengatur jenis huruf, warna latar belakang, perataan teks, dan format angka pada satu sel, Anda mungkin akan menuliskan nama objek yang sama berulang kali.
Meskipun kode tersebut tetap dapat dijalankan, penulisannya menjadi lebih panjang, kurang efisien, dan lebih sulit dibaca.
Untuk mengatasi hal tersebut, VBA menyediakan pernyataan ****With, yaitu struktur yang memungkinkan beberapa operasi dilakukan terhadap objek yang sama tanpa perlu menuliskan nama objek secara berulang.
Apa Itu Pernyataan With?
With adalah struktur kontrol yang digunakan untuk melakukan beberapa operasi terhadap satu objek yang sama.
Begitu objek ditentukan pada baris With, seluruh properti maupun metode di dalam blok tersebut cukup diawali dengan tanda titik (.).
Dengan demikian:
-
kode menjadi lebih singkat,
-
lebih mudah dibaca,
-
lebih mudah dipelihara,
-
serta mengurangi kemungkinan kesalahan penulisan nama objek.
Mengapa Menggunakan With?
Bayangkan Anda harus menulis kode berikut.
Range("A1").Value = "Belajar VBA"
Range("A1").Font.Bold = True
Range("A1").Font.Size = 14
Range("A1").Interior.Color = vbYellow
Range("A1").HorizontalAlignment = xlCenter
Objek Range("A1") ditulis sebanyak lima kali.
Menggunakan With, kode tersebut berubah menjadi:
With Range("A1")
.Value = "Belajar VBA"
.Font.Bold = True
.Font.Size = 14
.Interior.Color = vbYellow
.HorizontalAlignment = xlCenter
End With
Hasilnya sama, tetapi kode jauh lebih bersih.
Sintaks
Sintaks umum pernyataan With adalah sebagai berikut.
With objek
.Property = Nilai
.Method
End With
Penjelasan Sintaks
With
Memulai blok yang akan menggunakan suatu objek.
objek
Objek yang akan diakses, misalnya:
-
Workbook
-
Worksheet
-
Range
-
Cells
-
Chart
-
Shape
-
Font
-
Interior
.Property
Digunakan untuk mengubah atau membaca properti objek.
Contoh:
.Value
.Name
.Bold
.Method
Digunakan untuk menjalankan suatu metode.
Contoh:
.Select
.Clear
.Copy
.Delete
End With
Menutup blok With.
Cara Kerja With
Saat VBA menemukan kode berikut.
With Range("B2")
Maka setiap kode yang diawali tanda titik (.) akan dianggap sebagai bagian dari:
Range("B2")
Misalnya:
.Value
sebenarnya dibaca VBA sebagai:
Range("B2").Value
Sedangkan
.Font.Size
dibaca sebagai
Range("B2").Font.Size
Hal ini berlangsung hingga VBA menemukan:
End With
Contoh Dasar
Contoh 1
Mengubah isi sebuah sel.
Sub ContohWith()
With Range("A1")
.Value = "Microsoft Excel"
End With
End Sub
Contoh 2
Mengubah beberapa properti sekaligus.
Sub FormatJudul()
With Range("A1")
.Value = "Laporan Penjualan"
.Font.Bold = True
.Font.Size = 16
.Font.Name = "Calibri"
.Interior.Color = vbYellow
.HorizontalAlignment = xlCenter
End With
End Sub
Output:
-
Isi sel berubah.
-
Huruf menjadi tebal.
-
Ukuran huruf menjadi 16.
-
Warna latar belakang kuning.
-
Posisi teks di tengah.
Menggunakan With pada Worksheet
Selain Range, With juga dapat digunakan pada objek Worksheet.
Sub ContohWorksheet()
With Worksheets("Data")
.Range("A1").Value = "Nama"
.Range("B1").Value = "Alamat"
.Range("A1:B1").Font.Bold = True
End With
End Sub
Karena objeknya adalah worksheet Data, seluruh .Range() mengacu pada worksheet tersebut.
Menggunakan With pada Workbook
Sub ContohWorkbook()
With ActiveWorkbook
MsgBox .Name
.Save
End With
End Sub
Kode tersebut:
-
menampilkan nama workbook,
-
kemudian menyimpan workbook.
Menggunakan With pada Font
Objek Font juga dapat menggunakan With.
Sub FormatFont()
With Range("A1").Font
.Name = "Arial"
.Size = 12
.Bold = True
.Italic = True
.Color = vbBlue
End With
End Sub
Karena objeknya adalah Font, semua properti mengacu pada pengaturan huruf.
Menggunakan With pada Interior
Sub FormatBackground()
With Range("A1").Interior
.Color = vbYellow
.Pattern = xlSolid
End With
End Sub
Nested With (With Bersarang)
With dapat digunakan di dalam With.
Sub NestedWith()
With Worksheets("Data")
With .Range("A1")
.Value = "Belajar VBA"
.Font.Bold = True
.Interior.Color = vbYellow
End With
End With
End Sub
Penjelasan:
Blok pertama mengacu pada worksheet.
Blok kedua mengacu pada sel A1 pada worksheet tersebut.
Nested With sangat berguna ketika bekerja dengan objek bertingkat.
Studi Kasus
Membuat Header Tabel
Misalkan Anda ingin membuat header laporan.
Sub HeaderLaporan()
With Range("A1:D1")
.Value = Array("Kode", "Nama", "Jumlah", "Harga")
.Font.Bold = True
.Interior.Color = RGB(0, 112, 192)
.Font.Color = vbWhite
.HorizontalAlignment = xlCenter
End With
End Sub
Hasilnya:
-
Header otomatis dibuat.
-
Tulisan tebal.
-
Warna biru.
-
Teks putih.
-
Posisi rata tengah.
Perbandingan Dengan dan Tanpa With
Tanpa With
Range("A1").Font.Bold = True
Range("A1").Font.Size = 14
Range("A1").Interior.Color = vbYellow
Range("A1").HorizontalAlignment = xlCenter
Dengan With
With Range("A1")
.Font.Bold = True
.Font.Size = 14
.Interior.Color = vbYellow
.HorizontalAlignment = xlCenter
End With
Kode kedua lebih singkat, lebih mudah dibaca, dan lebih mudah dipelihara.
Tips & Best Practice
Gunakan With jika objek digunakan lebih dari satu kali.
Contoh yang tepat:
With Range("A1")
.Value = "Data"
.Font.Bold = True
End With
Jangan gunakan With untuk satu operasi saja.
Kurang efektif:
With Range("A1")
.Value = "Excel"
End With
Lebih sederhana:
Range("A1").Value = "Excel"
Hindari Nested With yang terlalu dalam.
Maksimal dua atau tiga tingkat agar kode tetap mudah dipahami.
Gunakan indentasi.
Indentasi membuat struktur program lebih jelas.
Kesalahan yang Sering Terjadi
Lupa tanda titik (.)
Salah:
With Range("A1")
Value = "Excel"
End With
Benar:
With Range("A1")
.Value = "Excel"
End With
Lupa menutup End With
With Range("A1")
.Value = "Belajar"
Kode tersebut akan menghasilkan kesalahan sintaks karena blok With belum ditutup.
Menggunakan Objek yang Tidak Valid
With Worksheets("DataTidakAda")
.Range("A1").Value = "Tes"
End With
Apabila worksheet DataTidakAda tidak tersedia, VBA akan menghasilkan Run-time Error.
Ringkasan
Pada artikel ini Anda telah mempelajari bahwa:
-
Withdigunakan untuk bekerja dengan satu objek yang sama. -
Semua properti di dalam blok diawali dengan tanda titik (
.). -
Withmembuat kode lebih ringkas dan mudah dibaca. -
Withdapat digunakan padaRange,Worksheet,Workbook,Font,Interior, dan objek VBA lainnya. -
Nested Withmemungkinkan pengelompokan objek bertingkat, tetapi penggunaannya sebaiknya tidak berlebihan. -
Gunakan
Withketika objek digunakan berulang kali dalam satu blok kode.
Latihan
Latihan 1
Buat program yang mengubah sel A1 menjadi:
-
Berisi teks "Belajar VBA Excel"
-
Huruf Bold
-
Ukuran huruf 14
-
Warna latar belakang Kuning
-
Posisi teks Tengah
Gunakan pernyataan With.
Latihan 2
Buat program yang mengatur range A1 menjadi:
-
Font Calibri
-
Ukuran 11
-
Border di semua sisi
-
Horizontal Alignment Center
Gunakan hanya satu blok With.
Latihan 3
Buat program menggunakan Nested With untuk:
-
Mengakses worksheet "Data"
-
Mengatur sel B2
-
Mengisi nilai "Selesai"
-
Memberi warna hijau
-
Huruf berwarna putih
Pembahasan Singkat
Latihan 1
Sub Latihan1()
With Range("A1")
.Value = "Belajar VBA Excel"
.Font.Bold = True
.Font.Size = 14
.Interior.Color = vbYellow
.HorizontalAlignment = xlCenter
End With
End Sub
Kesimpulan
Pernyataan With merupakan fitur VBA Excel yang digunakan untuk menyederhanakan penulisan kode ketika bekerja dengan objek yang sama secara berulang. Dengan menggunakan With, kode menjadi lebih ringkas, mudah dibaca, dan lebih mudah dipelihara.
Melalui artikel ini, Anda telah mempelajari sintaks, cara kerja, serta berbagai contoh penggunaan With pada objek seperti Range, Worksheet, Workbook, dan Font. Anda juga memahami pentingnya menggunakan With pada kondisi yang tepat serta menghindari kesalahan umum, seperti lupa menambahkan tanda titik (.) atau End With.
Dengan menguasai pernyataan With, Anda dapat menulis kode VBA yang lebih rapi, efisien, dan profesional. Pada artikel berikutnya, kita akan membahas Pernyataan If...Then, yang digunakan untuk menjalankan kode berdasarkan kondisi tertentu.
