Skip to main content

Memindahkan Data Antar Dua List Box

Seperti telah diketahui, list box berguna meminimalkan kesalahan ketik saat kita hendak memasukkan data ke dalam sebuah tabel. Dengan mematikan properti Allow Value List Edits yang ada pada sebuah list box, pemasukkan data hanya bisa dilakukan dengan memilih, pengguna tidak diperkenankan untuk mengetikkan sesuatu.

Pada pembahasan kali ini, kita akan membuat dua buah list box, di mana list box yang satu digunakan sebagai sumber data, dan list box lainnya digunakan sebagai tempat untuk menyimpan data. Penggunaan contoh di bawah ini mungkin dapat menjelaskan maksud dari pemindahan data antar dua list box.

Departemen Sumber Daya Manusia (SDM) sebuah perusahaan tentu mempunyai arsip daftar riwayat hidup masing-masing karyawannya. Di dalam daftar riwayat hidup itu, tercantup berbagai macam data pribadi karyawan seperti nama, nomor KTP, status pernikahan, pengalaman bekerja, jenjang karir, dan sebagainya sampai dengan kegiatan olah raga yang sering dilakukan oleh si karyawan yang bersangkutan. Daftar riwayat hidup ini biasanya dimasukkan oleh karyawan (terutama karyawan baru) melalui formulir isian. Dari formulir itulah, staff SDM memasukkan datanya ke dalam database komputer. Nah, list box yang akan kita bahas di sini khusus berkaitan dengan kegiatan olah raga.

Pada posting terdahulu, kita sudah membuat list box yang berisi nama jenis olah raga. Dalam sebuah sistem informasi SDM, nama jenis olah raga itu dimasukkan sebagai bagian dari preferensi sistem (system preference), pengaturan sistem (system setting), panel kontrol (control panel), atau istilah-istilah semacam itu. Data dari pengaturan sistem ini kemudian digunakan untuk membantu memudahkan staff SDM memasukkan data olah raga yang ada pada masing-masing karyawan. Gambaran konsepnya seperti di bawah ini.
Gambar 1
Data dalam list box A diambil dari tabel master pengaturan sistem yang ditampilkan untuk membantu staff SDM mengisikan daftar riwayat hidup. Data dalam list box B merupakan form control jenis olah raga yang dipilih/disukai oleh karyawan. Data dalam list box B merupakan bagian dari daftar riwayat hidup karyawan yang disimpan di tabel master daftar riwayat hidup.

Dengan menggunakan list box A, staff SDM dapat memilih berbagai macam jenis olah raga yang disukai oleh karyawannya untuk kemudian dimasukkan ke dalam daftar riwayat hidup karyawan yang bersangkutan. Tentu saja jenis olah raga yang dipilih sesuai dengan formulir isian daftar riwayat hidup karyawan yang bersangkutan. Untuk sekedar informasi, formulir isian daftar riwayat hidup biasanya hanya berisi kotak kosong, di mana karyawan akan menuliskan semua data pribadi sesuai dengan pertanyaan/kuesioner terkait.

