mas Zain, *** di definisi class clsGeometri : '===code dalam class module===== '==nama class module: clsGeometri
Option Explicit Private pPanjang As Double Private pLebar As Double Public Property Get panjangnya() As Double panjangnya = pPanjang End Property Public Property Let panjangnya(Value As Double) 'panjangnya = Value pPanjang =value End Property Public Property Get lebarnya() As Double lebarnya = pLebar End Property Public Property Let lebarnya(Value As Double) 'lebarnya = Value pLebar =value End Property Wassalam, Kid. 2013/10/3 zainul_ulum[at]yahoo[dot]com <[email protected]> > ** > > > Terimakasih penjelasannya Mr. Kid. > Saya juga sudah berkunjung ke tautan yang direkomendasikan tapi belum > sesuai > yang saya inginkan. > berikut gambaran problem yang sedang saya hadapi > '===code dalam class module===== > '==nama class module: clsGeometri > > Option Explicit > Private pPanjang As Double > Private pLebar As Double > Public Property Get panjangnya() As Double > panjangnya = pPanjang > End Property > Public Property Let panjangnya(Value As Double) > panjangnya = Value > End Property > > Public Property Get lebarnya() As Double > lebarnya = pLebar > End Property > > Public Property Let lebarnya(Value As Double) > lebarnya = Value > End Property > > '=====code dalam standard module > Option Explicit > 'dalam standard module,biasanya saya menggunakan declarasi type untuk > membuat object baru > Type kotak > panjang As Double > lebar As Double > End Type > > Sub MembuatObjectDiVbaType01() > 'membuat objeck lapangan dengan type kotak > Dim lapangan As kotak > > 'memasukkan parameter panjang dan lebar ke objek lapangan > lapangan.panjang = 100 > lapangan.lebar = 50 > > 'menghitung luas lapangan > Dim luas As Double > luas = lapangan.panjang * lapangan.lebar > MsgBox luas > > End Sub > > 'kemudian saya coba membuat objcet yang sama menggunakan dengan mengambil > 'property yang telah dibuat di class module [clsGeometri] > > Sub MembuatObjectDiVbaType02() > Dim oLapangan As New clsGeometri > > 'memasukkan parameter panjang ke object lapangan > oLapangan.lebarnya = 100# > oLapangan.panjangnya = 50# > > 'menghitung luas lapangan > Dim luas As Double > luas = oLapangan.lebarnya * oLapangan.panjangnya > Debug.Print luas > End Sub > > 'tanya: > 'kenapa ada pesan error saat saya jalankan procedure > MembuatObjectDiVbaType02? > 'terimakasih > '-zainul- > > From: [email protected] [mailto:[email protected]] > On Behalf Of Mr. Kid > Sent: Wednesday, October 02, 2013 10:12 PM > To: BeExcel > Subject: Re: [belajar-excel] OOP (was Macro Openoffice) > > > hehehe... > mau mulai dari mana ya.. > yang sederhana saja. > disemua module. > Pada dasarnya prosedur property (ada Get, ada Set atau Let) digunakan untuk > berinteraksi dengan sebuah atribut yang isinya adalah suatu nilai tertentu > (bisa berupa object atau nilai skalar). Kalau dimirip-miripin alias > disimpelkan secara teknis, maka prosedur property adalah cara untuk > berinteraksi dengan variabel yang diterkait. > Jadi, misal ada variabel level module (private) bernama mMyVar, maka akses > ke variabel ini bisa diatur menggunakan prosedur property. Get untuk ambil, > Set (khusus object) atau Let untuk mengisi si variabel mMyVar. > Alhasil, misal ada property bernama MyVariable yang berisi prosedur > properti > Get, maka isi mMyVar bisa diambil dengan menyebut nama prosedur property > seperti memanggil sebuah variabel. > Misal : mau ambil nilai mMyVar yang punya properti dan disimpan ke variabel > baru bernama sKerja, maka bisa langsung : > sKerja = MyVariable > Sekarang bahas yang umum dipakai. > Pemakaian prosedur property secara luas adalah pada class module, alias > digunakan untuk menentukan atau membentuk properti suatu object yang > dibentuk melalui class tersebut. > > Contoh : kenal dengan Range di Excel ? Pernah isi nilai atau ambil nilai > dari si range ? mestinya pernah kan ya... :) > kira-kira untuk hal isi didalam range akan punya cerita gini : > > Didalamnya Excel sana, Range adalah nama sebuah Class. Dia punya (anggap > saja) sebuah variabel khusus milik si class yang bernama mValue. Nilai yang > disimpan dalam mValue, boleh diakses semua object yang dibentuk melalui > class Range ini melalui property object bernama Value. Didalam class Range, > property bernama Value ini didefinisikan dengan prosedur property Get untuk > ambil nilai dan prosedur property Let untuk mengisi nilai. > Kemudian di VBE, pada sebuah module, ada pembuatan variabel object dari > class Range. Nama variabel object itu dinamakan misalnya rngData. > Bunyi pembuatannya begini : > Dim rngData As Range 'artinya, buatkan benda bernama rngData yang > wujudnya > memiliki spesifikasi yang dijabarkan dalam class Range > Jadi, dalam rngData, akan ada property bernama Value untuk bisa mengakses > variabel bernama mValue milik si benda bernama rngData. > Kalau ada pembuatan object baru lagi > Dim rngKriteria As Range > Maka, dalam rngKriteria akan ada property bernama Value untuk bisa > mengakses > variabel bernama mValue milik si benda bernama rngKriteria > Si variabel sudah terbentuk tapi belum ada isi benda aslinya, karena si > benda asli kan dipakai user di worksheet. Jadi, si rngData akan diisi > dengan > sebuah range yang ada di worksheet aktif, misal range A1. > Set rngData = Range("a1") ' "sit sit, ikutan pakai range A1 dong", kata > si rngData -> kalau error, berarti rngData salah omong. > > Sekarang, kalau mau mengisi nilai range A1 dengan nilai 12345, maka sama > saja akan mengisi variabel mValue milik si rngData. Aksesnya adalah melalui > properti bernama Value, yang biasanya ditulis begini : > rngData.Value = 12345 > proses ini sebenarnya, menjalankan prosedur property Let bernama Value > milik > si rngData dengan mengirim nilai 12345. > meskipun menjalankan prosedur, penggunaannya seperti memakai variabel biasa > kan. Sisi kiri sama dengan diisi sisi kanan sama dengan. > > Kalau mau ambil nilai mValue milik si rngData (saat ini berisi 12345) dan > disimpan ke variabel bernama lNilaiku, akan berbunyi : > Dim lNilaiku As Long > lNilaiku = rngData.Value > > *1) Hal ini adalah salah satu kelebihan prosedur property dalam sebuah > property object dan hanya menjadi milik si class module jika prosedur > property nya ditulis untuk class module tersebut. Jadi, class module lain > bisa saja memiliki property bernama Value juga tapi pemiliknya beda. > > Contoh, ada property Value milik class Range (boleh dibaca milik Range), > ada > property value milik control TextBox. Sama-sama property value tapi beda > pemilik. Di class Range ada prosedur properti untuk property bernama Value. > Di class TextBox juga ada prosedur property bernama Value. > > Bagaimana kalau mValue diset gak pakai property ? bisa gak ? -- bisa kok, > kita coba saja ya, biar terasa ribetnya -- > Kalau ndak pakai prosedur property, berarti pakai prosedur Sub atau > Function > yang sering disebut methods. > Jadi didalam class Range nanti akan ada 2 methods baru untuk bisa menyimpan > nilai kedalam variabel mValue, yaitu : > public sub IsiValue( vNilainya as variant ) 'untuk isi nilai ke mValue > mvalue=vnilainya > end sub > public function AmbilValue() as variant 'untuk ambil nilai dari > mValue > AmbilValue = mvalue > end sub > > sampai disini, sudah akan tampak bahwa untuk ngurusin si mValue butuh 2 > nama, yaitu IsiValue (mengisi alias setara property Let) dan AmbilNilai > (mengambil alias setara property Get). Alhasil, kalau nulis script, setelah > ketik rngData lalu ketik titik akan muncul 2 nama. Harus pilih yang bener, > mau isivalue atau ambilvalue. > *2) Kalau pakai property Get dan Let, namanya akan jadi property object, > dan > hanya ada sebijik saja yaitu Value. > Bagaimana cara isi nilai ke mValue dan ambil nilai dari mValue milik si > rngData ? > rngdata.IsiValue 12345 'isi nilai ke mValue milik rngData > lNilaiku = rngdata.ambilvalue 'ambil nilai mvalue milik rngData > > *3) Ada perbedaan penulisan dalam mengisi nilai dengan mengambil nilai, > sehingga membutuhkan ketelitian lebih tinggi untuk bisa tahu dimana proses > mengisi nilainya dan dimana proses ambil nilainya. > > Kira-kira demikianlah beberapa keuntungan prosedur property dalam membentuk > property object. > Tentang bagaimana membentuk property object atau cara penggunaan prosedur > property Get dan (Set atau Let) ada diblog milis disini. > > Bahas OOP nya ndak usah banyak-banyak ya... > Salah satu ciri khas sederhana OOP, pemakaiannya harus ditulis lengkap. > Contoh : (penulisan 1) > di VBA, untuk isi range A1 dengan nilai 12345 dan B1 diisi dengan teks > 'BeExcel' bisa dengan : > Range("a1").Value = 12345 'workbook aktif, di sheet yang aktif, di > range A1, isi properti bernama Value dengan 12345 > atau > Range("a1") = 12345 'workbook aktif, di sheet yang aktif, di range A1, > isi properti default si object (yaitu yang bernama Value) dengan 12345 > > Range("b1").value = "BeExcel" > atau > Range("b1") = "BeExcel" > > Kalau pakai OOP yang baik, nulisnya : (penulisan 2) > ThisWorkbook.ActiveSheet.Range("a1").Value = 12345 > ThisWorkbook.ActiveSheet.Range("b1").Value = "BeExcel" > Kalau bahasa pemrogramannya betul-betul full berbasis OOP, maka penulisan 2 > yang bisa dijalankan dan semua penulisan 1 akan error. > > Contoh di OpenOffice.org Calc untuk kasus yang sama, harus ditulis : > ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("A1").Value > = > 12345 > ThisComponent.CurrentController.ActiveSheet.getCellRangeByName("B1").String > = "BeExcel" > > banyak yang bilang, OOP nulisnya panjang banget.... xixixixi... (kan bisa > disimpen dalam variabel) > > udahan dulu ya... kalo ada yang salah, dikoreksi yak... > Wassalam, > Kid. > > 2013/10/2 zainul_ulum[at]yahoo[dot]com <[email protected]> > > Mumpung disinggung tentang OOP kalo nggak salah kepanjangan dari (Object > Oriented Programming), minta tolong diulas tentang "property get statement" > dan "property set statement". > kelebihan menggunakan statement tersebut jika dibanding dengan menggunakan > statement tersebut? > > maturnuwun > -zainul- > > From: [email protected] [mailto:[email protected]] > On Behalf Of Mr. Kid > Sent: Wednesday, October 02, 2013 8:55 AM > To: BeExcel > Subject: Re: [belajar-excel] Macro Openoffice > > wakakaka... > iya, perlu dicoba dulu. > Kalau di star office waktu doeloe sih bisa. Cuman kadang gak bisa pas udah > berurusan sama userform. > Jadi bikin VBAnya jangan yang rumit ya. Mungkin VBASupport nya akan > mengubah > si VBA jadi VBScript kali ya... > Saya gak mudeng dalemannya. Dokumentasinya dikit. > > Kalau struktur objectnya, si OO memang lebih bagus dari VBA karena full > OOP. > Mungkin nanti kalau dah mulai banyak dokumentasi object model nya akan jadi > lebih enak. > > Wassalam, > Kid. > > >

