• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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):
dghzxx.png

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:
6futd4.png

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


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.
kb5b7p.png


(?) 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:
Merhaba.
Dosyanızı ekleyin yada kodları kopyalayıp ekleyin ve hatayı hangi satırda aldığınızı da belirtin.
 
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.....

.
 
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ı?
 
İ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.
 
İ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.
 
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..
s64rcy.png

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