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 Function
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:
Function tampilkanTabel()
Dim tbl As TableDef
For Each tbl In CurrentDb.TableDefs
Debug.Print tbl.Name
Next tbl
End Function
Untuk 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 Function
Bila 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 Function
Untuk 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 Function
Untuk 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 Function
Untuk 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 Function
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:
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
Bila 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: 100
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:
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
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.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
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.



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