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 :
[image: Inline image 1]
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<http://b-excel.blogspot.com/2013/07/belajarvba-006-object-dalam-excel.html>
.
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.
>
>
>
<<xl007_gen26_class_range.gif>>

