MS EXCEL MACROS OR VBA (Virtual Basic Application)
Tips for Beginners, send Email or YM! Yahoo! Messenger for inquiry and help


Nama Belakang tanpa spasi e.g. MansurIshak menjadi Ishak
Download Last Name (25 KB)


2008/10/6 siti Vi <villager.girl@gmail.com>

BEDAH MAKRO by Siti Vi

'------dari workbook kiriman pak safri ishak-------
Option Explicit
Dim intROW As Integer
Dim intLENGTH As Integer
Dim strSTRING As String

Sub Auto_Open()
'AUTO OPEN
'START READING DATA
intROW = 3 'Data Mulai Row ke 3
Do While Trim(Cells(intROW, 2)) <> Empty
'CLEAR
strSTRING = ""
For intLENGTH = Len(Cells(intROW, 2)) To 1 Step -1
strSTRING = Mid(Cells(intROW, 2), intLENGTH, 1) & strSTRING
'BUKAN HURUF BESAR
If Mid(Cells(intROW, 2), intLENGTH, 1) < "A" _
Or Mid(Cells(intROW, 2), intLENGTH, 1) > "Z" Then
Else
'HURUF BESAR
Exit For
End If 'HURUF BESAR
Next intLENGTH
'SIMPAN HASIL
Cells(intROW, 4) = strSTRING
'NEXT DATA
intROW = intROW + 1
Loop 'START READING DATA
'END OF AUTO OPEN
End Sub
'----------------------

Ceritaknya: Ada dua looping,
loop I (loop Luar) Do - While.
Loop ini akan mengunjungi semua data Nama yg ada di kolom B mulai baris3.
Berpindahnya kunjungan diatur dengan menaikkan nilai variale intRow, nilai Row yg bertype Integer. (jadi jika data lebih dari 32767 (2^15 dihitung dari 0) baris, makro sudah tidak mau bekerja lagi; padahal sebuah sheet bisa saja memuat 32768 NAMA; Nama ke 32768 tentunya akan tidak akan ikut diproses.)
Loop Luar ini nantinya akan diakhiri jika kunjungannya ke-baris-baris-data menemui baris kosong.

Di setiap kunjungan ke baris data (yg ada data NAMA nya) diadakan Loop II (Loop Dalam) For -Next.
Looping II ini mengunjungi karakter demi karakter, dimulai dari karakter terakhir (terkanan)
Di setiap kunjungan, karakter yg ditemui ditampung-gabung dalam variable strSTRING; Cara penggabungannya: karakter yg ditemui berikutnya ditaruh di sebelah KIRI hasil (strSTRING) yg telah ada sebelumnya, Jadi "AhmadSusanto" akan menghasilkan
strSTRING berkembang dari "o" menjadi "to" lalu "nto" kemudian "anto" dst..

Selain menampung-gabung karakter yg ditemui, Loop Dalam juga meng-evaluasi, apakah karakter temuan itu >"Z" dan <"A", Maksud evaluasi ini jelas, yaitu ingin tahu apakah karakter = BUKAN Huruf Capital.
Jika BENAR (bukan huruf capital) loop meneruskan pekerjaannya
tetapi jika SALAH (temuan = huruf capital) maka loop dihentikan.
Sementara itu variable strSTRING telah berisi string yg huruf-terkiri-nya = huruf capital,
hasil dari pengambilan data NAMA dari KANAN selama LoopDalam bekerja.
Isi variable strSTRING itu kemudian dituliskan ke cell yg sejajar dengan data nama yg dirujuk (yg sedang dikunjungi oleh Loop Luar) di kolom 4 (relatif sheet), truzz isi strSTRING itu sendiri dikosongkan, agar proses bagi NAMA berikutnya tidak terkontaminasi oleh NAMA sebelumnya.
Dan Loop Luar pun bekerja lagi maju satu step.

