Tambah dikit lg ya...

dengan mengambil contoh dari Mr. Kid, public sub wordapp_dari_excel(), maka 
setiap kali prosedur ini di eksekusi, maka vba akan meng-create instance word 
application. Jika prosedur ini dieksesuksi lima kali, maka akan terdapat 5 buah 
instance word application, dan setiap instance akan meng-konsumsi memory 
sebanyak kurang lebih 7 MB. Hal ini dapat kita lihat pada windows task manager. 
Jadi bisa dibayangkan, jika kita menggunakan prosedur ini berulang-ulang???


Jadi benar apa kata Mr.Kid, jika dalam suatu prosedur terdapat variable yang 
diperoleh dari createobject, dan apabila object tersebut memiliki method 
Quit/Close, maka object tsb harus di quit/close dulu sebelum end sub 
(prosedur). Dalam contoh word.application tadi,

set obj = createobject("word.application")
.....
....
obj.Quit

sedangkan variablenya sendiri, karena scoping-nya adalah prosedur level, maka 
otomatis akan terhapus setelah prosedur selesai.

Kembali ke contoh dari Mas Zainal, jika object MsProject.Application itu sering 
digunakan dalam applikasi yg kt buat, maka akan lebih baik jika variable 
dideklrasi di module level atau bahkan public level, tinggal dibuat pengamannya

     if obj is nothing then set obj=createobject.....

Jadi kita tidak perlu meng-create obj tsb dan meng-quit obj tsb setiap kali 
akan digunakan, karena menurut pengamatan setiap kali createobject dan object 
quit, prosesnya cukup terasa lama. Yg terpenting adalah bagaimana pada saat 
sebelum applikasi kita exit, atau jika object tsb tidak akan digunakan dalam 
jangka waktu lama, kita menyisipkan method quit tadi.









________________________________
From: Mr. Kid <mr.nm...@gmail.com>
To: belajar-excel@yahoogroups.com
Sent: Saturday, April 16, 2011 8:03 PM
Subject: Re: [belajar-excel] Fungsi Set Object = Nothing


  
1. Berbicara tentang objects, maka harus dikenal sifat objectnya lebih dulu. 
Pada dasarnya variabel yang dideklarasikan pada level prosedur akan dihancurkan 
oleh VB ketika keluar dari scope variabel tersebut. Jadi, betul mbak Siti, 
bahwa untuk deklarasi pada sebuah prosedur tidak perlu set nothing. Kebiasaan 
boleh jalan terus, karena sepertinya tidak ada efeknya juga.

Umumnya set object = nothing digunakan ketika proses pemanfaatannya sudah 
selesai dan dikuatirkan memakan resources. Jika kerja pada level prosedur saja 
dan letak penggunaannya pada akhir prosedur, maka set nothing tidak diperlukan. 

Memang ada beberapa object yang tidak serta merta hilang walau sudah di set 
nothing, tetapi umumnya object seperti ini memiliki methods close atau quit 
yang membuatnya otomatis ter-clean dari memori. Artinya, variabel object sudah 
clean dari memori, baik karena set nothing atau karena keluar scope, tetapi 
objectnya sendiri masih ada di memori. Mungkin hal ini termasuk bugs.

Paling aman selalu menggunakan methods close atau quit pada object yang 
memiliki methods ini, bukan sekedar keluar scope atau set nothing. Sebenarnya 
yang lebih penting adalah methods close atau quit yang bisa jadi dimiliki oleh 
si object dibanding set nothing.
Kayanya pake contoh aja kali ya, kalo yang penting adalah methods close atau 
quit yang dimiliki si objects.

public sub wordapp_dari_excel()
       dim obj as object

       set obj = createobject("word.application")
       set obj = nothing

       'object obj udah bersih
       msgbox obj is nothing         'hasilnya kayanya true

       'tapi isinya si obj sebelum di clean oleh nothing, yaitu si word, masih 
