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.
Untuk menampilkan seluruh tabel yang ada di bagian Tables dari Access Navigation Pane, gunakan fungsi ini:
Untuk menampilkan seluruh query yang ada di bagian Queries dari Access Navigation Pane, gunakan fungsi ini:
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:
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:
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 FunctionFungsi 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:
Function tampilkanTabel() Dim tbl As TableDef For Each tbl In CurrentDb.TableDefs Debug.Print tbl.Name Next tbl End FunctionUntuk memastikan ada sebuah tabel dengan nama "tblPeriode" di bagian Tables dari Access Navigation Pane, gunakan fungsi ini:
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 FunctionBila fungsi cekNamaTabel dieksekusi di Immediate Window, maka hasilnya seperti ini:
?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 FunctionUntuk memastikan ada sebuah query dengan nama "Query1" di bagian Queries dari Access Navigation Pane, gunakan fungsi ini:
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 FunctionUntuk menampilkan seluruh form yang ada di bagian Forms dari Access Navigation Pane, gunakan fungsi ini:
Function tampilkanForm() Dim obj As AccessObject For Each obj In Application.CurrentProject.AllForms Debug.Print obj.Name Next obj End FunctionUntuk memastikan ada sebuah form dengan nama "Form2" di bagian Forms dari Access Navigation Pane, gunakan fungsi ini:
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 FunctionBila 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:
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 FunctionBila fungsi tampilkanControlDariForm dieksekusi di Immediate Window, maka hasilnya seperti ini:
?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: 100Fungsi 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:
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 FunctionFungsi 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.
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 FunctionPada 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.
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