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
>
>  
>

Kirim email ke