hehehe.... ternyata mengungkapkan segala sesuatu secara eksplisit dalam pemrograman adalah kebiasaan yang baik... ndak percaya ? ayo kita buktikan....
ada cekrip berbunyi : Dim rgAsal As Range Set rgAsal = Range([E1]) 'jika ditulis Set rgAsal = [E1] maka hasilnya akan salah pada coretan tentang evaluate yang ada disini<http://b-excel.blogspot.com/2013/09/ngobrolin-evaluate-di-vba-yuk.html>dijelaskan bahwa evaluate menghasilkan object range jika ekspresinya menghasilkan object range. Hasil evaluate akan menghasilkan nilai skalar kalau ekspresinya *tidak bisa *menghasilkan object range. Pada kebiasaan kebanyakan pengguna VBA, tampak sekali betapa malasnya menulis : [E1].value untuk mengambil isi dari cell E1 yaitu dengan menulis (mode malas=on) berbunyi : [E1] contoh : dim sIsiCell_E1 as string, sIsiModeMalas as string sIsiCell_E1=[E1].value 'akan malas ditulis dan lebih memilih tulisan cekrip berbunyi : sIsiModeMalas = [E1] disini<http://b-excel.blogspot.com/2013/09/ngobrolin-evaluate-di-vba-yuk.html>juga dijelaskan bahwa setiap object range memiliki properti default bernama Value. Itu sebabnya banyak yang menulis seperti sIsiModeMalas = [E1] Ketika sudah nested seperti : Set rgAsal = Range([E1]) maka kemungkinan kehilangan arah akan semakin besar. bagian [E1] menghasilkan object range bagian Range( ) meminta inputan berupa string (teks) karena diminta memberikan teks, maka bagian [E1] akan mengambilkan properti default dari range yang bernama Value. Jadi, sebenarnya, bagian : Set rgAsal = Range([E1]) sama dengan penulisan mode rajin=on berbunyi : Set rgAsal = Range([E1].value) Kalau sudah sampai sini, maka akan jelas tampak, kenapa kok berbeda antara : Set rgAsal = Range([E1]) dengan Set rgAsal = [E1] So... beberapa karakter yang membuat jelas segala sesuatu bukanlah perlambatan, tetapi sesungguhnya percepatan dengan keamanan penuh. Wassalam, Kid. 2014-02-13 22:24 GMT+07:00 hendrik karnadi <[email protected]>: > > > Dear Be-Excellers, > Salah satu kesulitan dalam bermacro adalah pemahaman object dan variabel > serta penulisannya. > Meskipun Mr. Kid telah banyak bercerita mengenai VBA, namun ada satu hal > yang buat saya "masih mengganjal" (ga sesuai dengan nalar orang awam), > yaitu bagaimana penulisan range yang benar dan bagaimana penggunaannya. > > Macro ini saya kutip dari "jawaban" pak Zainal sebelumnya. Tujuan dari > macro di bawah ini adalah untuk mengcopy beberapa sel yang tersebar ke > dalam satu Range yang berurutan, dengan bantuan Range("E1"). > Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As > Boolean) > Dim rgAsal As Range, rg As Range, i As Integer > Set rgAsal = Range([E1]) 'jika ditulis Set rgAsal = [E1] maka > hasilnya akan salah > i = -1 > For Each rg In rgAsal > i = i + 1 > [F1].Offset(i, 0) = rg.Value > Next > > Cancel = True > End Sub > > Pertanyaan : Jika penulisan range [F1] cukup ditulis [F1] saja maka > seharusnya Range([E1]) cukup ditulis [E1] saja. Tetapi jika pada VBE > Sheet Range([E1]) kita ganti dengan [E1] maka hasilnya tidak sesuai > dengan yang diharapkan. Mengapa ? > > Untuk lebih jelasnya saya lampirkan file yang berisi macro tersebut. > > Salam, > HK > > >