Begitulah, dua Kalang bekerja hingga berhenti, yaitu:
* dengan sopan, jika ditemui baris kosong ATAU
* dengan "ndak sopan" karena muncul ErrorMessage OverFlow, jika nilai variable intROW sudah di luar jangkauan pencacah (variable type ShortInteger). Ini sungguh akan terjadi jika misalnya baris data lebih dari 32767

Algoritma dan logika makro ini bagus, dengan catatan kecil pada hal hal sbb:

(1) intROW akan lebih aman jika dideklarasikan sbg LongInteger agar makro mampu menangani nama yg tertulis penuh satu worksheet excel 2003 (65536 baris)

(2) Lingkup, Jangkauan dan Umur variabel dipengaruhi oleh Tempat dan Keyword yg digunakan untuk mendeklarasikan.
Ketiga variable :intROW, intLENGTH, strSTRING, sebetulnya tidak perlu dideklarasikan di level modul, cukup dideklarasikan di dalam prosedur (procedure level) saja (dengan keyword Dim. Sebab tidak ada prosedur lain yg akan menggunakannya.
Dengan di-declare pada module-level seperti pada makro di atas, ketika prosedur selesai bekerja, ketiga variable masih "hidup", ada dan membebani memory. Ini satu hal yg kurang lazim dlm pemrograman terutama jika dilihat dari segi "memory management".
Dalam program yg besar hal seperti ini termsuk hal yg kritis.
Walaupun dlm program sangat sederhana spt yg sedang dibahas ini, tetapi saya kira kita ini kan sedang berlatih dari hal-hal kecil & sederhana, agar pada saat sampai di hal besar, hal-hal sederhana sudah "terlanjur menjadi kebiasaan".

(3) Prosedur dibuat otomatis jalan ketika workbook dibuka, dengan menamai prosedur sub = Auto_Open
Tujuannya cukup baik, yaitu user tidak perlu bekerja selain membuat data, pekerjaan menebak NamaTerakhir akan sudah beres dengan sendirinya KETIKA WORKBOOK DIBUKA.
Artinya jika kita menambahkan atau mengedit data di kolom NAMA, pekerjaan "menebak Nama Terakhir" tidak akan otomatis lagi terkerjakan, kecuali kita menjalankan makronya atau harus menutup workbook dulu lalu membukanya kembali.
Jadi yang diinginkan otomatis ternyata tidak sepenuhnya terlaksana otomatis.
Lazimnya orang akan ingin melihat hasil pekerjaannya seketika /selesai dikerjakan.
bukan nanti setelah pekerjaan disave, workbook ditutup dan kapan-kapan kita membuka workbook LAGI, baru pekerjaan menyajikan hasil.

Barangkali akan lebih oce lagi kalau ditulis sebagai prosedur biasa yg dibuat "mudah jalan", misalnya disediakan tombol ataupun Menu pemanggilnya.

Melihat jenis keperluannya, saya kira paling Oce kalau prosedurnya ditulis sebagai Function Prosedur, bukan Sub Prosedur, apalagi Sub Prosedur KHUSUS seperti Prosedur AutoOpen. Function Prosedur akan jalan dengan sendirinya, ketika Nama Fungsi dituliskan di cell Sheet, sebagai formula.

Prosedur Auto_Open, setara dengan (prosedur event Workbook_Open), biasanya dimaksudkan untuk hal yg diinginkan terjadi ketika workbook dibuka saja, atau untuk mengotomatiskan hal-hal yg perlu dipersiapkan bagi prosedur-prosedur lain;
Kedudukannya hampir seperti prosedur Event Form_Initialized pada makro yg menggunakan UserForm, yaitu menjalankan hal-hal yg harus sudah siap ketika Form dimunculkan.

Begitulah kira-kira, mohon maaf jika maksud "menerangkan" ini justeru malah menjadi "menggelapkan" (kayak pln saja yah..)

CMIIW
~ctv~ 4 okt 2008


 
EXIT
 
 
Tebet Business Directory Alamat Usaha Kita
Free Posting IKLAN GRATIS, send your name, address, telephone, email id, website and brief description of your business to AdminTebetbarat.com
 
More information about www.TB512.com Click HERE.