Pengantar.
Minggu lalu kami memiliki pengenalan singkat tentang Objek Kelas Khusus simple yang sederhana dengan hanya dua Properti, untuk Panjang dan Lebar Nilai. Metode untuk menghitung Luas apa pun, dengan Nilai Panjang dan Lebar. Semoga Anda memahami dasar-dasar Modul Kelas Kustom Ms-Access. Jika tidak, ini tautannya:Modul Kelas Ms-Access dan VBA. Silakan kunjungi halaman sebelum melanjutkan.
Objek Modul Kelas menyimpan banyak Kode di Program Anda. Ketika Anda menemukan sesuatu yang Anda lakukan berulang kali dalam Kode, pikirkan Objek Modul Kelas. Kode berulang dapat diubah menjadi fungsi utilitas juga, tetapi untuk Objek Kelas, Anda harus mengambil pendekatan yang berbeda.
Untuk tugas sederhana, mungkin diperlukan lebih banyak kode untuk menyempurnakan fungsi Objek Modul Kelas, tetapi program modul utama Anda akan sederhana dan semua kode rumit yang dikembangkan dan disempurnakan akan tetap tersembunyi dari yang lain.
Tapi untuk saat ini, kita memiliki Modul Kelas sederhana di tangan kita akan mencoba cara membuat array Objek untuk menghitung Luas dari banyak item.
Sub-Rutinitas ClassArray().
Contoh Kode VBA dalam Modul Standar membuat Array lima Objek Kelas ClsArea dan mencetak Nilai Properti dan Hasil Metodenya di Jendela Debug. Salin dan Tempel (atau lebih baik jika Anda mengetiknya, untuk mengetahui setiap baris lebih baik apa yang mereka lakukan) kode berikut ke dalam Modul Standar:
Public Sub ClassArray() Dim tmpA As ClsArea Dim CA() As ClsArea Dim j As Long, title As String Dim L As Long, U As Long title = "ClassArray" For j = 1 To 5 ‘the Loop is set for 5 items 'instantiate temporary ClsArea Object 'to enter input Set tmpA = New ClsArea tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "") tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0) tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0) 'Redimension Array ReDim Preserve CA(1 To j) As ClsArea Set CA(j) = tmpA 'Copy Object to Array Set tmpA = Nothing 'Remove temporary object from memory. Next ‘PRINTING SECTION 'Print the Array contents into the Debug Window L = LBound(CA) U = UBound(CA) Debug.Print "Description", "Length", "Width", "Area" For j = L To U With CA(j) Debug.Print .strDesc, .dblLength, .dblWidth, .Area End With Next ’stop 'Clear array objects from memory For j = L To U Set CA(j) = Nothing Next End Sub
Klik di suatu tempat di tengah Kode dan tekan F5 untuk mengeksekusi Kode. Masukkan Nilai untuk Deskripsi, Panjang, dan Lebar dari Keyboard untuk 5 Item berbeda, satu demi satu.
Contoh Jalankan Program diberikan di bawah ini:
Description Length Width Area Door Mat 5 8 40 Carpet 12 23 276 Bed Room 21 23 483 Store Room 15 25 375 Terrace 40 50 2000
Ulasan Kode Baris demi Baris.
Mari kita periksa kode baris demi baris. Di area deklarasi, kami telah mendeklarasikan Variabel Objek tmpA Jenis ClsArea. Di baris kedua menyatakan Array kosong CA() Jenis ClsArea. Jumlah elemen yang diperlukan akan diukur ulang nanti dalam program.
Di dua baris berikutnya, kami telah mendeklarasikan variabel title dari tipe String dan j, L, dan U variabel tipe Integer Panjang.
Selanjutnya, variabel judul diinisialisasi dengan string 'ClassArray' dan akan digunakan sebagai Judul di Fungsi InputBox(). Untuk….Selanjutnya loop diatur dengan variabel kontrol j untuk menjalankan loop lima kali. Setelah dua baris komentar berikutnya, Set pernyataan membuat instance (mengalokasikan memori) Objek Kelas ClsArea di memori dengan nama tmpA .
Tiga baris kode berikutnya berfungsi untuk memasukkan nilai untuk strDesc , dblLength, dan dblWidth Properti Objek Kelas tmpA.
Setelah baris komentar berikutnya, ClsArea Class Object (CA) didimensi ulang untuk 1 hingga j kali (1 hingga 1 kali) dengan mempertahankan elemen Objek yang ada, jika ada (ini adalah Objek pertama dalam Array). Ini akan terus meningkat, melalui ReDim pernyataan, ke 1 hingga 2, 1 hingga 3, 1 hingga 4, dan 1 hingga 5 dengan mempertahankan nilai objek sebelumnya, dalam For . . . putaran berikutnya. Cagar Alam kata kunci memastikan bahwa objek array yang ada tidak hilang.
Catatan: Pernyataan Re-Dimension menambah/mengurangi jumlah elemen objek yang ditentukan tetapi menghapus objek yang ada yang dimuat ke dalam array sebelumnya, tanpa Preserve kata kunci.
Set pernyataan di baris berikutnya menyalin Objek tmpA, dengan datanya ke dalam CA(j) Objek ClsArea baru dibuat j elemen larik.
Baris berikutnya Setel tmpA =Tidak Ada menghapus objek sementara dari memori.
Loop For…Next mengulangi tindakan ini empat kali lagi untuk memasukkan item lain ke objek sementara yang baru dibuat tmpA, satu demi satu, dan menyalin objek ke dalam CA Object Array.
Dua baris berikutnya, setelah baris komentar, temukan rentang indeks Array Objek (mencari angka indeks terendah dan tertinggi.
Debug.Print berikutnya pernyataan mencetak baris judul di 14 zona kolom di Jendela Debug. Untuk . . . Selanjutnya loop dengan L dan U rentang nomor indeks array terikat menjalankan pernyataan dalam untuk mengakses setiap Objek dari Array CA, dengan nomor indeks pada variabel kontrol j.
Referensi objek saat ini disetel dalam Dengan. . . Akhiri Dengan struktur, daripada mengulang nama Objek CA(j).strDesc, CA(j).dblLength, CA(j).dblWidth dan CA(j).Area untuk mencetak hasil Nilai Properti Objek dan Area Metode() pada Jendela Debug.
Hapus simbol komentar dari ‘Stop pernyataan untuk membuat jeda di Program pada pernyataan Berhenti. Jalankan kode lagi dan masukkan 5 detail item sehingga Anda dapat bereksperimen dengan Objek Array. Anda dapat secara selektif menangani salah satu Properti Objek, dengan nomor Indeks Array, untuk mengedit atau mencetak nilai apa pun pada Jendela Debug seperti yang ditunjukkan di bawah ini.
Pernyataan Set CA(j) =Tidak Ada dalam Untuk. . . Loop Berikutnya menghapus objek array, satu per satu dari Memori.
Meneruskan Array Objek Kelas sebagai Parameter Fungsi.
Kita dapat meneruskan Array Objek Kelas sebagai Parameter ke program, seperti yang kita lakukan dengan Tipe Data Buatan Pengguna.
Mari kita buat Subrutin Percetakan sederhana, dengan memotong Kode Bagian Pencetakan, dari program utama, dan menempatkannya ke dalam program baru.
Salin Kode sub-rutin ClassArray(), Tempelkan di Modul Standar yang sama dan ubah namanya menjadi ClassArray2(), seperti yang ditunjukkan di bawah ini.
Public Sub ClassArray2() Dim tmpA As ClsArea Dim CA() As ClsArea Dim j As Long, title As String Dim L As Long, U As Long title = "ClassArray" For j = 1 To 5 ‘the Loop is set for 5 items 'instantiate temporary ClsArea Object 'to enter input Set tmpA = New ClsArea tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "") tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0) tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0) 'Redimension Array ReDim Preserve CA(1 To j) As ClsArea Set CA(j) = tmpA 'Copy Object to Array Set tmpA = Nothing 'Remove temporary object from memory. Next ‘PRINTING SECTION 'Print the Array contents into the Debug Window L = LBound(CA) U = UBound(CA) Debug.Print "Description", "Length", "Width", "Area" For j = L To U With CA(j) Debug.Print .strDesc, .dblLength, .dblWidth, .Area End With Next ’stop 'Clear array objects from memory For j = L To U Set CA(j) = Nothing Next End Sub
Bagian Kode ClassArray2 Tanpa Mencetak.
Buat Sub-Rutin baru seperti yang diberikan di bawah ini:
Public Sub ClassPrint(ByRef clsPrint() As ClsArea) Dim L As Long, U As Long Dim j As Long End Sub
Sorot Bagian Pencetakan hingga pernyataan 'Stop di Program ClassArray2(), potong area Kode yang disorot, dan tempel di bawah Redup pernyataan di ClassPrint() Program. Versi modifikasi dari kedua Kode diberikan di bawah ini:
Public Sub ClassArray2() Dim tmpA As ClsArea Dim CA() As ClsArea Dim j As Long, title As String title = "ClassArray" For j = 1 To 5 ‘the Loop is set for 5 items 'instantiate temporary ClsArea Object 'to enter input Set tmpA = New ClsArea tmpA.strDesc = InputBox(Str(j) & ") Description:", title, "") tmpA.dblLength = InputBox(Str(j) & ") Enter Length:", title, 0) tmpA.dblWidth = InputBox(Str(j) & ") Enter Width:", title, 0) 'Redimension Array ReDim Preserve CA(1 To j) As ClsArea Set CA(j) = tmpA 'Copy Object to Array Set tmpA = Nothing 'Remove temporary object from memory. Next Call ClassPrint(CA) ‘Pass the Object Array to print routine 'Clear array objects from memory For j = L To U Set CA(j) = Nothing Next End Sub
Program ClassPrint().
Public Sub ClassPrint(ByRef clsPrint() As ClsArea) Dim L As Long, U As Long Dim j As Long 'Printing Section 'Print the Array Contents into the Debug Window. L = LBound(clsPrint) U = UBound(clsPrint) Debug.Print "Description", "Length", "Width", "Area" For j = L To U With clsPrint(j) Debug.Print .strDesc, .dblLength, .dblWidth, .Area End With Next End Sub
Periksa perubahan kode di kedua program dan lakukan koreksi, di mana pun berlaku. Klik di tengah kode ClassArray2() dan tekan F5 untuk menjalankan program.
Pernyataan Panggilan dalam program pertama meneruskan Array Objek Kelas CA sebagai Parameter ByRef ke Subrutin ClassPrint(). Program mencetak Object Properties dan memanggil fungsi Area() untuk menghitung dan mengembalikan nilai yang akan dicetak.
Minggu depan kita akan belajar bagaimana menggunakan modul Kelas ClsArea sebagai Kelas Dasar untuk membuat Objek Kelas VBA baru untuk menghitung Volume dari sesuatu.
- Modul Kelas MS-Access dan VBA
- Array Objek Kelas VBA MS-Access
- Kelas Dasar MS-Access dan Objek Turunannya
- Kelas Dasar VBA dan Objek Turunan-2
- Varian Kelas Dasar dan Objek Turunan
- Set Rekaman Ms-Access dan Modul Kelas
- Mengakses Modul Kelas dan Kelas Pembungkus
- Transformasi Fungsionalitas Kelas Wrapper
- Dasar-dasar Ms-Access dan Objek Koleksi
- Modul Kelas Ms-Access dan Objek Koleksi
- Rekaman Tabel dalam Objek dan Formulir Koleksi
- Dasar-dasar Objek Kamus
- Dasar-Dasar Objek Kamus-2
- Mengurutkan Kunci Objek dan Item Kamus
- Menampilkan Rekaman dari Kamus ke Formulir
- Menambahkan Objek Kelas sebagai Item Kamus
- Memperbarui Item Kamus Objek Kelas pada Formulir