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

Kirim email ke