maturnuwun Mas, sudah bisa jalan sekarang.
thanks -zainul- From: [email protected] [mailto:[email protected]] On Behalf Of Mr. Kid Sent: Thursday, October 03, 2013 10:14 AM To: BeExcel Subject: Re: [belajar-excel] OOP (was Macro Openoffice) 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.
<<image001.jpg>>
<<image002.jpg>>