ada
       'kalo dah gak ada, baris berikut akan keluar error
       set obj = getobject(,"word.application")

end sub

beda dengan excel (misal dibuat di word vba, dengan mengganti semua word dengan 
excel

Pada deklarasi yang scopenya lebih luas, penggunaan set nothing ditujukan ke 
object yang cenderung buat masalah ketika dia masih aktif, atau terlalu besar 
membutuhkan memori, sedangkan proses selanjutnya masih butuh object lain pada 
class tersebut, butuh resources memori yang cukup besar. Misal, untuk memproses 
beberapa query pada db dengan jumlah record yang banyak. Ketika hasil koneksi 
atau query yang lama sudah tidak digunakan dalam jangka dekat, atau kemungkinan 
bakal ada perubahan harus dilakukan re-query yang juga tidak terlalu dekat 
rentang waktunya, maka penggunaan set nothing bisa jadi diperlukan. Ketika 
aplikasi ditutup, mestinya tidak diperlukan set nothing walau dalam scope yang 
luas.

2. Tentang 
Dim app1 as word.application
set app1=new word.application

betul, memang butuh referensi pada VBProjects, dan bisa bermasalah pada saat 
bertemu referensi beda versi. Jadi, cocok untuk yang referensinya tetap.

Jika kebutuhannya adalah pada referensi yang tidak tetap, gunakan datatype 
object (yang bisa menampung object apa aja). Kinerja memang lebih lambat, 
tetapi untuk engine seperti jaman sekarang, sepertinya gak terlalu berefek.
dim app2 as object
set app2 = createobject("word.application")

Pada kedua cara di atas, pastikan penulisan nama object sesuai jenis library 
yang digunakan, karena kedua cara tersebut adalah deklarasi object dari suatu 
instansi dan instansinya membutuhkan library.

Mungkin gitu kali ya... dikoreksi kalo salah ya..
Kid.



2011/4/16 zainul ulum [yahoo] <zainul_u...@yahoo.com>

  
>Thanks mas Kid,
>Nambahin lagi  (mungkin ada temen be-exceler, bisa ikut belajar):
> 
>Dim appPrj as msproject.application
>set appprj=new msproject.application
> 
>Yang aku tahu variable yang didefinisikan object.application, kita harus set 
>object library reference di VBE (visual basic editor). 
>Contoh yang biasa aku pakai adalah:
> 
>Saya mempunyai program excel ke autocad, maka di VBE Excel saya set object 
>library ke ‘AutoCAD 2011 Type Library’
> 
>Problemnya adalah: 
>“ketika file excel saya dijalankan di computer lain yang tidak mempunyai 
>object library ‘AutoCAD 2011 Type Library (beda versi Autocad)’, maka program 
>tersebut tidak bisa dijalankan”
> 
>Kemudian saat saya membuat aplikasi interface excel ke Microsoft project, saya 
>coba hindari setting object library ke ‘Microsoft Project Object Library’ 
>dengan harapan saat program interface tersebut dijalankan di computer yang 
>mempunyai versi Microsoft Project yang berbeda tetap bisa dijalankan.
> 
>Apa pengarunhya (Plus. Minus nya) deklarasi variable:
>Dim appPrj as msproject.application VS Dim appPrj as object
>Atau
>[Mengacu ke Object Library] VS [Tidak Mengacu ke Object Library]
> 
>Terimakasih
>-zainul-
> 
>From:belajar-excel@yahoogroups.com [mailto:belajar-excel@yahoogroups.com] On 
>Behalf Of STDEV(i)
>Sent: Saturday, April 16, 2011 6:05 AM
>
>To: belajar-excel@yahoogroups.com
>Subject: Re: [belajar-excel] Fungsi Set Object = Nothing
> 
>  
>halo mas Kid....
>ikutan tanya... 
> 
>siti pernah mendengar mengenai Variable (maupun Constants) dlm VBA bahwa
>mereka ini punya Scope dan Umur, tergantung di level mana dia dideklrasikan.
> 
>kita ambil contoh dari mas zain
>2 peubah:  AppPrj dan objProject dideklarasikan seabgai Object dengan keyword 
>Dim di Level Prosedur.
> 
>Katanya, di VBA, Scope (ke-Terkenal-an)  dan Umur (ketersediaan) kedua peubah 
>tsb hanya
>di Prosedur itu saja
>Dan begitu prosedurselesai menjalankan tugas / prgm pointer sudah sampai di 
>End Sub;
>maka SEMUA PEUBAH lenyap kembali seperti ditelan bumi...
>Jenis Text kembali menjadi NullString, Bilangan menjadi 0, Object menjadi 
>Nothing, dst..
> 
>Pertanyaanku
>Jika yg siti dengar itu benar, di detik-detik menjelang berakhirnya 
>prosedur,  apakah kita masih 
>perlu menge SET AppPrj = Nothing ?
>Bukankah kalau didiamkan saja dia akan lenyap sendiri (menjadi Nothing), 
>pemakaian memory 
>otomatis dilepas.?
> 
>Dari dulu ini ingin siti ketahui kejelasannya, tapi ndak nemu-nemu bacaannya...
>Prakteknya pun tidak pernah, karena selama ini hanya bisa nulis program kelas 
>mainan & miniatur...
> 
>Ma acih....
> 
> 
> 
>2011/4/16 Mr. Kid <mr.nm...@gmail.com>
>1. Bagaimana efeknya jika saya hilangkan statement set objProject=Nothing dan 
>set AppPrj=Nothing?
>Tidak ada dampaknya, bahkan untuk scope yang lebih luas dari prosedur 
>sekalipun, karena hanya 1 object yang ada.
>Akan berdampak ketika membuat instansi baru dengan New pada scope yang lebih 
>luas dari prosedur.
>
>Contoh :
>Dim appPrj as msproject.application
>set appprj=new msproject.application
>
>maka jumlah memori akan membengkak setiap kali ada proses inisialisasi berupa 
>pembuatan instansi baru.
>jadi untuk seperti contoh diatas, usahakan tidak lupa untuk melepas memori 
>yang telah usai digunakan dengan set = nothing
>set appprj = nothing
>
>
>2. Apasih sebenarnya fungsi set object = nothing?
>Melepas memori yang digunakan oleh object tersebut. Jadi, si object tetap 
>exist tetapi isinya Null (nothing) karena tidak ada memori yang diblok olehnya 
>untuk digunakan.
>
>Regards.
>Kid.
>
>
>2011/4/15 zainul ulum [yahoo] <zainul_u...@yahoo.com>
> 
>>  
>>Be-excelers,
>>Saya sedang membuat program aplikasi dengan vba excel untuk update progress 
>>pekerjaan di Microsoft project.
>>Karena program dibuat di excel, maka ada beberapa syntax yang akan 
>>meng-access object Microsoft project. Contohnya adalah sbb:
>> 
>>Sub TestConnectMSProject()
>>    Dim AppPrj As Object, objProject As Object
>>    Set AppPrj = GetObject(, "MSProject.Application")
>>    Set objProject = AppPrj.activeproject
>>    Debug.Print objProject.Name
>>    Set objProject = Nothing
>>    Set AppPrj = Nothing
>>End Sub
>> 
>>‘Note:
>>‘AppPrj, objProject adalah object Microsoft project.
>> 
>>Pertanyaanya:
>>1. Biasanya saya selalu menggunakan syntax Set objProject = Nothing jika 
>>object tersebut tidak diperlukan lagi.
>>Bagaimana efeknya jika saya hilangkan statement set objProject=Nothing dan 
>>set AppPrj=Nothing?
>> 
>>2. Apasih sebenarnya fungsi set object = nothing?
>> 
>>Terimakasih
>>-zainul-
> 
> 

 

Kirim email ke