Skip to main content

Berbagai Macam Contoh Loop For Each ... Next di Access VBA

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.
  1. Function contohForEach()  
  2.   Dim varSampel As Variant  
  3.   Dim i As Integer  
  4.   Dim varBulan As Variant  
  5.   varSampel = Array("Jan""Feb""Mar""Apr""Mei""Jun""Jul""Agt""Sep""Okt""Nov""Des")  
  6.   For Each varBulan In varSampel  
  7.     Debug.Print varBulan  
  8.   Next varBulan  
  9. 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:
  1. Function tampilkanTabel()  
  2.   Dim tbl As TableDef  
  3.   For Each tbl In CurrentDb.TableDefs  
  4.     Debug.Print tbl.Name  
  5.   Next tbl  
  6. End Function  
Untuk memastikan ada sebuah tabel dengan nama "tblPeriode" di bagian Tables dari Access Navigation Pane, gunakan fungsi ini:
  1. Function cekNamaTabel(strNamaTabel As StringAs Boolean  
  2.   Dim tbl As TableDef  
  3.   cekNamaTabel = False  
  4.   For Each tbl In CurrentDb.TableDefs  
  5.     If tbl.Name = strNamaTabel Then  
  6.       cekNamaTabel = True  
  7.       Debug.Print "Ada tabel " & strNamaTabel; " di Navigation Pane"  
  8.       Exit For  
  9.     End If  
  10.   Next tbl  
  11. End Function  
Bila fungsi cekNamaTabel dieksekusi di Immediate Window, maka hasilnya seperti ini:
  1. ?cekNamaTabel("tblPeriode")  
  2. Ada tabel tblPeriode di Navigation Pane  
  3. True  

Untuk menampilkan seluruh query yang ada di bagian Queries dari Access Navigation Pane, gunakan fungsi ini:
  1. Function tampilkanQuery()  
  2.   Dim qdf As QueryDef  
  3.   For Each qdf In CurrentDb.QueryDefs  
  4.     Debug.Print qdf.Name  
  5.   Next qdf  
  6. End Function  
Untuk memastikan ada sebuah query dengan nama "Query1" di bagian Queries dari Access Navigation Pane, gunakan fungsi ini:
  1. Function cekNamaQuery(strNamaQuery As StringAs Boolean  
  2.   Dim qdf As QueryDef  
  3.   cekNamaQuery = False  
  4.   For Each qdf In CurrentDb.QueryDefs  
  5.     If qdf.Name = strNamaQuery Then  
  6.       cekNamaQuery = True  
  7.       Debug.Print "Ada query " & strNamaQuery & " di Navigation Pane"  
  8.       Exit For  
  9.     End If  
  10.   Next qdf  
  11. End Function  
Untuk menampilkan seluruh form yang ada di bagian Forms dari Access Navigation Pane, gunakan fungsi ini:
  1. Function tampilkanForm()  
  2.   Dim obj As AccessObject  
  3.   For Each obj In Application.CurrentProject.AllForms  
  4.     Debug.Print obj.Name  
  5.   Next obj  
  6. End Function  
Untuk memastikan ada sebuah form dengan nama "Form2" di bagian Forms dari Access Navigation Pane, gunakan fungsi ini:
  1. Function cekNamaForm(strNamaForm As StringAs Boolean  
  2.   Dim obj As AccessObject  
  3.   cekNamaForm = False  
  4.   For Each obj In Application.CurrentProject.AllForms  
  5.     If obj.Name = strNamaForm Then  
  6.       cekNamaForm = True  
  7.       Debug.Print "Ada query " & strNamaForm & " di Navigation Pane"  
  8.       Exit For  
  9.     End If  
  10.   Next obj  
  11. 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:
  1. Function tampilkanControlDariForm(frm As Form)  
  2.   Dim ctl As Control  
  3.   For Each ctl In frm.Controls  
  4.     Debug.Print "Nama Control: " & ctl.Name & ", Tipe: " & ctl.ControlType  
  5.   Next ctl  
  6. End Function  
Bila fungsi tampilkanControlDariForm dieksekusi di Immediate Window, maka hasilnya seperti ini:
  1. ?tampilkanControlDariForm(forms("frmRekUtama"))  
  2. Nama Control: KodeRek, Tipe: 109  
  3. Nama Control: Label5, Tipe: 100  
  4. Nama Control: NamaRek, Tipe: 109  
  5. Nama Control: Label6, Tipe: 100  
  6. Nama Control: Grup, Tipe: 111  
  7. 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:
  1. Function tampilkanControlPropertiDariForm(frm As Form)  
  2.   Dim ctl As Control  
  3.   Dim prp As Property  
  4.   For Each ctl In frm.Controls  
  5.     Debug.Print "Nama Control: " & ctl.Name & ", Tipe: " & ctl.ControlType  
  6.     For Each prp In ctl.Properties  
  7.       Debug.Print vbTab & "Nama Properti: " & prp.Name & ", Nilai: " & prp.value  
  8.       If prp.Name = "Visible" Then Exit For  
  9.     Next prp  
  10.   Next ctl  
  11. 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.
  1. Function tampilkanControlDariForm(frm As Form)  
  2.   Dim ctl As Control  
  3.   Dim prp As Property  
  4.   For Each ctl In frm.Controls  
  5.     If ctl.ControlType = 100 Then GoTo elementBerikutnya  
  6.     Debug.Print "Nama Control: " & ctl.Name & ", Tipe: " & ctl.ControlType  
  7.     For Each prp In ctl.Properties  
  8.       Debug.Print vbTab & "Nama Properti: " & prp.Name & ", Nilai: " & prp.value  
  9.       If prp.Name = "Visible" Then Exit For  
  10.     Next prp  
  11. elementBerikutnya:  
  12.   Next ctl  
  13. 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.

Comments

  1. MAU TANYA PAK...
    MISAL 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

    ReplyDelete

Post a Comment

Posting Terpopuler

Cara Mengatur dan Menggunakan ODBC untuk Mengakses Data Eksternal

Fungsi Untuk Membuka Database di Access VBA

Format Untuk Field Dengan Tipe Data Number dan Currency di MS Access