• DİKKAT

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

64-bit hatası hk

Katılım
4 Nisan 2011
Mesajlar
209
Excel Vers. ve Dili
2010 İNGİLİZCE
arkadaslar 32-bit 2010-ing.excellde makro calısırken 64-bit 2010-ing excellde asağıdaki hatayı alıyorum nasıl düzeltebilirim.
arastırdım As Long kısmını As Longptrsafe olarak değistirince bu sefer "wininet.dll" düzelmiyor. tsk

Option Explicit

Private Declare
InternetGetConnectedStateEx Lib "wininet.dll" _
(ByRef lpdwFlags As Long, ByVal lpszConnectionName As String, _
ByVal dwNameLen As Integer, ByVal dwReserved As Long) As Long
 
tsk göndermis olduğunuz dosyayı sayfa indirmemem izin vermiyor wininet.dll sorununu baska nasıl çözebilirim,
 
Öncelikle sorun wininet.dll sorunu değil. Ayrıca ilk mesajdaki araştırmanızı da ya yanlış yapmışsınız, ya da yanlış anlamışsınız.
Olması gerekeni aşağıda verdim. Ama bilmeniz gereken bir nokta daha var; 64Bit API'ler Declare PtrSafe ile başlar ama tüm API'lerde değişken tipi Long olan değişkenlerin, değişken tipini LongPtr yapamazsınız.
Manuel olarak elle değiştirmek yerine, ilgili API'yi Google'da araştırıp, 64Bit için kullanılabilir olan API deklerasyonu ile değiştirmelisiniz. Doğrusu budur.



Bu API'yi kullanabilirsiniz;
Kod:
Public Declare PtrSafe Function InternetGetConnectedState _
        Lib "wininet.dll" (lpdwFlags As LongPtr, _
        ByVal dwReserved As long) As Boolean
 
üstad vermis olduğun apının deklerasyonu nasıl bulabilirim arastırdım fakat asağıdaki örnekten baska bulamadım, yardımların rica olunur,


Public Declare Function InternetGetConnectedState _
Lib "wininet.dll" (lpdwFlags As Long, _
ByVal dwReserved As Long) As Boolean

Public Declare PtrSafe Function InternetGetConnectedState _
Lib "wininet.dll" (lpdwFlags As LongPtr, _
ByVal dwReserved As long) As Boolean
 
Alternatif olrarak aşağıdaki kodu deneyiniz.

Kod:
Option Explicit

#If VBA7 And Win64 Then
    Private Declare PtrSafe Function InternetGetConnectedState _
            Lib "wininet.dll" (lpdwFlags As LongPtr, _
            ByVal dwReserved As Long) As Boolean
#Else
    Private Declare Function InternetGetConnectedState _
            Lib "wininet.dll" (lpdwFlags As Long, _
            ByVal dwReserved As Long) As Boolean
#End If

Sub Test()
    MsgBox InternetGetConnectedState(0&, 0&)
End Sub
 
asağıdaki kısımda hata var sanırım kırmızı ile uyarıyor

#Else
Private Declare Function InternetGetConnectedState _
Lib "wininet.dll" (lpdwFlags As Long, _
ByVal dwReserved As Long) As Boole Option Explicit




mevcut hali asağıdaki gibidir,

Option Explicit

#If VBA7 And Win64 Then
Private Declare PtrSafe Function InternetGetConnectedState _
Lib "wininet.dll" (lpdwFlags As LongPtr, _
ByVal dwReserved As Long) As Boolean
#Else
Private Declare Function InternetGetConnectedState _
Lib "wininet.dll" (lpdwFlags As Long, _
ByVal dwReserved As Long) As Boolean
#End If

Sub Test()
MsgBox InternetGetConnectedState(0&, 0&)
End Sub

Public Function CheckInternetConnection() As Boolean
Dim Aux As String * 255
Dim Kontrol As Long
Kontrol = InternetGetConnectedStateEx(Kontrol, Aux, 254, 0)
If Kontrol = 1 Then
CheckInternetConnection = True
Else
CheckInternetConnection = False
End If
End Function
 
Kırmızı ile uyarı vermesi önemli değil. Kodun bu halini hem 32 bit hem de 64 bit sistemde deneyip sonucu gözlemleyiniz.
 
Ekteki dosyayı inceleyiniz.

32 Bit ve 64 Bit excelde sorun yaşamadan kullandım.

Belki ondalık ayıraçla ilgili sorun yaşabilirsiniz.
 

Ekli dosyalar

korhan bey,

alternatif olarak verdiğiniz kodları denedim fakat .ProgressBar1 hatası vermektedir, ek'li dosyayı sanırım üyelikten dolayı açamadığım icin deneyemiyorum,


DoEvents
BEKLEME.ProgressBar1.Value = (SATIR_SAYISI / TOPLAM_SATIR_SAYISI) * 100
BEKLEME.Label2.Caption = Format((SATIR_SAYISI / TOPLAM_SATIR_SAYISI) * 100, "% 0")

Kontrol = Weekday(X, vbMonday)
If Kontrol > 5 Then
Y = X - (Kontrol - 5)
Else
Y = X
End If
 
Sn. mosmos2009, bahsettiğiniz hata için size yanıt vermiştim.
 
Sayın Murat hocam bir kaç sorum olacak terimleri anlamak için PtrSafe ne iş yapar; bu kodda yani ne işe yarar, ayrıca aşağıda örnekteki gibi # ile başlayan kodlar var burada # işaretinin amacı yada ne işe yaradığı ve 32 bittete 64 bittede örneğin user32 ise hedef budara kodun 64 bitte çalışmasını sağlayan nedir ? bu kodlların yaptığı kısaca nedir ne yapıyorda 64 bitte çalışmayan kodu çalışır hale getiriyor bu konularda aydınlatıcı öğretici bilgi paylaşırsanız çok memnun olurum teşekkürler.


#If VBA7 And Win64 Then
Private Declare PtrSafe Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
#Else
Private Declare Function SendMessage Lib "user32" _
Alias "SendMessageA" (ByVal hwnd As Long, _
ByVal wMsg As Long, ByVal wParam As Long, lParam As Long) As Long
#End If
 
Sistem sizden o şekilde Declare etmenizi istiyor. Yapacak bir şey yok. ;)
 
Tamam hocam orada bir sıkıntı yok ama bana # işaretiyle başlayan kodlar yabancı ayrıca PtrSafe terimide yabancı bu terimlerin ve # işaretinin özelliği ne işe yaradığı nı öğrenmek istedim sadece bil amaçlı. ayrıca yukarıda örnekte verdiğim kod ne yapıyorda macro 64 bitte çalışmaya balıyor sistemde ne değişiyor merak ettiğimden size sormak istedim.
 
Sayın zorbey eklemiş oldugunz dosya birkaç defa denememe rağmen dosya bulunamadı uyarısı veriyor alternatıf başka link eklemenizi rica ederım
Saygılar
 
ekli dosyada Ptrsafe yazıldığı halde makrolar calısmıyor. merkez bankasının sayfa değiskiliğinden dolayı calısmıyor olabilirmi, ayrıca windows için herhangi bir dosya yüklemek gerekirmi,

Private Declare
InternetGetConnectedStateEx Lib "wininet.dll" _
(ByRef lpdwFlags As Long, ByVal lpszConnectionName As String, _
ByVal dwNameLen As Integer, ByVal dwReserved As Long) As Long
 
Geri
Üst