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.
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.

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

Normalisasi, Denormalisasi, dan Anomali Database

Membuat Relasi Database

Menampilkan Data MySQL dalam Form di Access