• DİKKAT

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

Excel 64 bit macro problemleri

Katılım
31 Mart 2007
Mesajlar
13
Excel Vers. ve Dili
2003 Türkçe
Merhaba Arkadaslar;

www.excelvba.net/download/file.php?id=862

Yukarıdaki linkde daha önceden de kullandığım kod bankası dosyası mevcuttur. Daha önceden 2010 - 32 bit kullanıyordum şimdi 2010 - 64 bite geçiş yaptık... Şimdi bu dosya açıldığından "compile error in hidden module : BasPopUpApi" diye yazan bir uyarı mesajı alıyorum. Bunun hakkında bilginiz varmı.
Diğer sorumda 64 bit sanırım eski macrolardaki bazı kodları tanımıyor bunları uyumlu halde çalıştırabilmenin yolu nedir. Elimde baya miktarda 32 bitde yazılmış macrolu excel dosyaları var ve şirketim 64 bite geçiş yaptı...
 
kod bankasını açtığımda macro kısmında yazan uyarı yazıyorum bu konuda yardımcı olabilecek bir arkadas varmı ???

Private Declare Function FindWindowA Lib "User32" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function EnableWindow Lib "User32" _
(ByVal hWnd As Long, ByVal bEnable As Long) As Long
Private Declare Function GetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib "User32" _
(ByVal hWnd As Long, ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
 
2. mesajdaki 1. fonksiyon için:

32 bit:
Private Declare Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

64 bit:
Private Declare PtrSafe Function FindWindow Lib "USER32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
 
mancubus arkadasımın verdiği satırla ; 9 satırlık problemin ilk satırı düzeldi..
şimdi 8/9 satır problemim devam ediyor...
teşekkürler mancubus
 
rica ederim.

tabii ben örnek verdim.
diğerlerini de o ve gerekirse diğer kaynaklardan arayarak bulmak lazım.
 
Merhaba,

Bende aynı problemi yaşamıştım.

Aşağıdaki mantıkla çözüm buldum.

Kod:
#If VBA7 And Win64 Then
    Private Declare PtrSafe Function FindWindowA Lib "User32" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Function EnableWindow Lib "User32" _
    (ByVal hWnd As Long, ByVal bEnable As Long) As Long
    Private Declare PtrSafe Function GetWindowLongA Lib "User32" _
    (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare PtrSafe Function SetWindowLongA Lib "User32" _
    (ByVal hWnd As Long, ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
#Else
    Private Declare Function FindWindowA Lib "User32" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function EnableWindow Lib "User32" _
    (ByVal hWnd As Long, ByVal bEnable As Long) As Long
    Private Declare Function GetWindowLongA Lib "User32" _
    (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLongA Lib "User32" _
    (ByVal hWnd As Long, ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
#End If
 
Merhaba,

Bende aynı problemi yaşamıştım.

Aşağıdaki mantıkla çözüm buldum.

Kod:
#If VBA7 And Win64 Then
    Private Declare PtrSafe Function FindWindowA Lib "User32" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare PtrSafe Function EnableWindow Lib "User32" _
    (ByVal hWnd As Long, ByVal bEnable As Long) As Long
    Private Declare PtrSafe Function GetWindowLongA Lib "User32" _
    (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare PtrSafe Function SetWindowLongA Lib "User32" _
    (ByVal hWnd As Long, ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
#Else
    Private Declare Function FindWindowA Lib "User32" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function EnableWindow Lib "User32" _
    (ByVal hWnd As Long, ByVal bEnable As Long) As Long
    Private Declare Function GetWindowLongA Lib "User32" _
    (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLongA Lib "User32" _
    (ByVal hWnd As Long, ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
#End If

Hocam bu kodlarla uyum problemi çözülür mü tam olarak? Bu kodları nereye atamak gerekiyor?
 
Ben mümkün olduğunca api kullanmıyorum.Sizde kullanmazsanız sorun olmaz.Api kullanıyırsanız 64 bit exceliniz varsa Korhan beyin verdiği çözümü kullanabilirsiniz.:cool:
 
Ben mümkün olduğunca api kullanmıyorum.Sizde kullanmazsanız sorun olmaz.Api kullanıyırsanız 64 bit exceliniz varsa Korhan beyin verdiği çözümü kullanabilirsiniz.:cool:

Evren Hocam,

İşin doğrusu api nedir bilmiyorum.
Kullanmadığımı sanıyorum ama varsa diye nasıl öğrenebilirim?
 
Sayın BedriA modüle başında olan private kısmını silerek yazmanız gerek.
 
Sayın BedriA modüle başında olan private kısmını silerek yazmanız gerek.

Her nesneye atanan kodun başında priviate yazıyor. Bunların hepsini mi silmek gerekiyor? Biraz daha detaylı tarif edebilir misiniz? Modüllerde kaydettiğim makrolar var sadece.
 
Private Declare Function şeklinde ifade 32 bit için kullanılır. 64 bitte Private Declare ptrsafe Function şeklinde olur. Yukardaki kod blogu hem 32 bit hem 64 bit için yazılmış hali.
 
Private Declare Function şeklinde ifade 32 bit için kullanılır. 64 bitte Private Declare ptrsafe Function şeklinde olur. Yukardaki kod blogu hem 32 bit hem 64 bit için yazılmış hali.

İlginiz için çok teşekkürler.
Her kod alanının başına mı yazmak gerekiyor bunları?
 
Ctrl H ile aratın değiştir yapın.
 
Hocam bu kodlarla uyum problemi çözülür mü tam olarak? Bu kodları nereye atamak gerekiyor?

Merhaba,

Excelin uyum problemleri kolay kolay çözülmeyecek gibi görünüyor.

Yeni versiyonlar çıktıkça problemlerde devam ediyor. 64 Bit kullanmak bazı avantajlar getirse de bazı nesnelerin kullanılamaması yüzünden bir çok kullanıcı kullanmak istemiyor. Kullanmaya kalktığında da proje aşamasında bir çok sorunla karşılaşıyor.

Örnek form tasarlıyorsunuz. Tarih girişi için DtPicker eklemek istiyorsunuz. 64 Bit desteklemediği için sorun yaşayacaksınız.

Ya da verilerinizi ListView nesnesinde görüntülemek istiyorsunuz. 64 Bit desteklemediği için sorun yaşayacaksınız.

Bunun gibi örnekler çoğaltılabilir.

Bu sebeple proje tasarlayan üyelerimize ya 32 Bit ofis kullanmalarını tavsiye ediyoruz. Ya da standart nesneler ile devam etmelerini tavsiye ediyoruz. Çünkü kullanılan her harici nesne sorun anlamına gelecektir.

Aynı durum APİ'ler içinde geçerlidir. Bu prosedürleri de 64 Bit uyumlu hale getirmek durumundasınız.

Bununla ilgili forumda ve nette kaynaklar/örnekler bulabilirsiniz.
 
Bahsi geçen kodları kullanmadım hiç.
Niçin kullanılması gerektiği konusunda bilgim yok.
Ben şunu merak ediyorum: Excel 2007, 32 bit sürümünde bir projem var. Office kurulumunda standart gelen nesneler dışında sadece web browser nesnesi ekledim ve kullandım. Bahsi geçen kodları da kullanmadım. Bu durumda bu projem 2007 ve üstü sürümlerde sorunsuz çalışır mı onu merak ediyorum çünkü Excel 2007 yüklü başka bir bilgisayarda denediğimde missing hatası verdi. Bu konuyu araştırmanın nedeni bu. Arkadaşların yardımıyla kod yazma, uyarlama ve makro kaydetmeyi biraz öğrendim ve proje bitti, kullanıcılara setup dosyası olarak sunmayı planlıyorum ama bahsettiğim missing hatası beni tereddütte bıraktı. Açıkçası bu konuda ne yapacağımı hiç bilmiyorum. Yardımcı olabilirseniz çok sevinirim.
 
Hangi nesneyle ilgili hata aldınız?
 
Geri
Üst