For each ... Next merupakan pernyataan yang digunakan untuk mengulang satu atau lebih pernyataan (statement) atau perintah untuk setiap elemen yang ada dalam sebuah array atau collection. For each ... Next adalah salah satu bentu loop (kalang) yang dibatasi oleh pernyataan For each dan Next. Sebuah program akan melaksanakan loop ini jika, paling tidak, ada sebuah elemen dalam grup. Sesaat setelah berada dalam loop, semua perintah di dalam loop itu akan dijalankan. Jika jumlah elemen dalam grup lebih dari satu, maka semua perintah di dalam loop itu akan dijalankan di setiap elemen yang ada di grup. Bila tidak ada lagi elemen dalam grup, maka loop itu selesai dan dilanjutkan dengan perintah berikutnya yang berada di bawah Next.
Syntax penulisannya adalah sebagai berikut:
For Each element In group (Untuk Setiap element dalam grup )
[statements] (lakukanlah perintah-perintah ini)
[Exit For] (Bila element itu memenuhi persyaratan tertentu maka keluarlah )
[statements] (atau lanjutkan dengan perintah-perintah ini. )
Next [element] (Lakukan dengan cara yang sama untuk elemen berikutnya)
Berikut ini adalah contoh fungsi yang menggunakan statement For Each ... Next.
Fungsi contohForEach adalah contoh yang paling sederhana, digunakan untuk menampilkan nama bulan dari sebuah variable array variant yang bernama vasSampel. Kita dapat mengeksekusi fungsi di atas dalam Immediate Window seperti gambar di bawah ini.
Untuk menampilkan seluruh tabel yang ada di bagian Tables dari Access Navigation Pane, gunakan fungsi ini:
Untuk memastikan ada sebuah tabel dengan nama "tblPeriode" di bagian Tables dari Access Navigation Pane, gunakan fungsi ini:
Bila fungsi cekNamaTabel dieksekusi di Immediate Window, maka hasilnya seperti ini:
Untuk menampilkan seluruh query yang ada di bagian Queries dari Access Navigation Pane, gunakan fungsi ini:
Untuk memastikan ada sebuah query dengan nama "Query1" di bagian Queries dari Access Navigation Pane, gunakan fungsi ini:
Untuk menampilkan seluruh form yang ada di bagian Forms dari Access Navigation Pane, gunakan fungsi ini:
Untuk memastikan ada sebuah form dengan nama "Form2" di bagian Forms dari Access Navigation Pane, gunakan fungsi ini:
Bila digunakan untuk objek yang berupa report, gantilah kata "Form" di atas dengan "Report"
For each loop bisa digunakan untuk menampilkan sekumpulan objek/properti yang ada dalam sebuah objek yang berupa tabel, field, control, dan sebagainya. Sekumpulan (dalam bahasa Accessnya disebut Collection) biasanya dinyatakan dengan bentu jamak, misalnya: properties, controls, tables, forms, dan sebagainya.
Sebagai contoh, bila kita ingin menampilkan nama control yang ada dalam sebuah form, kita bisa menjalankan fungsi berikut ini:
Bila fungsi tampilkanControlDariForm dieksekusi di Immediate Window, maka hasilnya seperti ini:
Fungsi tampilkanControlDariForm(forms("frmRekUtama")) digunakan untuk menampilkan nama control yang berada di dalam form frmRekUtama. Supaya bisa dijalankan, maka frmRekUtama harus dibuka terlebih dahaulu (seperti gambar di atas), sehingga fungsi ini bisa menampilkan control dalam form frmRekutama. Pada hasil eksekusi di atas, tipe 109 adalah text box, 111 adalah combo box, sedangkan 100 adalah label.
Kita dapat memperluas fungsi tampilkanControlDariForm di atas untuk menampilkan rincian properti dari masing-masing control di atas. Untuk itu, fungsi di atas akan kita ubah menjadi:
Fungsi tampilkanControlPropertiDariForm di atas menampilkan nama control dan rincian properti dari masing-masing control. Rincian dari sebuah control bisa terdiri dari berbagai macam properti, oleh karena itu,fungsi di atas hanya terbatas sampai dengan properti "Visible" seperti diperintahkan oleh pernyataan If prp.Name = "Visible" Then Exit For.
Pada contoh di atas, pernyataan If ctl.ControlType = 100 Then GoTo elementBerikutnya akan menghentikan proses looping ctl bila control type dari ctl berupa label (dinyatakan dengan angka 100). Jadi, kita tidak menampilkan tipe control yang berupa label, semua tipe control dalam fungsi di atas akan ditampilkan kecual label.
Syntax penulisannya adalah sebagai berikut:
For Each element In group (Untuk Setiap element dalam grup )
[statements] (lakukanlah perintah-perintah ini)
[Exit For] (Bila element itu memenuhi persyaratan tertentu maka keluarlah )
[statements] (atau lanjutkan dengan perintah-perintah ini. )
Next [element] (Lakukan dengan cara yang sama untuk elemen berikutnya)
Berikut ini adalah contoh fungsi yang menggunakan statement For Each ... Next.
- Function contohForEach()
- Dim varSampel As Variant
- Dim i As Integer
- Dim varBulan As Variant
- varSampel = Array("Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Agt", "Sep", "Okt", "Nov", "Des")
- For Each varBulan In varSampel
- Debug.Print varBulan
- Next varBulan
- End Function
Untuk menampilkan seluruh tabel yang ada di bagian Tables dari Access Navigation Pane, gunakan fungsi ini:
- Function tampilkanTabel()
- Dim tbl As TableDef
- For Each tbl In CurrentDb.TableDefs
- Debug.Print tbl.Name
- Next tbl
- End Function
- Function cekNamaTabel(strNamaTabel As String) As Boolean
- Dim tbl As TableDef
- cekNamaTabel = False
- For Each tbl In CurrentDb.TableDefs
- If tbl.Name = strNamaTabel Then
- cekNamaTabel = True
- Debug.Print "Ada tabel " & strNamaTabel; " di Navigation Pane"
- Exit For
- End If
- Next tbl
- End Function
- ?cekNamaTabel("tblPeriode")
- Ada tabel tblPeriode di Navigation Pane
- True
Untuk menampilkan seluruh query yang ada di bagian Queries dari Access Navigation Pane, gunakan fungsi ini:
- Function tampilkanQuery()
- Dim qdf As QueryDef
- For Each qdf In CurrentDb.QueryDefs
- Debug.Print qdf.Name
- Next qdf
- End Function
- Function cekNamaQuery(strNamaQuery As String) As Boolean
- Dim qdf As QueryDef
- cekNamaQuery = False
- For Each qdf In CurrentDb.QueryDefs
- If qdf.Name = strNamaQuery Then
- cekNamaQuery = True
- Debug.Print "Ada query " & strNamaQuery & " di Navigation Pane"
- Exit For
- End If
- Next qdf
- End Function
- Function tampilkanForm()
- Dim obj As AccessObject
- For Each obj In Application.CurrentProject.AllForms
- Debug.Print obj.Name
- Next obj
- End Function
- Function cekNamaForm(strNamaForm As String) As Boolean
- Dim obj As AccessObject
- cekNamaForm = False
- For Each obj In Application.CurrentProject.AllForms
- If obj.Name = strNamaForm Then
- cekNamaForm = True
- Debug.Print "Ada query " & strNamaForm & " di Navigation Pane"
- Exit For
- End If
- Next obj
- End Function
For each loop bisa digunakan untuk menampilkan sekumpulan objek/properti yang ada dalam sebuah objek yang berupa tabel, field, control, dan sebagainya. Sekumpulan (dalam bahasa Accessnya disebut Collection) biasanya dinyatakan dengan bentu jamak, misalnya: properties, controls, tables, forms, dan sebagainya.
Sebagai contoh, bila kita ingin menampilkan nama control yang ada dalam sebuah form, kita bisa menjalankan fungsi berikut ini:
- Function tampilkanControlDariForm(frm As Form)
- Dim ctl As Control
- For Each ctl In frm.Controls
- Debug.Print "Nama Control: " & ctl.Name & ", Tipe: " & ctl.ControlType
- Next ctl
- End Function
- ?tampilkanControlDariForm(forms("frmRekUtama"))
- Nama Control: KodeRek, Tipe: 109
- Nama Control: Label5, Tipe: 100
- Nama Control: NamaRek, Tipe: 109
- Nama Control: Label6, Tipe: 100
- Nama Control: Grup, Tipe: 111
- Nama Control: Label7, Tipe: 100
Kita dapat memperluas fungsi tampilkanControlDariForm di atas untuk menampilkan rincian properti dari masing-masing control di atas. Untuk itu, fungsi di atas akan kita ubah menjadi:
- Function tampilkanControlPropertiDariForm(frm As Form)
- Dim ctl As Control
- Dim prp As Property
- For Each ctl In frm.Controls
- Debug.Print "Nama Control: " & ctl.Name & ", Tipe: " & ctl.ControlType
- For Each prp In ctl.Properties
- Debug.Print vbTab & "Nama Properti: " & prp.Name & ", Nilai: " & prp.value
- If prp.Name = "Visible" Then Exit For
- Next prp
- Next ctl
- End Function
Menghentikan proses looping untuk dilanjutkan ke elemen berikutnya
Kita dapat menghentikan proses looping di dalam For each...Next untuk dilanjutkan ke proses berikutnya. Ada berbagai macam alasan mengapa kita ingin melanjutkan ke elemen berikutnya. Intinya, kita hanya menghendaki looping sesuai dengan yang dibutuhkan. Fungsi tampilkanControlDariForm diubah menjadi seperti di bawah ini.- Function tampilkanControlDariForm(frm As Form)
- Dim ctl As Control
- Dim prp As Property
- For Each ctl In frm.Controls
- If ctl.ControlType = 100 Then GoTo elementBerikutnya
- Debug.Print "Nama Control: " & ctl.Name & ", Tipe: " & ctl.ControlType
- For Each prp In ctl.Properties
- Debug.Print vbTab & "Nama Properti: " & prp.Name & ", Nilai: " & prp.value
- If prp.Name = "Visible" Then Exit For
- Next prp
- elementBerikutnya:
- Next ctl
- End Function
MAU TANYA PAK...
ReplyDeleteMISAL SAYA PUNYA DAFTAR NAMA SISWA DI RANGE (A1:A30)
LALU DAFTAR SISWA MASUK DI RANGE (B1:B25)
SAYA MAU ISI DI KOLOM C SISWA YANG TIDAK MASUK. FORMULANYA BAGAIMANA PAK.. TERIMAKASIH