Kejujuran sering terkesan menghambat langkah usaha seseorang, padahal sesungguhnya saat itu kejujuran sedang membuka banyak pintu rezeki yang penuh berkah
Pembahasan kali ini adalah berkenalan dengan prosedur jenis property dan penggunaan prosedur jenis sub maupun function untuk bisa bekerja seperti prosedur jenis property. Pembahasan akan ditutup dengan gambaran dari penyusunan suatu proses yang dipecah menjadi banyak prosedur agar dapat meningkatkan daya guna sebuah prosedur dan memudahkan penyempurnaan suatu proses.
Property
Umumnya prosedur property digunakan dalam class module. Prosedur jenis property juga bisa digunakan general module (code module). Prosedur jenis properti mengatur ijin read (bisa digunakan) dan write (bisa diubah nilainya) dari sebuah properti. Prosedur property ada 3 jenis, yaitu Let, Set, dan Get. Property Let dan Set cenderung seperti prosedur Sub yang bertugas sebagai prosedur untuk menyimpan atau mengubah nilai suatu properti.Keberadaan prosedur property Let dan Set menandai bahwa properti tersebut bisa diubah nilainya. Prosedur Get cenderung mirip dengan prosedur function yang bertugas sebagai prosedur untuk mengambil atau membaca nilai suatu properti. Keberadaan prosedur property Get menandai bahwa properti tersebut bisa digunakan atau dibaca nilainya. Contohnya seperti rangkaian script berikut :
- misal di general module bernama mod10 diberi script :
Private rngMyRange As Range 'variabel untuk property object MyData
'property dengan datatype long
Public Property Get Nilai() As Long 'baca isi property
Nilai = lMyNilai
End Property
Public Property Let Nilai(lNilai As Long) 'ubah isi property
lMyNilai = lNilai
End Property
'property dengan datatype object
Public Property Get MyData() As Range 'baca isi property
Set MyData = rngMyRange
End Property
Public Property Set MyData(rng As Range) 'ubah isi property
Set rngMyRange = rng
End Property
- variabel lMyNilai dan variabel obeject range rngMyRange adalah variabel yang akan dijadikan penyimpan nilai properti.
- properti bernama Nilai akan menyimpan data di variabel lNilai, dan properti ber-datatype object bernama MyData akan menyimpan object-nya dalam variabel object range bernama rngMyRange.
- Properti Nilai yang ber-datatype Long memiliki prosedur properti Let dan Get yang keduanya menggunakan Public. Artinya, properti Nilai memberi akses write melalui prosedur property Let dan memberi akses read melalui prosedur property Get.
- Properti MyData yang ber-datatype object range memiliki prosedur Set dan Get yang keduanya menggunakan Public. Artinya, properti object MyData memberi akses write melalui prosedur property Set dan memberi akses read melalui prosedur property Get.
- Jadi, untuk property ber-datatype object menggunakan prosedur property Set (untuk write) atau Get (untuk read). Selainnya menggunakan prosedur property Let (untuk write) dan Get (untuk read).
- kemudian di general module lain, misal di mod11, ada prosedur yang bekerja memanfaatkan property Nilai dan MyData, sebagai berikut :
Dim rngA As Range, lNilB As Long
'isi nilai ke dalam suatu variabel
'melalui prosedur property let dan set
Nilai = 5
Set MyData = Range("a1")
'ambil nilai dari suatu variabel
'melalui prosedur property get
lNilB = Nilai
Set rngA = MyData
'sekedar pesan
MsgBox "Nilai lNilB : " & lNilB & vbCrLf & _
"Alamat range dalam rngA : " & rngA.Address
End Sub
- Prosedur bernama MemanfaatkanProperty mengisi properti (proses write) Nilai pada baris berbunyi :
- Baris diatas dikerjakan dengan memanggil prosedur property Let Nilai.
- Prosedur bernama MemanfaatkanProperty mengisi properti (proses write) object MyData pada baris berbunyi :
- Baris diatas dikerjakan dengan memanggil prosedur property Set MyData karena properti MyData ber-type object.
- Prosedur bernama MemanfaatkanProperty mengambil properti (proses read) Nilai dan MyData pada baris berbunyi :
Set rngA = MyData
- Variabel lNilB akan diisi dengan isi properti bernama Nilai, yang diambil dengan cara menjalankan prosedur property Get Nilai.
- Variabel object rngA akan di-set isinya dengan object yang ada dalam properti MyData, yang diambil dengan cara menjalankan prosedur property Get MyData.
Dari 2 buah general module di atas, variabel ber-scope module (menggunakan private), seperti variabel lMyNilai dan rngMyRange, bisa digunakan oleh prosedur yang ada dimodule lain dengan kehadiran prosedur jenis property. Cara mengaksesnya pun bisa layaknya menggunakan variabel yang ber-scopy project (menggunakan public).
Kasus diatas menggunakan prosedur property dalam sebuah general module. Proses yang dilakukan oleh prosedur jenis property Let, Set, dan Get bisa digantikan oleh prosedur jenis Sub dan Function. Pemakaian nama prosedur properti layaknya sebuah variabel tidak bisa dilakukan oleh prosedur function pengganti prosedur property get, melainkan hanya tampak seakan-akan bahwa nama prosedur function digunakan sebagai sebuah variabel.
- misal dalam mod10 diberi prosedur function agar bisa berinteraksi dengan variabel lMyNilai secara langsung sebagai berikut :
'dan bisa membantu mengatur ijin write
Public Sub SimpanSiNilai(lIsinya As Long)
lMyNilai = lIsinya
End Sub
'bisa digunakan menjadi pengganti Get
'dan bisa membantu mengatur ijin read
Public Function AmbilSiNilai() As Long
AmbilSiNilai = lMyNilai
End Function
- cara memanfaatkannya adalah seperti prosedur bernama PakaiSubDanFunction di mod11 berikut ini :
Dim lNilB As Long
'isi nilai ke dalam suatu variabel
'melalui prosedur sub
'sebagai pengganti prosedur property let
SimpanSiNilai 5
'ambil nilai dari suatu variabel
'melalui prosedur function
'sebagai pengganti prosedur property get
lNilB = AmbilSiNilai
End Sub
- Jadi untuk menyimpan data bernilai 5 kedalam variabel lMyNilai dilakukan dengan memanggil prosedur Sub berargumen. Sedangkan untuk mengambil data dari variabel lMyNilai dilakukan dengan memanggil prosedur Function. Penataan ijin read atau write bisa dilakukan dengan mengubah scope public yang digunakan prosedur sub dan function seperti pengaturan public pada prosedur jenis property.
- Prosedur property Let, Set, Get juga bisa digantikan oleh sebuah prosedur function. Misalkan untuk mengakses variabel lMyNilai seperti kasus di atas, bisa menggunakan prosedur function berikut :
Optional ByVal lIsinya As Long _
, Optional bWrite As Boolean _
) As Long
If bWrite Then
lMyNilai = lIsinya
End If
SiNilai = lMyNilai
End Function
- Contoh penggunaannya adalah seperti dalam prosedur bernama PakaiFunctionSaja berikut ini :
Dim lNilB As Long
'isi nilai ke dalam suatu variabel
'melalui prosedur function SiNilai
'sebagai pengganti prosedur property let
SiNilai 5, True
'ambil nilai dari suatu variabel
'melalui prosedur function SiNilai
'sebagai pengganti prosedur property get
lNilB = SiNilai
End Sub
- Bentuknya cenderung lebih mirip dengan penggunaan prosedur jenis property. Nama prosedur yang sama bisa dipakai untuk proses read maupun write.
Prosedur property dalam Class Module
Bagian ini adalah perkenalan dengan class module. Class Module digunakan untuk membentuk sebuah custom class. Class adalah blueprint dari object yang dibentuk menggunakan class tersebut. Nama class module menjadi nama class pembentuk object.- Misalkan dibuat sebuah class module baru dan diberi nama cDataKu dengan cara :
- klik kanan sebuah module dalam project explorer -> pilih Insert -> pilih Class Module
- klik class module yang terbentuk -> lihat properties window -> ganti isi properti (Name) menjadi cDataKu
- Salin script berikut ke dalam class module cDataKu :
Public Property Set DataRange(rng As Range)
Set mRngData = rng
End Property
Public Property Get DataRange() As Range
Set DataRange = mRngData
End Property
- Class cDataKu berisi sebuah property object bernama DataRange yang dibentuk menggunakan prosedur ber-scope project jenis Property Set dan Get agar memiliki akses read dan write. Nilai data akan disimpan dalam variabel mRngData yang ber-datatype Range atau dibentuk dari class Range.
- Class cDataKu dapat digunakan oleh prosedur yang ada di module lain, seperti prosedur bernama PakaiCustomClass yang ada di general module mod11 berikut ini :
'deklarasi variabel object dari class cDataKu
Dim oRng1 As cDataKu, oRng2 As cDataKu
'deklarasi variabel object dari class Range
Dim rngSatu As Range, rngDua As Range
'instancing object dari class cDataku
Set oRng1 = New cDataKu
Set oRng2 = New cDataKu
'ubah property DataRange milik object
'dari class cDataKu
Set oRng1.DataRange = Range("a1,b5:d5,c7:c9,f1:h3")
Set oRng2.DataRange = Range("a1:k7")
'ambil property DataRange milik object
'dari class cDataKu
Set rngSatu = oRng1.DataRange
Set rngDua = oRng2.DataRange
'sekedar tampilan pesan
MsgBox "Isi property DataRange milik :" & vbCrLf & _
"oRng1 adalah range " & oRng1.DataRange.Address _
& vbCrLf & "oRng2 adalah range " & _
oRng2.DataRange.Address & vbCrLf & vbCrLf & _
"Perpotongan property DataRange dari " & _
"oRng1 dengan oRng2 adalah range " & _
Intersect(oRng1.DataRange, oRng2.DataRange).Address & _
vbCrLf & vbCrLf & "Isi variabel range bernama :" & _
vbCrLf & "rngSatu adalah range " & rngSatu.Address & _
vbCrLf & "rngDua adalah range " & rngDua.Address & _
vbCrLf & vbCrLf & _
"Perpotongan rngSatu dengan rngDua adalah range " & _
Intersect(rngSatu, rngDua).Address
End Sub
- Variabel oRng1 dan oRng2 akan memiliki datatype berupa object yang dibentuk menggunakan class cDataKu.
- Variabel object oRng1 dan oRng2 tidak dapat digunakan sebelum diset instansinya (instancing). Proses instancing tersebut dilakukan oleh baris-baris kode :
Set oRng2 = New cDataKu
- Mengubah isi properti object bernama DataRange dari object oRng1 dan oRng2 dilakukan oleh baris-baris kode :
Set oRng2.DataRange = Range("a1:k7")
- Mengambil nilai properti object oRng1 dan oRng2 dilakukan oleh baris-baris kode :
Set rngDua = oRng2.DataRange
MsgBox blablabla
- Proses terhadap nilai properti bernama DataRange juga dapat dilihat dalam baris kode MsgBox blablabla.
Prosedur yang digunakan oleh banyak prosedur lain
Salah satu tantangan dalam menyusun program untuk sebuah proses otomasi maupun aplikasi adalah membuat prosedur yang bisa digunakan oleh banyak prosedur lain. Cobalah diingat-ingat tentang fitur Excel seperti sort. User bisa menggunakan Sort dimanapun didalam worksheet. Prosedur seperti untuk proses sort inilah yang dimaksud sebagai prosedur yang dapat digunakan oleh prosedur-prosedur lain. Contohnya sebagai berikut :- Misalkan saja ada 5 sheet sumber data, bernama sheet1 sampai sheet5, yang data didalamnya akan digabungkan untuk masuk ke sheet bernama Data. Anggap saja proses terhadap semua sheet dimulai ketika sebuah tombol ditekan.
- Sheet1, Sheet3, dan Sheet4 akan menggunakan rangkaian proses bernama Proses Model A. Sedangkan Sheet2 dan Sheet5 akan menggunakan proses bernama Proses Model B.
- Proses Model A berisi rangkaian 7 proses, yang secara berurutan sebagai Proses1,Proses2,Proses3,Proses1,Proses4,Proses2,Proses1. Proses Model B berisi rangkaian 5 proses, yang secara berurutan sebagai Proses2,Proses1,Proses4,Proses1,Proses2. Data yang digunakan adalah data yang ada di setiap sheet yang diproses. Dari kedua model proses tersebut, dapat diketahui bahwa proses yang dibutuhkan adalah Proses1,Proses2,Proses3, dan Proses4 yang dipanggil dengan urutan sesuai model prosesnya, yaitu model A atau model B.
- Ketika tombol ditekan, akan dijalankan sebuah prosedur yang dipanggil oleh si tombol. Misalkan namanya adalah Prosedur Tombol.
- Prosedur Tombol akan berisi proses perulangan membaca setiap sheet, yaitu sheet1 sampai sheet5 silih berganti, yang dapat berupa penggunaan For Each Next.
- Dalam blok perulangan akan ada analisa terhadap nama sheet. Jika nama sheet masuk kelompok Sheet1,Sheet3, dan Sheet4, maka proses akan memanggil prosedur bernama ProsesModelA. Jika nama sheet masuk kelompok lainnya, maka proses akan memanggil prosedur bernama ProsesModelB.
- Kira-kira bunyi prosedur bernama Tombol akan berbunyi :
Dim sht As Worksheet
For Each sht In Sheets( _
Array("Sheet1", "Sheet2", "Sheet3", "Sheet4", "Sheet5") _
)
sht.Activate
Select Case sht.Name
Case "Sheet1", "Sheet3", "Sheet4"
ProsesModelA
Case "Sheet2", "Sheet5"
ProsesModelB
End Select
Next sht
Sheets("Data").Activate
End Sub
- Karena proses akan masuk ke Proses Model A atau Proses Model B, maka dibentuklah prosedur untuk kedua proses tersebut dan diletakkan dalam module yang sama.
- Proses Model A bisa dibuatkan dalam prosedur bernama ProsesModelA. Proses yang dijalankan dalam ProsesModelA adalah menjalankan Proses1,Proses2,Proses3,Proses4 dalam suatu urutan tertentu. Bentuk prosedur ProsesModelA dapat berbentuk :
'rangkaian proses di Proses Model A adalah
'Proses1,Proses2,Proses3,Proses1,Proses4,Proses2,Proses1
MsgBox "ProsesModelA mulai"
Proses1
Proses2
Proses3
Proses1
Proses4
Proses2
Proses1
MsgBox "ProsesModelA selesai"
End Sub
- Proses Model B bisa dibuatkan dalam prosedur bernama ProsesModelB. Proses yang dijalankan dalam ProsesModelB adalah menjalankan Proses1,Proses2,Proses4 dalam suatu urutan tertentu. Bentuk prosedur ProsesModelB dapat berbentuk :
'rangkaian proses di Proses Model B adalah
'Proses2,Proses1,Proses4,Proses1,Proses2
MsgBox "ProsesModelB mulai"
Proses2
Proses1
Proses4
Proses1
Proses2
MsgBox "ProsesModelB selesai"
End Sub
- Pemilihan scope project dengan menggunakan keyword Public pada deklarasi prosedur ProsesModelA dan ProsesModelB akan membuat kedua proses tersebut dapat digunakan oleh prosedur lain selain prosedur Tombol. Baik yang ada dalam module tersebut atau yang ada di modeul lainnya.
- Proses-proses yang dijalankan pada Proses Model A dan Proses Model B dibuat dalam prosedur tersendiri berdasar karakteristik prosesnya. Karena proses yang dijalankan memiliki 4 karakteristik proses, maka dibuatlah 4 prosedur proses tersebut sebagai berikut : (diletakkan dalam module yang sama dengan prosedur ProsesModelA dan ProsesModelB)
'baris-baris kode proses1
'misalkan ada 10 baris kode
End Sub
Private Sub Proses2()
'baris-baris kode proses2
'misalkan ada 20 baris kode
End Sub
Private Sub Proses3()
'baris-baris kode proses3
'misalkan ada 30 baris kode
End Sub
Private Sub Proses4()
'baris-baris kode proses4
'misalkan ada 40 baris kode
End Sub
- Prosedur-prosedur proses dibuat terpisah atau per prosedur sesuai karakteristik prosesnya.
- Bisa jadi jumlah baris kodenya akan sama ataupun berbeda-beda.
- Dengan terpisahnya menjadi prosedur-prosedur yang tersendiri, maka dapat dibuat banyak model proses seperti ProsesModelC, ProsesModelD, dan sebagainya yang bisa jadi juga membutuhkan prosedur-prosedur proses tersebut.
- Perbaikan sebuah proses dapat lebih fokus ke prosedur proses tersebut dan tidak kuatir ada bagian proses yang sama yang belum diperbaiki.
- Penggunaan scope module dengan keyword private akan mengurangi daftar prosedur yang bisa di-Run dari workbook window di dialog Macro.
Cara penyusunan prosedur seperti kasus diatas akan menghasilkan baris kode (tanpa baris deklarasi) sebagai berikut :
- 11 baris kode prosedur Tombol
- 9 baris kode prosedur ProsesModelA
- 7 baris kode prosedur ProsesModelB
- 10 baris kode prosedur Proses1
- 20 baris kode prosedur Proses2
- 30 baris kode prosedur Proses3
- 40 baris kode prosedur Proses4
- 127 total baris kode untuk seluruh kegiatan
Coba bayangkan andai saja ProsesModelA disusun seperti prosedur ProsesModelA1 berikut ini :
Public Sub ProsesModelA1()
'rangkaian proses di Proses Model A1 adalah
'Proses1,Proses2,Proses3,Proses1,Proses4,Proses2,Proses1
MsgBox "ProsesModelA1 mulai"
'baris-baris kode proses1
'misalkan ada 10 baris kode
'baris-baris kode proses2
'misalkan ada 20 baris kode
'baris-baris kode proses3
'misalkan ada 30 baris kode
'baris-baris kode proses1
'misalkan ada 10 baris kode
'baris-baris kode proses4
'misalkan ada 40 baris kode
'baris-baris kode proses2
'misalkan ada 20 baris kode
'baris-baris kode proses1
'misalkan ada 10 baris kode
MsgBox "ProsesModelA1 selesai"
End Sub
Maka prosedur ProsesModelA1 saja sudah berisi 142 baris kode. Selain itu, jika akan memperbaiki proses1, maka pada prosedur ProsesModelA seperti ini harus dilakukan pada 3 tempat. Belum lagi nanti yang ada di prosedur model-model lainnya, seperti ProsesModelB1.
Pembahasan tentang prosedur selesai dulu sampai disini. Harapannya, penyusunan prosedur untuk suatu proses bisa lebih spesifik sesuai karakteristik prosesnya, sehingga prosedur-prosedur dengan karakteristik yang memungkinkan untuk digunakan dalam proses lainnya bisa dijalankan dengan memanggil nama prosedur proses tertentu tersebut. Seperti halnya proses yang memiliki karakteristik proses seperti Proses1 bisa digunakan dalam prosedur-prosedur model proses lainnya.
Insya Allah pembahasan selanjutnya adalah tentang object utama dalam Excel seperti Application, Workbook, Worksheet, dan Range.
No comments:
Post a Comment