isi makronya kita quote di sini dengan menghilangkan comments-nya (karena ada yg mauk ditanya-tanyakan...)
---------------------------------------------------------------------- 'Kode VBA ditulis oleh Steven Nathaniel 'di kota Balikpapan, Indonesia 'Minggu 26 April 2009 10:16 AM 'Untuk menghubungi saya: - E-mail: [email protected] ' - Yahoo Messenger ID : exploringcode 'website : http://sites.google.com/site/balikpapanwebmaster/ Private Sub UserForm_Activate() shInput.Activate ActiveCell.Activate txtInput.Value = "" End Sub Private Sub cmdInput_Click() ActiveCell.Value = txtInput.Value Do Until ActiveCell.Value = "" ActiveCell.Offset(1, 0).Activate txtInput.Value = "" txtInput.SetFocus Loop Exit Sub End Sub Private Sub cmdBatal_Click() Unload Me Unload Me txtInput.Value = "" ActiveCell.Select End Sub ============================= PERTANYAAN dan PERMOHONAN PENJELASAN: (1) Mengenai prosedur I (Private Sub UserForm_Activate) Pada saat userform diaktifkan, perintah pengaktifannya berasal dari klik Button yg ada di Sheet shInput. ini dapat diartikan bahwa saat itu shInput sedang aktif. (kita tentu tidak dapat mengklik Tombol yg ada di Sheet shInput, jika sheet tsb sedang tidak aktif. Mengapa di dalam prosedur tsb masih diperlukan perintah shInput.Activate (mengaktifkan sheet yang SUDAH aktif) Apakah ada akibat lain jika perintah tsb tidak ditulis? Mohon dicontohkan 'akibat lain' tsb, misalnya ada. (2) Object Activecell adalah sebuah cell (Range Tunggal) yg sedang aktif, atau dapat dikatakan cell yg sedang 'ketempatan' cell-pointer; yaitu cell yg siap menerima masukan jika ada data diinputkan. ActiveCell oleh VBA Excel diberinama ActieCell (cell aktif) karena dia adalah cell yg sedang aktif. Jika cell-aktif sudah AKTIF, mengapa harus ada perintah ActiveCell.Activate ?? Apakah ada akibat lain jika perintah tsb tidak dituliskan ? Mohon dicontohkan akibat lain tsb, misalnya memang ada. (3) Masih di dalam prosedur I instruksi TxtInput.Value = "" Saya telah mencoba me-Non-Aktifkan peritah ini dan juga perintah yg sama yg ada di prosedur III (dengan cara memberi perintah REM atau tanda ' (afostrof) di depannya.) Ketika Userform diaktifkan, tanpa ada perintah tsb ternyata UserForm muncul dengan Textbox sudah kosong. Demikian juga setelah textbox diisi, lalu, tanpa mengklik Tombol "INPUT", Form ditutup melalui kontrol(X) yg ada di sudut kanan atas form. Ketika userform di aktifkan lagi (tetap dengan meniadakan perintah TxtInput.value = "") ternyata textbox tampil dlm keadaan kosong. Kesimpulan saya sementara: tanpa diberi pirintah txtInput.Value = "", textbox tsb sudah kosong dengan sendirinya saat UserForm diaktifkan. Barangkali ini disebabkan kotak property VALUE maupun property TEXT di kotak properties = "" (kosong) Jika keadaannya spt itu, mengapa di dalam prosedur I (maupun prosedur III) masih diperlukan perintah TxtInput.Value = "" Bila tidak dituliskan, apakah ada akibat lain (yg saat ini belum terasa) ? Mohon dicontohkan 'akibat lain; tsb, bila memang ada. (4) Pada prosedur II Private Sub cmdInput_Click() ActiveCell.Value = txtInput.Value * Do* Until ActiveCell.Value = "" ActiveCell.Offset(1, 0).Activate txtInput.Value = "" txtInput.SetFocus *Loop* Exit Sub End Sub Menurut penangkapan saya, maksud instruksi dlm prosedur tsb adalah: Jika Tombol CmdInput di-klik, nilai pada textbox txtInput akan diisikan ke cell-aktif. setelah itu diadakan *loop* / mengulang (bukan "melompat" seperti di penjelasan) instruksi 1. aktif-cell di-pindah ke bawah 1 baris 2. textbox txtInput di-kosongkan dan 3. textbox txtInput diberi focus ketiga instruksi ini diulang ulang sampai aktifcell (yg selalu dipindah ke bawah 1 baris) = cell kosong. Jika tepat-di-bawah aktifcel-semula (yaitu cell yg diberi nilai = nilai texbox sebelum dihapus) adalah cell kosong, maka loop / perulangan hanya terjadi sekali, tetapi bila di bawah aktifcell semula, misalnya terdapat 100 cell yg berisi data, maka perulangan akan terjadi 100 kali hingga akhirnya aktif cell menempati cell kosong tepat di bawah cell berdata. (cell ke 101 dihitung dari cell aktif semula) Setiap step perulangan, TextBox di kosongkan dan kemudian diberi fokus. Pertanyaannya: Mengapa selama pencarian cell kosong, pengosongan dan pemberian fokus kpd TextBox harus diulang ulang ? Apakah sekali dikosongkan, sebuah textbox memang masih perlu di KOSONGKAN LAGI ? Apakah ada akibat lain (yg saat ini belum terasa) jika penulisan perintah pengosongan dan pembertian fokus kpd textbox hanya dilakukan sekali ? (yaitu dengan tidak menempatkan kedua perintah tsb didalam loop) Mohon dicontohkan akibat lain tsb, jika memang ada. (4) Pada prosedur ke III Private Sub cmdBatal_Click() Unload Me Unload Me txtInput.Value = "" ActiveCell.Select End Sub Jika tombol "Batal/Keluar" di klik, userform di-Unloaded, userform yg sudah Unloaded, di-Unload lagi, textBox diosongkan, dan aktif-cell di-select Mengapa perintah meng Unload (me-non-aktifkan?) Userform harus diberikan *dua kali *? Saya mencoba menghapus perintah Unlod Me yg kedua, dan ternyata userform berhasil di-Unloaded dengan baik (semula nampak menjadi tidak nampak lagi). Apakah ada akibat lain (yg saat ini belum terlihat), jika perintah Unload UserFrom hanya dituliskan sekali saja. ? Mohon dicontohkan akibat-lain tsb, jika memmang ada. TextBox txtInput dikosongkan setelah Userform di non aktifkan. Saya mencoba menghapus perintah pengosongan textbox. Perintah pengosongan Textbox pada prosedur I (event userform activate) juga di hapus. Lalu makro dijalankan TextBox diisi, lalu tanpa mengklik tombol "input" saya klik tombol Batal. Kemudian Userform diaktifkan lagi. Yang terjadi = Textbox muncul dlm keadaan tetap kosong. Kalau begitu dapat disimpulkan, perintah pengosongan textbox tidak ada gunanya. Pertanyaannya: Apakah dengan meniadakan perintah txtInput.value = "", akan ada akibat lain (yg saat ini belum diketahui) ? Mohon dicontohkan akibat lain tsb, bila memang ada. Mengenai perintah ActiveCell.Select Sebelum adanya perintah ini Aktifcell sudah dalam keadaan ter-Select, karena aktif-cell adalah juga merupakan "Selection" atau salah satu cell yg termasuk dalam "selection", jika selection berupa range (lebih dari satu cell) Dalam makro ini, tidak ada perintah menselect Range yg terdiri dari banyak cell; yang ada : menselect range yg terdiri dari 1 cell tunggal (ActieCell.Offset(1,0).Activate) Berarti selama makro dijalankan : tidak pernah ADA 'Selection' yg berupa Range jamak (Range yg terdiri dari sekumpulan cell); yang ada selection berupa cell tunggal, yang juga sekaligus sebagai ActiveCell. Dlm keadaan seperti itu, perintah Activecell.Activate maupun Actiecell.Select akan berakibat sama yaitu terselectnya cell tunggal yg SUDAH perpredikat "selection" sekaligus "aktifcell" menjadi aktivecell sekaligus selection, yg dapat diartikan = tidak merubah keadaan apapun. Mengapa perintah menselect AktifCell (yg sudah terselect) ini perlu diberikan ? Apakah ada akibat lain (yg saat ini belum terasa) jika perintah tsb ditiadakan ? Mohon diberikan contoh 'akibat lain' tsb, jika memang ada. Apakah ada perbedaan seandainya prosedur ke III (yg berisi 4 instruksi tsb) diganti dengan kode spt di bawah ini ? Private Sub cmdBatal_Click() Unload Me End Sub Pertanyaan dan permohonan penjelasan ini diajukan dengan harapan mendapat tanggapan dari Pak Steven Nathaniel, penulis kode VBA tsb diatas, karena kita-kita yg sedang belajar excel (termasuk makro VBA Excel) ingin mendapat gambaran yg lebih jelas, bagaimana menuliskan kode VBA lengkap dengan alasan: *mengapa sebuah kode harus ditulis, ataupun harus tidak ditulis*. Terima kasih. 2009/4/26 steven nathaniel <[email protected]> > Saya masih pemula dalam coding VBA. Disini saya ingin berbagi hasil > coding saya untuk membuat input data di sheet Microsoft Excel 2007. Saya > berusaha membuat coding yg bisa menginput data secara berurut ke arah > bawah dari cell yang telah kita pilih menggunakan mouse. Untuk lebih > jelasnya teman-teman dapat melihat pada file excel yg saya sertakan di > attachment e-mail ini. > > terimakasih > > > Steven Nathaniel >

