BEKERJA DENGAN PROSEDUR
SUB & FUNCTIONS
Penulisan
program yang telah dibahas dalam bab sebelumnya seluruhnya haya terdiri dari
satu sub routine karena prohramnya kecil. Namu anda mungkin perku menulis lebih
dari satu sub routine jika program anda lebih besar, agar anda tidak perlu
menempatkan semua perintah dalam satu sub routine sehingga membuat sulit untuk
di-debug.
Kata-kata macro dan fungsi sering
digunakan secara bergantian untuk mengacu pada prosedur yang ditulis dalam
visual basic Application (VBA). Bab ini akan menjelaskan perbedaan antara
prosedur Sub (atau macro) dengan prosedur function, bagaimana keduanya
dipanggil dan cara kerja keduanya dalam mengubah lingkungan kerja.
Sekilas Tentang Prosedur Sub
Ada tiga jenis prosedur di Excel VBA, yaitu SUB (sub routine
standar), function (sub routine yang mengembalikan nilai), dan property yang
disediakan untuk class module.Sejauh ini, progam VBA yang ditulis selalu
tertutup dalam kata kunci Sub\End Sub.Kata Sub merupakan singkatan dari sub
roitine. Sebuah sub roitine adalah sekelompok kode yang melakukan funngsi
tertentu (seperti menghitung lias lingkaran).
Sebuah sub roitine, seperti HitungLuas(luas,radius) dapat menerima
argumen untuk nilai, radius dan kemudian dilewatkan ke sub roitine lain,
HitungLuasLingkaran(luas,radius).
Contoh :
Makro berikut memiliki duasub routine, HitungLuas 1() dan
HitungLuasLingkaran1()yang menghitung luas lingkaran dengan menerima user input
untuk radius (jari –jari lingkaran) lalu memanggil sub routine Hitung Luas Lngkaran1() untuk menghitung luas lingkaran.
Perhatikan bahwa kata kunci Calldigunakan untuk memanggil sub
routine, HtungLuasLingkaran1). Perhatikan juga bahwa argumen area dan radius
berada dalam kurung sub routne HitungLuasLingkaran1().
Variabel area akan dilewati ke sub routine, HitungLuasLingkaran1() untuk menyimpan hasil dari area yang
dihitung, variabel radius digunakan untuk melewati nilai user input ke sub
routine HitungLuasLingkaran1() yang
digunakan untuk menghitung luas lingkaran.
Setelah sub routine HitungLuasLingkaran1()
selesai menghitung, sub routine ini akan mengembalikan hasil kembal ke
subbroutine HitungLus1() dengan
varabel area yang sebelumnya sudah menyimpan hasilnya dan menampilkan nilai
dari varabel area dalam kotak pesan.
·
Cara Menulis Prosedur Sub
Sub adalah prosedur paling umum yang digunaan ketika merekam makrp.
Prosedur sub menjalankan kode baris demi baris menurut urutannya atau
melaksanakan serangan tindakan dan atau perhitungan.
Sintaks
Elemen argumen adalah opsional yang dapat ditentukan secara
eksplisit atau implisit sehngga memungkinkan nila/referensi untuk diteruskan ke
prosedur yang memanggilnya (calling procedure) dan kemudian ditangani sebaga
variabel.
Saat merekam makro, argumen tdak digunakan (perhatikan argumen untuk
prosedur tersebut koson, yaitu tidak ada argumen diantara tanda kurung).
Jika
anda membuat membuat rosedur untuk digunakan sebagai makro, anda tidak boleh
menggunakan argumen apapun.
Prosedur sub dapat bersfat rekurtif jika prosedur iitu dapat
bercabang ke prosedur lain dan kemudian kembali keprosedur yang memanggil
(/call procedure).
Untuk
memanggil prosedur lain, gunakan pernyataan Call yang disertai dengan nama
prosedure dan argumen opsionalnya. Jka argumen digunakan, anda harus menggunakan
tanda kurung untuk daftar argumnet tersebut.
Contoh
:
Prosedur berikut akan dpanggil dengan argumen tunggu yang ditetapkan
secara eksplisit sebagai string.
Benar
(alternatif) – tidak menggunakan kata kunci Call & tidak perlu tanda
kurung.
Sebuah prosedur yang dapat dihendaki secara prematur dengan
menggunakan pernyataan Exit Sub yang ditemptkan sebelum pernyataan End Sub.
‘Prosedur
berhenti setelah bagian A & tidak jalankan bagian B
·
Sekilah Tentang Prosedur Function
Selain prosedur sub, ana juga dapat menggunakan prosedur function
untuk menghitung luas lingkaran dari sub routine yang memanggil seperti
contoh berikut.
Hasil :
Ketika menentukan sebuah fungsi, anda kan menggunakan kata kunci
Fuction/End Function daripada menggunakan kata kunci Sub/End Sub di prosedur
sub.
Untuk
memanggi fungsi, anda dapat menggunakan kode berikut.
Namun,
lebih baik anda memanggil fungsi dengan menggunakan kode berikut. Anda tidak
harus menggunakan kata kunci Call dalam pemanggilan fungsi.
Bila
menggunakan fungsi, anda harus meewati variabel area untuk menyimpan output seperti
kode berikut.
Sebaliknya,
variabel area akan diberi (assigned) nilai hasil dari fungsi HitungLuasLingkaran2(radius). Hal ini
karena sifat fungsi yang dapat mengembalikan hasil output melalui nama
fingsinya.
·
Cara Menulis Prosedur Fuction
Perbedaan utama antara prosedur sub dan function adalah bahwa
prosedur function dapat mengembalikan nilai akibat menjalankan prosedurnya
sedangkan prosedur Sub tidak dapat
mengembalikan nilai.
Sebuah
analogi sederhana dari prosedur function bila dibandingkan dengan prosedur sub
dapat diilustrasi dengan menggunakan dua fitur Excel berikut.
1.
Perintah file > Save merupakan suatu
tindakan yang tidak mengembalikan nilai dan dianggap sebagai prosedur Sub.
2.
Fungsi Sun menghitung jummlah bdalam satu
kisaran nilai yangdipilih serta mengembalikan nilai tersebut dan dianggap
sebagai prosedur function.
Sintaks :
Elemen
“argumen yang berisifat opsional memungkinkan nilai/referensi untuk dilewatkan
ke prosedur yang memanggil dan diperlukan sebagai variabel.
Atribut “Type merupakan opsional dan dapat digunakan untuk menemukan
fungsi ekspisi. Bila atribut Type tidak ditentukan, maka fungsi akan
mengembalikan ekspresi (atau nilai) dan fungsinya pada baris terakhir sebelum
End Function.
Anda tidak dapat mendefinisikan fungsi dalam fungsi lain, baik pada
prosedur sub ataupun prosedur property. Jenis prosedur ini dapat dipanggil
dalam sebuah modul oleh prosedur sub atau dieksekusi sebagai fungsi user
defined function (UDF) di worksheet Excel.
Sebuah
prosedur dappat dihentikan sebelum waktunya dengan menggunakan pernyataan Exit
Function yang ditulis sebelum pernyataan End function.
Contoh :
Prosedur
function berikut akan mengkonveksi suhu fahrenheit ke celcius.
Apabila prosedur KonveksiSuhu() memanggil fungsi Celcius() anda
harus menyatakan argumen Fahrenheit untuk digunakan sebagai prosedur fungsi
tersebut. Anda tidak perlu menentukan jenis kembalinya sebuah fungsi. Secara
default, Excel akan memperlukan jenis kembali sebagai Variant.
Hasil :
Dalam
excel, fungsi yang dapat dipangggil secara langsung dalam worksheet dikenal
sebagai User Defined Function (UDF). Misalnya di sel B3, anda dapat memanggil
fungsi Celcius() utuk mengkonversi suhu fahrenheit ke celcius dengan
menyisipkan rumus fungsi tersebut.
=Celcius(B2)
Hasil :
Namun,
jika anda ingin menggunakan fungsi dari workbook lain, anda harus menyertakan nama
workbook pada saat anda memanggilnya. Kode berikut mengasumsikan bahwa fungsi
tersebut letak di dalam workbook
Rumus.xlsm.
Workbook
Rumus.xlsm harus terbuka (Walaupun mungkin tersembunyi) untuk dapat memanggil
workbook.
· Penempatan kode UDF
Kode
untuk UDF harus ditempatkan dalam standar modul dan tidak dalam modul
worksheet(Sheet) atau dalam modul ThisWorkbook.
Pada
editor VBA, pilih menu Insert > Modul untuk menyisipakn modul baru ke dalam
proyek.
Anda
dapat menulis banyak fungsi dalam satu modul dan anda dapat juga mengubah nama
modul dari Module1(Default) ke nama yang diinginkan dengan menekan F4 untuk
menampilkan jendela.
Poperti
> mngubah properti Name.
Anda
dapat meanggil fungsi workbook dengan kode berikut :
=Rectang1Area(12,
34)
· Mengembalikan error dari fungsi
Untuk
melakukan hal ini , fungsi tersebut harus mengembalikan hasil bertipe variant
dan mengubah fungsi CVErr. Fungsi Divide() berikut akan mengembalikan error
#DIV/0 jika pembagiannya adalah 0.
Anda
dapat menggunakan salah satu konstanta error berikut dengan fungsi CVErr untuk
mengembalikan nilai error k Excel.
Kode
|
Untuk Error
|
xIErrDiv0
|
#DIV/0
|
xIErrNA
|
#N/A
|
xIErrName
|
#NAME?
|
xIErrNull
|
#NULL
|
xIErrNum
|
#NUM
|
xIErrRef
|
#REF
|
xIErrValue
|
#VALUE
|
Perbedaan prosedur Sub & Function
Perbedaan
utamanya adalah bahwa prosedur function
dapat mengembalikan nilai tetapi prosedur sub tidak dapat mengemablikan nilai.
Jika
anada menulis dungsi dala Module di project Explorer, anda dapat memanggil
fungsi tersebut dar worksheeetseperti memangggil funsi bawaan excel sum().
Prosedur
Sub
|
Prosedur
Functions
|
Penentuan dengan menggunakan kata kunci sub/end
sub
|
Penetuan dengan menggunakan kata kunci
functions/end Funtions
|
Menggunkan kata kunci Call untuk memanggil
prosedur sub call HitungLuasLingkaran(luas, radius)
|
Tidak menggunakan kata kunci Call untuk
memanggil prosedur Functions
luas = HitungLuasLingkaran(radius)
|
Varibel harus dilewatkan unruk menyimpan
output.
|
Variabel tidak perlu dilewatkan untuk
menyimpan output.
|
Dapat menerima argumen yang dilewatkan
tetapi tidak dapat mengembalikan nilai hasil.
|
Dapat menerima argumen yang dilewatkan dan
juga dapat mengaembalikan nilai hasil.
|
Hanya dapat dipanggil di VBA dan tidak
dapat dipanggil langsung dari worksheet (Sel)
|
Dapat dipanggil di VBA dan juga dapat
dipanggil langsung dari worksheet (Sell)
|


















Comments
Post a Comment