System.Collections.ArrayList Kullanımı

Katılım
24 Aralık 2018
Mesajlar
5
Excel Vers. ve Dili
VBA
VBA'da kullanım için Liste lazım oldu.
Ben de .Net Framework çatısı altında olan System.Collections.ArrayList kullanmaya karar verdim.

VBA'da Liste olarak modül yazdım. Bu Liste Modülü (Adresler.cls):

Hemen yukarıdaki vba kod'da görüldüğü üzere ( 'Init' adındaki Sub ) bir .Net Object olan System.Collections.ArrayList'i çağırarak
kullanıyorum.
Bu 'Init' adındaki Sub çağrıldığı zaman Microsoft Office/Excel 2007 üstü sürümler de HATA'yı alıyorum. (Yukarıda Sarı Renkteki Sub)
Microsoft Office/Excel 2007'de ise hiçbir hata alınmamakta, kod sorunsuz çalışmaktadır.

Burada ise .Net Framework çatısı'nı VBA'ya bildiriyorum.
Bende ki .Net Framework sürümü v4.0 olduğu için ona göre öntanımlı olarak düzenleme yaptım.
.Net Framework için 'NETFramework (NETFramework.cls)' ismindeki modül:

Bu iki modül Microsoft Office/Excel 2007'de sorunsuz çalışmakta iken üstü sürümlerde aşağıdaki hatayı vermektedir:


Bu hata'nın çözümü olarak internet'de hemen aşağıdaki yapılandırmayla sorunun çözüleceği gösterilmiş.
Denedim ama sorun çözülmedi.


(?) SORU : Microsoft Office/Excel 2007 üstü versiyonlar da yukarıdaki hata vermekte. Peki üst versiyonlar da bu sorunu nasıl çözebilirim veya kullanabilirim ?

EKLER : Adresler.cls VE NETFramework.cls
 
Son düzenleme:

Muzaffer Ali

Destek Ekibi
Destek Ekibi
Katılım
5 Haziran 2006
Mesajlar
6,167
Excel Vers. ve Dili
2019 Türkçe
Merhaba.
Dosyanızı ekleyin yada kodları kopyalayıp ekleyin ve hatayı hangi satırda aldığınızı da belirtin.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
Kodunuzda "run time" sırasında referans eklemeye çalıştığınız için MS Office'in güvenlik uyarısı ile karşılaşıyorsunuz. Dediğiniz gibi; MS Offfice programlarına daha sonradan bu tür güvenlik uygulamaları getirdi.

Aksi takdirde, VBA kodlarıyla bile çok rahat bir şekilde kullanıcı fark etmeden bir çok şey yapılabiliyordu.....

.
 
Katılım
24 Aralık 2018
Mesajlar
5
Excel Vers. ve Dili
VBA
Kodunuzda "run time" sırasında referans eklemeye çalıştığınız için MS Office'in güvenlik uyarısı ile karşılaşıyorsunuz. Dediğiniz gibi; MS Offfice programlarına daha sonradan bu tür güvenlik uygulamaları getirdi.

Aksi takdirde, VBA kodlarıyla bile çok rahat bir şekilde kullanıcı fark etmeden bir çok şey yapılabiliyordu.....

.
Peki. Bunu Excel 2007 üst sürümlerinde kullanabilmemin bir yolu var mı?
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,334
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
PHP:
set obj = createobject("System.Collections.ArrayList")
 

Zeki Gürsoy

Uzman
Uzman
Katılım
31 Aralık 2005
Mesajlar
4,334
Excel Vers. ve Dili
Office 2019 (64 bit) - Türkçe
İlk mesajda "GetObject" ifadesini görünce CreateObject yazmıştım. Tekrar baktığımda zaten öyleymiş...

İlgili tlb (type library) dosyasını referans olarak eklemeye çalışmayın. CreateObject fonksiyonu zaten sizin için Instance oluşturuyor. Diğer taraftan, referans eklediyseniz, ekli referans 32 bit framework' e başvurduğu görülüyor eklediğiniz resme göre. 2007 üzeri Excel sürümlerinde aynı zamanda 64 bit versiyonu olduğu için hata vermesi normal. (64 bit Excel ile denendi ise) Çünkü 2007 Excel 32 bit'tir ve tekdir.

Referans eklemeyin; Object Browser'da, doğal olarak intellisence' de zaten üyeler görünmüyor.
 
Katılım
24 Aralık 2018
Mesajlar
5
Excel Vers. ve Dili
VBA
İlk mesajda "GetObject" ifadesini görünce CreateObject yazmıştım. Tekrar baktığımda zaten öyleymiş...

İlgili tlb (type library) dosyasını referans olarak eklemeye çalışmayın. CreateObject fonksiyonu zaten sizin için Instance oluşturuyor. Diğer taraftan, referans eklediyseniz, ekli referans 32 bit framework' e başvurduğu görülüyor eklediğiniz resme göre. 2007 üzeri Excel sürümlerinde aynı zamanda 64 bit versiyonu olduğu için hata vermesi normal. (64 bit Excel ile denendi ise) Çünkü 2007 Excel 32 bit'tir ve tekdir.

Referans eklemeyin; Object Browser'da, doğal olarak intellisence' de zaten üyeler görünmüyor.
peki. Excel 2016'da denedim olmadı, sanırım dediğiniz gibi 64 bit olabilir.32/64 bit ayrımına dikkat edeyim.
Olmazsa Type Library (tlb), eklemeden tekrar deneyeceğim.
İlgilendiğiniz için teşekkürler.
 
Katılım
24 Aralık 2018
Mesajlar
5
Excel Vers. ve Dili
VBA
peki. Excel 2016'da denedim olmadı, sanırım dediğiniz gibi 64 bit olabilir.32/64 bit ayrımına dikkat edeyim.
Olmazsa Type Library (tlb), eklemeden tekrar deneyeceğim.
İlgilendiğiniz için teşekkürler.
Dediklerinize göre düzenlemeler de bulundum.
Şuan da kod, Microsoft Office/Excel 2007 üstü sürümler de sorunsuz çalışmakta.

Zeki Gürsoy : "İlgili tlb (type library) dosyasını referans olarak eklemeye çalışmayın"
Type Library (tlb) eklenmesini iptal ettim.
Böylelikle .Net Framework için 'NETFramework (NETFramework.cls)' ismindeki modülü kullanmaya gerek kalmadı.
.Net Framework çatısı altında olan System.Collections.ArrayList kullanmak için Liste Modülü (Adresler.cls) değişiklik yaptım.
Zeki Gürsoy : "CreateObject fonksiyonu zaten sizin için Instance oluşturuyor." dediğinize uygun değişiklik yapıp, NewAdresler.cls
olarak kaydettim. (Ekte bu isimde yeralmakta.)


NewAdresler.cls : Ek : NewAdresler.cls indirmek için..

Herşey için tüm arkadaşlara teşekkür ederim.:)(y)
 
Üst