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
>

Kirim email ke