Untuk memindahkan data antar dua list box, ikuti langkah berikut ini:
  1. Buka dalam format design view, form yang telah dibuat di posting yang berjudul Manipulasi Data Dengan Menggunakan List Box Pada Form di Access.Bila form ini belum ada, buatlah terlebih dahulu dengan mengikuti petunjuk yang ada pada postingan itu.
  2. Pada list box lstListNamaOlahRaga, ubahlah properti Multi Select=Extended (berada pada tab Other).
  3. Kopilah tombol perintah Tambahkan, tombol perintah Hapus, dan list box lstListNamaOlahRaga dan paste di sebelah kanan seperti pada gambar design view di bawah ini.
    Gambar 2
  4. Ubahlah properti hasil kopian sebagai berikut.
    1. Tombol perintah tambahkan:
      1. Name=Tambahkan2
      2. Caption=Tambahkan->
    2. Tombol perintah Kembalikan:
      1. Name=Kembalikan
      2. Caption=<-Kembalikan
    3. List box Olah Raga Yang Dipilih:
      1. Name= lstOlahRagaYgDipilih
  5. Buka module form dan hapuslah semua kode VBA yang ada dalam modul form itu. Selanjutnya, salin kode VBA berikut ini ke dalam modul form:
    1. Option Compare Database  
    2. Private Sub lstListNamaOlahRaga_KeyDown(KeyCode As Integer, Shift As Integer)  
    3.   If KeyCode = 46 Then Hapus_Click  
    4. End Sub  
    5. Private Sub Hapus_Click()  
    6.   TambahKembali Me.lstListNamaOlahRaga.Name  
    7. End Sub  
    8. Private Sub lstOlahRagaYgDipilih_KeyDown(KeyCode As Integer, Shift As Integer)  
    9.   If KeyCode = 8 Then Kembalikan_Click  
    10. End Sub  
    11. Private Sub Tambahkan_Click()  
    12.   Dim i, n As Integer, strLista As Variant, ada As Boolean  
    13.   If Me.txtInputBox = "" Then  
    14.     MsgBox "Tidak ada data yang ditambahkan"  
    15.     Exit Sub  
    16.   End If  
    17.   With Me.lstListNamaOlahRaga  
    18.     If .ListCount = 0 Then  
    19.       .RowSource = Chr(39) & Me.txtInputBox & Chr(39)  
    20.     Else  
    21.       strLista = Split(.RowSource, ";")  
    22.       For i = LBound(strLista) To UBound(strLista)  
    23.         If strLista(i) = Chr(39) & Me.txtInputBox & Chr(39) Then  
    24.           ada = True  
    25.          Exit For  
    26.         Else  
    27.           ada = False  
    28.         End If  
    29.       Next i  
    30.       If ada Then  
    31.         MsgBox Chr(39) & Me.txtInputBox & Chr(39) & " sudah ada dalam daftar."  
    32.         Me.txtInputBox.SetFocus  
    33.         Exit Sub  
    34.       End If  
    35.       .RowSource = .RowSource & ";" & Chr(39) & Me.txtInputBox & Chr(39)  
    36.     End If  
    37.     .value = .ItemData(.ListCount - 1)  
    38.   End With  
    39.   Me.txtInputBox = ""  
    40.   Me.txtInputBox.SetFocus  
    41. End Sub  
    42. Private Sub Tambahkan2_Click()  
    43.   TambahKembali "lstListNamaOlahRaga""lstOlahRagaYgDipilih"  
    44. End Sub  
    45. Private Sub Kembalikan_Click()  
    46.   TambahKembali Me.lstOlahRagaYgDipilih.Name, Me.lstListNamaOlahRaga.Name  
    47. End Sub  
    48. Private Function TambahKembali(lstSumber As StringOptional lstTarget As String)  
    49.   Dim oItem, oTemp, selectedItem, selectedTemp As Variant  
    50.   Dim blSelected, ada As Boolean  
    51.   Dim ctlSumber, ctlTarget As Control  
    52.   Dim p, i, j, n As Integer  
    53.     
    54.   Set ctlSumber = Controls(lstSumber)  
    55.   If lstTarget <> "" Then Set ctlTarget = Controls(lstTarget) Else Set ctlTarget = Nothing  
    56.   With ctlSumber  
    57.     If .ItemsSelected.Count = 0 Then Exit Function  
    58.     oItem = Split(.RowSource, ";")  
    59.     ReDim selectedTemp(.ItemsSelected.Count - 1)  
    60.       
    61.     If .ItemsSelected.Count = .ListCount Then  
    62.       selectedTemp = oItem  
    63.       .RowSource = ""  
    64.     Else  
    65.       i = 0  
    66.       For Each selectedItem In .ItemsSelected  
    67.         selectedTemp(i) = Chr(39) & .ItemData(selectedItem) & Chr(39)  
    68.         For n = 0 To UBound(oItem)  
    69.           If oItem(n) = Chr(39) & .ItemData(selectedItem) & Chr(39) Then  
    70.             ada = True  
    71.             Exit For  
    72.           End If  
    73.         Next n  
    74.         j = 0  
    75.         If ada Then  
    76.           ReDim oTemp(UBound(oItem) - 1)  
    77.           For n = 0 To UBound(oItem)  
    78.             If oItem(n) <> Chr(39) & .ItemData(selectedItem) & Chr(39) Then  
    79.               oTemp(j) = oItem(n)  
    80.               j = j + 1  
    81.             End If  
    82.           Next n  
    83.         End If  
    84.         oItem = oTemp  
    85.         If i = 0 Then p = selectedItem  
    86.         i = i + 1  
    87.       Next selectedItem  
    88.       .RowSource = Join(oItem, ";")  
    89.     End If  
    90.     If p < .ListCount Then  
    91.       .Selected(p) = True  
    92.     Else  
    93.       .Selected(.ListCount - 1) = True  
    94.     End If  
    95.   End With  
    96.   If lstTarget <> "" Then  
    97.     With ctlTarget  
    98.       If .ListCount = 0 Then  
    99.         .RowSource = Join(selectedTemp, ";")  
    100.       Else  
    101.         .RowSource = .RowSource & ";" & Join(selectedTemp, ";")  
    102.       End If  
    103.     End With  
    104.   End If  
    105. End Function  
Form siap digunakan dan dua buah list box siap untuk dicoba. Tampilan form dalam format form view akan sama seperti gambar 1 di atas, atau bila dihilangkan arsirannya akan tampak seperti gambar 3 di bawah ini.
Gambar 3
Penambahan atau pengurangan data dilakukan oleh Private Function TambahKembali yang bisa dipanggil setiap saat di tempat yang diperlukan seperti tombol perintah Tambahkan, Hapus, dan Kembalikan. Selain itu, kita juga bisa menggunakan backspace untuk mengembalikan item pada Olah Raga Yang Dipilih ke Nama Olah Raga melalui Private Sub lstOlahRagaYgDipilih_KeyDown.

Comments

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