Bahasa Pemerograman VBA
Bahasa Pemerograman VBA
Disusun Oleh:
Sedarta, ST., MT.
M. Eka Onwardana, ST., MT.
Tengku Tibri, ST., MT.
Lismawaty, ST., MT.
Puji syukur kita panjatkan kepada TYME karena atas ridonya modul ini dapat
diselesaikan. Module ini dibuat untuk menyediakan salah satu bahan ajar bagi
mahasiswa terkait matakuliah Komputasi Tambang. Materinya disusun berdasarkan
pengalaman penulis dalam menggunakan VBA untuk berbagai keperluan terutama
terkait penanganan data dan simulasi.
Isi dari modul ini diawali dengan pemahaman tentang antar muka dilanjutkan
dengan metode pembuatan makro (VBA). Pengenalan jenis data dan variabel
menyiapkan mahasiswa untuk dapat menggunakan macro dalam berbagai proses
komputasi dan simulasi. Teknik-teknik dasar terkait metode pengembangan macro
untuk menangani komputasi peroalan-persoalan kompleks juga diberikan melalui
materi Class Module dan UserForm.
Pada kesempatan ini penulis mengucapkan terima kasih kepada semua civutas
akademi FTM dan ISTP yang telah menyediakan ruang bagi penulis dalam
menyebarluaskan ilmu pengetahuan dan teknologi terkait pengembangan ilmu-ilmu dan
Teknologi Pertambangan. Penulis sadar bahwa isi dari modul ini memiliki banyak
kekurangan dan oleh karenanya segala kritik, saran dan masukan yang sifatnya
membangun akan diucapkan terima kasih.
Hormat kami
Penulis
DAFTAR ISI
DAFTAR TABEL
Visual Basic for Application (VBA) adalah sebuah bahasa pemerograman yang
dikembangkan oleh Microsoft bersama-sama dengan sistem operasi Microsoft
Windows. Bahasa pemerograman ini disebut dengan macro. Ia disediakan tidak saja
untuk pembuatan dan pengembangan program-program applikasi tetapi juga dapat
ditaut-padukan (embedded) dengan applikasi-applikasi yang terinstal didalamnya.
Dengan demikian, macro dapat diakses dari hampir semua applikasi termasuk Ms-Ecel
(lihat Gambar 2-1); membuat Sistem Operasi Microsoft Windows memiliki keunggulan
dalam hal kemampuan dan kemudahan terkait penanganan dan pengolahan data.
Pembuatan sebuah sub-main dapat dilakukan melalui Menu View [1], Macro [2]
(lihat Gambar 2-2). Ketika [2] diclick, sebuah jendela akan muncul menampilkan
pilihan View Macros atau Record Macro … [3] yang jika diclick akan menampilkan
sebuah kotak dialog pembuatan Sub-Main macro baru.
Kotak dialog pembuatan macro baru menyediakan 1 (satu) kolom pendefinsian
nama dari Sub-Main [4] dimana Nama dari Sub-Main mengikuti aturan tertentu seperti
halnya penamaan dari variabel atau routine. Sub-Main yang didefinsikan dapat dibuat
memiliki sebuah short-Cut [5] mis.: Ctrl-Shif X, termasuk lokasi penyimpanan
dokumennya [6]. Untuk tahap pemula, tahap [5] dan [6] mungkin dapat diabaikan.
Konfirmasi atas nama project (Macro) [7] yang telah didefinikan akan disimpan. Ketika
[6] dipilih ‘This Workbook’ maka file macro disimpan kedalam file dokumennya.
Setelah file macro disimpan dalam format *.xlsm, sistem keamanan filenya
dapat diset dengan nilai-nilai seperti yang disajikan apda Gambar 2-5.
Format dan nilai-nilai setting keamanan file Macro yang telah didefinisikan
biasanya hanya akan aktif ketika file-nya dibuka ulang. Oleh karenanya, file
yang telah didefinsikan perlu ditutup lalu dibuka kembali. Tanda bahwa setting
tersebut telah aktif, antar muka dari file yang dibuka memunculkan sebuah pesan
(warning). Ketika activex-nya di-enable-kan maka settingnya menjadi
terkonfirmasi dan diaktifkan.
Secara umum, semua bagian dari antar muka yang disebutkan pada Gambar 2-6
harus diketahui terutama object-folder [B], object property [C] dan lembar program [D]
yaitu lembar dimana kode-kode program (perintah) akan ditempatkan. Bagian [C] dan
[D] dapat berubah-ubah isinya sesuai object yang dipilih pada [B].
Bagian dari Bar [A] terdiri atas Macro, Menu, Tools; termasuk jendela rountine.
Macro Bar menampilkan nama project yang aktif atauyang sedang digunakan. Ada
kalanya, pada sebuah antar muka yang sama kita dapat memiliki lebih dari satu macro
(sub-Main). Sub-Main yang digunakan akan disajikan pada bagian Macro-Bar. Tools
Bar dan Menu Bar keduanya memiliki fungsi yang relatif sama, yaitu untuk pengelolaan
file, pengaturan object, dan penanganan program yang dikembangkan. Pada bagian
bawah dari Bar terdapat sebuah jendela list berisi rutin-rutin yang terdapat pada sebuah
object folder.
Project folder [B] menampilkan object sheet, module dan class yang
ditambahkan ke dalam project. Jendela properties [C] menampilkan nilai-nilai
karakteristik dari object [B]; sementara jendela [D] menampilkan kode program yang
terdapat pada object [B]. Oleh karenanya, isi dari jendela [C] dan [D] tergantung kepada
VBA menyediakan antar muka yang user-friendly terutama terkait tools yang
dapat diakses dengan mudah dan cepat untuk memenuhi kebutuhan didalam
pengembangan dan pengujian algorima yang diimplementasikan (penulisan kode
program). Secara default, bar dari antarmuka VBA terdiri atas 17 tool, dan yang paling
sering digunakan disajikan pada Gambar 2-7.
Oject Reference (*.dll) yang telah dipilih dapat digunakan pada routin yang
dibagun; dengan setatement ‘As’ setelah nama variabelnya. Impelemntasinya dapat
dideklarasikan secara langsung ataupun tidak langsung, mis.:
Dim xlApp as Excel.Application ---------------------------------------- (2-1)
Dim xlApp as Object ---------------------------------------------------- (2-2)
Alg [2-1] dan [2-2] memiliki pengertian yang sama namun berbeda dalam
implementasinya. Alg [2-1] diimplementasikan dengan cara:
Set xlApp = New Excel.Application ----------------------------------- (2-3)
Perintah [2-3] meminta interpreter untuk mencreate sebuah object baru sehingga
ia dapat digunakan di dalam macro. Perintah ini akan valid jika macro yang dibangun
dijalankan pada versi Ms-Excel yang sama; yang lainnya perintah tersebut akan
memunculkan pesan error.
Alg [2-2] diimplementasikan dengan cara:
Set xlApp = CreateObject(“Excel.Application) --------------------- (2-4)
Perintah [2-4] meminta interpreter untuk mencari Excel Appliation pada sistem
registry dan diikut sertakan pada macro yang sedang dibangun. Perintah ini umumnya
lebih fleksible. Perintah ini akan dapat diakses untuk semua versi Ms Excel.
Object Microsoft Scripting Runtime adalah sebuah scrip default dari sistem
operasi yang digunakan untuk penanganan folder dan file. Ia bagian dari sistem operasi;
bukan bagian dari sebuah program applikasi.
Proses komputasi selalu melibatkan data baik sebai input ataupun output. Data
dapat berupa informasi yang nilainya dapat dipahami dan diperbandingkan. Nilai-nilai
dari informasi tersebut dapat berupa angka numerik, kumpulan huruf (disebut string)
ataupun status (benar atau salah, kosong (Null) atau berisi (Not Null)); yang oleh
komputer akan digunakan pada saat ia bekerja atau mengeksekusi kode program yang
didefinsikan. Dalam pemerosesannya, nilai-nilai tersebut dicatat kedalam register dari
memory (RAM: Random Access Memory) atau storage (Hardisk atau flask disk) dengan
aturan tertentu. Nama dari lokasi memori atau storage yang digunakan untuk menandai
tiap jenis data disebut sebagai variabel.
Variabel, berdasarkan KBBI diartikan sebagai: 1) yang dapat berubah-ubah,
berbeda-beda, bermacam-macam; 2) sesuatu yang dapat berubah-ubah, faktor atau
unsur yang ikut menentukan perubahan. Ia dibedakan menjadi 2 jenis, yaitu: variabel
bebas dan variabel terikat. Variabel bebas diartikan sebagai faktor, hal atau unsur yang
dianggap dapat menentukan nilai dari variabel lainnya, sementara variabel terikat
diartikan sebagai gejala yang muncul atau berubah dalam sebuah pola yang teratur yang
bisa diamati oleh karena perubahan dari variabel lain.
Dalam ilmu-ilmu komputasi, variabel adalah sebuah nama yang
merepresentasikan suatu data atau yang memiliki nilai yang didalam proses komputasi
(pemerosesan komputer) digunakan sebagai nama dari alamat memori (register). Nilai
dari data (variabel) tersebut disimpan dalam bentuk register. Di dalam komputer,
register dibedakan dengan registry. Register menyatakan alamat dari suatu ruang
(memori atau hard-disk) yang menimpai sebuah nilai; sementara registry berisi daftar
sistem termasuk nilai-nilai setting yang ada pada sebuah sistem operasi (dapat diakses
melalui perintah: regedit).
Meskipum alokasi memory untuk tiap tipe variabel tampak relatif kecil, namun
ketika operasinya melibatkan banyak variabel dan record yang besar, maka pendefinsian
variabel dapat berdampak terhadap realibiltas dari pengimplementasian algoritma.
Semua object yang disebutkan itu hanya dapat digunakan jka telah terintegrasi
dengan Macro yang dicreated. Selain itu, bila ingin digunakan, maka mereka hanya
dapat dideklarasikan menggunakan jenis object. Akses kepada object yang tidak
didefinisikan secara eksplisit dapat dilakukan dengan deklarasi:
Dim xlApp as Object
Set xlApp = CreateObject(“Excel.Application”), atau
Set xlApp = GetObject(, “Excel.Application”)
Untuk setiap variabel yang didefinsikan, bila pendefinsiannya benar, maka baik
nama variabel maupun unsur-unsurnya akan direkam dan disimpan kedalam memori.
Baik nama type maupun nilai-nilai dari vaeriabel enum-nya dapat muncul (ditampilkan)
ketika nama variabelnya diketikkan diikuti dengan permintaan-nya. Variabel type harus
diikuti dengan tanda titik; variabel enum harus diikuti dengan tanda ‘=’ (sama dengan).
Nilai ij, ii, jj, dan kk harus bilangan bulat (integer) termasuk N, M, X, Y dan Z.
Variabel ij, ii, jj dan kk adalah nilai awal dari dimensi (biasanya 0 atau 1: dapat
didefinsikan menggunakan deklarasi Base 0 atau Base 1); sementara N, M, X, Y, dan Z
merupakan nilai akhir indeks (larik). Nilai awal larik harus lebih kecil dari nilai larik
akhir, mis.:
Dim Vi(0 to 2) As Integer ‘Mis utk variabel vektor Xi + Yi + Zi
Dim vj(1 to 20) As DATA_MAHASISWA ‘Mis utk data mahasiswa
Dim Mij(0 to 25, 0 to 30) As Double ‘Mis. utk Data Elevasi
Dim Topo(0 to10, 0 to 50, 0 to 10) As Double ‘Mis data 3D bawah permukaan
Sub NAMA_ROUTINE ()
‘Kode Program
End Sub
Jumlah dari variabel input tersebut dapat lebih dari 1 atau sesuai dengan
kebutuhan. Bila nilai dari variabel input tidak diizinkan untuk diubah maka proses
deklarasinya harus dilakukan dengan:
Sub NAMA_ROUTINE (byval Nama_Variabel As <<type_variabel>>, ….)
‘Kode Program
End Sub
Bila dalam prosesnya variabel input dapat diubah dan nilai akhirnya dibutuhkan
untuk sesuatu keperluan maka proses deklarasinya dilakukan dengan cara:
Seperti halnya pada Procedure Sub, Procedure Function juga dapat memerlukan
variabel input; dan karakteristik dari variabel inputnya juga dapat sama dengan yang
ditemui/dilakukan pada Procedure Sub.
If <<bValue>> Then
‘Statemen
ElseIf <<bValue>> Then
‘Statemen
Else
‘Statemen
End if
Statemen yang berada dibawah kondisi tertentu itu hanya akan dieksekusi jika
variabelnya bernilai benar (True); selain itu perintah yang dibuat akan diabaikan (tidak
dieksekusi). Dalam prakteknya, variabel bValue dapat saja digganti dengan sebuah
perintah perhitungan atau status isi dari sebuah variabel, misalnya:
If IsNull(bObject) Then
‘Statement
End If
Bagian-bagian dari antar muka VBA dan kode implemntasi algoritma tersebut
diantaranya adalah:
1. Project Folder
Berdasarkan Project Folder-nya, Macro tersebut mengandung 3 buah worksheet,
yaitu: sheet1, sheet2, dan sheet3. Worksheet yang digunakan didalam program
hanyalah sheet3. Sheet1 dan Sheet2, walaupun ada (tertera didalam list folder)
mereka tidak dilibatkan di dalam proses pemerograman. Ketiga Worksheet tersebut
merupakan bagian dari parentnya (ThisWorkbook) seperti yang dijelaskan apda
Gambar 2-7.
Project ini menggunakan 1 Module (namanya Module1). Tiap project VBA yang
diakses melalui Macro harus memiliki paling tidak 1 buah Module. Sub-Main hanya
dapat diakses melalui macro bila ditempatkan di Module; selain itu routinya tidak
dapat diakses untuk dieksekusi. Routine-routine di tempat lainnya hanya akan dapat
dieksekusi oleh Sub-Main.
Jenis variabel dari dpi (22/7 atau 3,14) dapat saja didefinsikan sebagai single
(desimal tunggal) ataupun Double. Perbedaan type variabel yang seperti ini
dapat berdampak terhadap tingkat ketelitian perhitungan yang dihasilkan
(lihat Tabel 3-1) terutama untuk kasus yang menggunakan proses
perhitungan berulang dalam jumlah besar. Untuk kasus-kasus sederhana
tanpa perulangan, perbedaan type variabel tersebut mungkin tidak dapat
diamati.
Kode program [4-15] dan [4-16] mirip dengan [4-10] dan [4-11]. Bedanya
terdapat pada metode penitipan (passing) dari variabelnya. Alg [4-16]
mengandung library Byval sementara Alg [4-11] tidak. Implementasi dari
metode ini menghasilkan output:
Data-input (r2) = 5, data dibaca (yang dipassing atau yang diterima, dr=r2)
= 5, data yang dikembalikan setelah diproses (r2=dr) = 5, dan luas lingkaran
yang dikembalikan = 78.57142857 (Lihat D– 10, 11, 12, 13; atau Baris 4 Kolom
C, E,F, G).
Alg [4-17] dan [4-19] mirip dengan alg [4-15] dan 4-16] termasuk [4-10]
dan [4-11] bedanya, Alg [4-18] menggunakan liberari ByRef, Alg [4-16]
menggunakan ByVal, sementara Alg [4-11] tanpa argumen. Perbedaan
argumen ini menghasilkan output:
Data-input (r3) = 7, data dibaca (diterima, dr=r3) = 7, data yang
dikembalikan setelah diproses (r2=dr) = 49, dan luas lingkaran yang
dikembalikan = 154 (Lihat D– 10, 11, 12, 13; atau Baris 5 Kolom C, E,F, G).
Dimana intA, intB, intGrid ∈ Z, bilangan bulat (integer: …., -2, -1, 0, 1, 2, ….).
variabel intA = nilai awal sementara intB = nilai akhir. Variabel intV mewakili nilai-
nilai yang ada diantara intA dan intB (intA ≤ intV ≤ intB) dengan interval intGrid.
Perintah perulangan untuk variabel vetor diatur dengan prosedur:
For each ≪ iObj ≫ in Objects
′𝑆𝑡𝑎𝑡𝑒𝑚𝑒𝑛𝑡 -------------------------------------- (4-20)
𝑁𝑒𝑥𝑡
Perintah For untuk perulangan diwakili oleh variabel Ij dikerjakan dari 0 hingga
JlhIterasi dengan step 1, yang diakhiri dengan pernyataan Next. Dengan demikian,
proses perhitungan melalui R = Nilai_Sin_PiRad(sudut) dilakukan secara terus menerus
sampai Ij mencapai nilai JlhIterasi atau nilai sudut > dTeta2.
Untuk tiap langkah (step), output dari eksekusinya diplot ke lembarkerja xlWs
pada baris irw kolom 2 (untuk nilai sudut) dan Kolom 3 (untuk Nilai R). Karena
nilai irw meningkat tiap langkah maka nilai-nilai hasil eksekusi diplot secara
berurutan dari atas ke bawah yaitu dari nilai baris yang lebih rendah ke nilai
baris yang lebih tinggi.
𝐷𝑜 𝑊ℎ𝑖𝑙𝑒 𝐾𝑂𝑁𝐷𝐼𝑆𝐼
′𝑃𝑒𝑟𝑛𝑦𝑎𝑡𝑎𝑎𝑛/𝑆𝑡𝑎𝑡𝑒𝑚𝑒𝑛𝑡 ----------------------------------------------- (4-22)
𝐿𝑜𝑜𝑝
Pemilihan nama dan type dari bvariabel-nya adalah atas pertimbangan pernyataan [1]
pada diagram alir (Algoritma); termasuk nilai awalnya:
Teta1 = 0: Teta2 = 720: delta = 0.5
Alg [4-27] akan membuat nilai sudut meningkat sebesar dDelta untuk tiap
perulangan. Peningkatan nilai sudut akan menyebakan Alg [4-23] menghasilkan nilai
yang tertentu; dengan demikian, nilai sinus sudut tertentu mulai dari batas bawah hingga
batas atas dapat disediakan.
Instruksi untuk menghitung nilai sinus sudut tertentu hanya dihitung ketika
kondisi [4-28] terpenuhi. Yang lainnya diabaikan.
Array range xRange dan yRange didefinisikan oleh object series dari chart
menjadi sebuah kurva dengan instruksi tertentu (lihat Point 7.1; Gambar 4-5); yang
hasilnya disajikan pada Gambar 4.4.G.
Gambar 4-5. Sub routin untuk peneplotan kurva nilai-nilai sinus sudut tertentu
VBA mengizinkan kita untuk meng-create object buatan sendiri. Class Object
adalah sekumpulan data dan prosedur (fungsi dan Sub). Prosedure digunakan untuk
mengerjakan beberapa tugas terkait dengan data. Sebuah Worksheet, sbg contoh, terdiri
atas banyak Sub, Function dan property. Ia dikategorikan sebagai Class object karena
memiliki property. Ada bagian dari Worksheet yang dibuat memiliki nilai dan melalui
nilai sifat atau kharakteristik dari Worksheet dapat menjadi tertentu.
Penggunaan object dalam pemerograman mengizinkan kita untuk membangun
sebuah applikasi tertentu dalam bentuk blok-blok. Blok program menangani bagian
tertentu tanpa menganggu bagian lainnya, dengan demikian proses pemerograman
menjadi lebih mudah dan lebih efisien.
Class dapat dibuat (di-create) melalui prosedur seperti yang disajikan apda
Gambar 5-1.
Proses pembuatan Class baru atau penambahan Object ke Project Folder dapat
dilakukan melalui 2 cara, yaitu melalui: 1) Menu Bar; atau 2) short-cut: Click Kanan
pada VBAProject (Project Folder). Keduanya akan menghasilkan output yang sama
yaitu penambahan object pada ProjectFolder [3]. Object Class yang ditambahkan,
defaultnya bernama ClassN (N ➔nomor urut; yang dalam contoh berniali 1 sehinga
bernama Class1). Ketika ia dipilih (select sehingga berwarna latar gela) maka property
dari object Class ditampilkan pada kolom Property [4]. Jika di-double-Click maka
lembar kerja dari Class akan ditampilkan [lihat B’]. Pada antar muka ini ada dua jendela
yang dapat digunakan untuk menelusuri kode-kode program yang dibuat. Nilai yang ada
di dalam kotakmerak sebelah kanan menyatakan methods (Declaration), sementara yang
di sebelah kiri menyatakan cakupannya (Scope).
Property adalah nilai dari object, item atau unsur-unsur yang didefinsikan.
Pendefinsian item atau unsur-unsur dari object didasarkan kepada kebutuhann. Oleh
karenanya, property dapat melekat kepada Object, item, atau unsur-unsur dari object
classnya.
Pada Worksheet Ms Excel, sebagai contoh, Sheet5 merupakan nama objectnya;
sementara itemnya adalah lembar-kerja (Worksheet) dan unsur-unsurnya dapat berupa
sel atau garis dari antar selnya. Property dari object Sheet5 dapat dilihat melalui jendela
Property sementara property dari item atau unsur-unsurnya dapat diset melalui kode
program yang dieksekusi (lihat gambar 4-1)
Gambar 5-2. Property dari sebuah Object, Item dan Elemen (unsur)
Ket.: Gambar terdiri atas dua bagian: A, B, C, dan D adalah lingkungan
pemerograman VBA; sementara E adalah konstanta nilai dari IndeksColor.
A. Daftar Nama Object. Dalam hal ini object yang sedang dianalisa adalah
Sheet5.
B. Property dari Object. Ia menampilkan sifat atau karakter dari object
Sheet5; mis. nama dari sheet5. (Nama) dan Nama pada kolom pertama
memiliki makna yang berbeda. (Nama) menyatakan indeks dari object
(yang dalam hal ini adalah sheet5) Ia dipahami/digunakan oleh
ThisWorkbook; sementara Nama merupakan atribut yang muncul pada
lembar kerja yang dipahami oleh user (manusia). Penggantian nilai ini
akan menampilkan nama worksheet yang berbeda.
C. Kode Program untuk men-set nilai dari Property item, yang dalam hal ini
adalah Worksheet. Angka 6 menyatakan nilai dari property itemnya
D. Property dari unsur Interior dari semua Cells. ‘Me’ menyatakan bahwa ia
adalah Object (Class) dari Sheet5. Bila kata Cells diganti dengan, mis.:
Cells(5,5) ➔maka property Interiornya merepresentasikan unsur dari Cells
yang dalam hal ini khusus hanya pada cell(E5).
E. Daftar nomor (konstanta) dari Indeks warna yang dapat digunakan pada
berbagai lingkungan pemerograman
5.2.3 Methods
5.2.4 Event
Event adalah sebuah Prosedur Sub (method) yang dapat dibangkitkan secara
otomatis oleh interpreter atau compiler. Ia bukan routine Function tetapi routine Sub;
yang biasa digunakan untuk tujuan tertentu ketika sebuah kondisi terpenuhi. Mis. bila
suatu variabel telah memiliki batas nilai tertentu maka Prosedur Sub yang didefinsikan
akan dieksekusi. Event yang seperti ini sering sekali dilekatkan kepada kondisi-kondisi
kritis, mis pada sistem keamanan gedung: ketika antar-muka medeteksi adanya asap,
maka sensor akan secara atomatis membangkitkan-event (menghidupkan) Alaram
(peringatan). Deklarasinya dibuat dengan perintah:
Event <<NamaEvent>>(<<NamaVariabel>> As <<VariableType>>) ------ (5-4)
User Form adalah sebuah kotak dialog yang dibuat khusus yang membuat
pengentrian data atau komunikasi user dengan applikasi menjadi lebih dapat
dikendalikan dan lebih mudah dalam penggunaan-applikasinya. Ia, sebenarnya adalah
sebuah Class Berorientasi Object (Object Oriented Programming) dalam bentuk sebuah
layar (canvas) yang dapat terlihat secara visual. Object-object yang digunakan atau yang
ditempatkan diatas layar disebut sebagai activex (*.ocx).
Dalam contoh ini sebuah form dengan 1 (satu buah) label dan 1 (satu buah)
tombol (CommandButoon) akan dibuat. Ketika dijalankan, click form akan
menghasilkan sebuah kotak dialog; click Tombol akan menutup form.
Untuk tujuan tersebut proses pembuatan form antarmukanya dilakukan dengan
cara:
End Sub
Pada blok program tersebut (diantara statement Sub dan End Sub) ketik nama
form yang ingin dieksekusi. Dalam hal ini nama Formnya adalah UsrFrm
Ketika tanda titik diketik (setelah kata UsrFrm) maka jendela property SerForm
akan mucul. Pilih metod yang diinginkan. Dalam hal ini methods yang dipilih
adalah Show, sehingga kode programnya menjadi:
UsrFrm.Show
3. Eksekusi perintah yang telah dibuat dengan meng-click tombol execution (tanda
panah berwarna hijau).
Jika pada saat eksekusi ditampilkan jendela nama dari Macro-macro yang ada,
pilih macro untuk project ini, yaitu MenampilkanUserForm.