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

Kirim email ke