Otomatik veri yenileme sorunu.

Cevapla
Sinan05
Mesajlar: 7
Kayıt: Prş Eki 03, 2024 1:14 pm
Lokasyon: İstanbul
Meslek: Oto Satış Elemanı
Adınız: Sinan
Soyadınız: Ceviz

Otomatik veri yenileme sorunu.

Mesaj gönderen Sinan05 »

Merhabalar. Dosyamın DÖVİZ sayfasında dış verileri yenileyip verileri güncelliyorum. Veri çektiğim 5 adet tablo var. F4:F14 arası hücreler de bu tablodaki verilerle bağlantılı şekilde çarpım yapıyor. F15 Hücresinde bu hücreleri topluyor. Sonrada veriler güncellenince makro ile kaydediyorum. Yapmak istediğim makro ile tabloları her 30 dakikada bir otomatik yenilemek, yenileme başarısız olup #DEĞER! İşareti çıkarsa tekrar yenilesin, yenilemeden sonrada VERİLER makrosunu çalışsın. Aşağıya eklediğim makroyu çalıştırdım olmadı verileri yenilemiyor. Bende F15 hücresi değişince makro çalışsın istedim o da olmadı. Nerde hata yapıyorum bilemedim. Veri ayarların da mı hata var bilemedim. Yardımlarınız için teşekkür ederim.

Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:03:00"), "YenileVeKontrol"
End Sub

Sub YenileVeKontrol()
On Error GoTo YenilemeHatasi
ThisWorkbook.Worksheets("DÖVİZ").Range("F4:F14").Refresh
Application.OnTime Now + TimeValue("00:03:00"), "YenileVeKontrol"

If IsError(ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value) Then
Call YenileVeKontrol
Else
Static oldValue As Variant
Dim newValue As Variant
newValue = ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value
If oldValue <> newValue Then
oldValue = newValue
Call VERİLER
End If
End If
Exit Sub

YenilemeHatasi:
Call YenileVeKontrol
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("I1")) Is Nothing Then
Call DovizVeriKopyalaYapistir
End If
If Not Intersect(Target, Me.Range("F4:F14")) Is Nothing Then
Call YenileVeKontrol
End If
If Not Intersect(Target, Me.Range("F15")) Is Nothing Then
Static oldValue As Variant
Dim newValue As Variant
newValue = Me.Range("F15").Value
If oldValue <> newValue Then
oldValue = newValue
Call VERİLER
End If
End If
End Sub
SNNAY
Mesajlar: 45
Kayıt: Prş Mar 21, 2024 11:31 am
Lokasyon: istanbul
Meslek: Oto Yedek Parça Satış Elemanı
Adınız: Sinan
Soyadınız: Aykaç

Re: Otomatik veri yenileme sorunu.

Mesaj gönderen SNNAY »

Deneyiniz;

Workbook_Open: Dosya açıldığında ilk kez 30 dakika sonra YenileVeKontrol işlemi başlatılır.
YenileVeKontrol:Tüm bağlantıları RefreshAll ile yeniler. Eğer F15 hücresinde hata varsa, yenileme tekrar edilir. Yenileme başarılıysa ve F15 hücresinin değeri değişmişse, VERİLER makrosu çalıştırılır.

Kod: Tümünü seç

Private Sub Workbook_Open()
    ' Her 30 dakikada bir yenileme işlemi başlat
    Application.OnTime Now + TimeValue("00:30:00"), "YenileVeKontrol"
End Sub

Sub YenileVeKontrol()
    On Error GoTo YenilemeHatasi
    
    ' Tüm bağlantıları yenile
    ThisWorkbook.RefreshAll

    ' 30 dakika sonra tekrar çalışması için zamanlayıcıyı ayarla
    Application.OnTime Now + TimeValue("00:30:00"), "YenileVeKontrol"

    ' F15 hücresinde hata olup olmadığını kontrol et
    If IsError(ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value) Then
        ' Hata varsa yeniden dene
        Call YenileVeKontrol
    Else
        ' Değer değişmişse VERİLER makrosunu çalıştır
        Static oldValue As Variant
        Dim newValue As Variant
        newValue = ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value
        If oldValue <> newValue Then
            oldValue = newValue
            Call VERİLER
        End If
    End If
    Exit Sub

YenilemeHatasi:
    ' Yenileme hatası durumunda tekrar dene
    Call YenileVeKontrol
End Sub
Sinan05
Mesajlar: 7
Kayıt: Prş Eki 03, 2024 1:14 pm
Lokasyon: İstanbul
Meslek: Oto Satış Elemanı
Adınız: Sinan
Soyadınız: Ceviz

Re: Otomatik veri yenileme sorunu.

Mesaj gönderen Sinan05 »

Gizli İçerik
Bu mesaj panosunda gizli içeriği görüntülemek için kayıt olmanız ve giriş yapmanız gerekmektedir.
SNNAY yazdı: Prş Eki 03, 2024 2:55 pm Deneyiniz;

Workbook_Open: Dosya açıldığında ilk kez 30 dakika sonra YenileVeKontrol işlemi başlatılır.
YenileVeKontrol:Tüm bağlantıları RefreshAll ile yeniler. Eğer F15 hücresinde hata varsa, yenileme tekrar edilir. Yenileme başarılıysa ve F15 hücresinin değeri değişmişse, VERİLER makrosu çalıştırılır.

Kod: Tümünü seç

Private Sub Workbook_Open()
    ' Her 30 dakikada bir yenileme işlemi başlat
    Application.OnTime Now + TimeValue("00:30:00"), "YenileVeKontrol"
End Sub

Sub YenileVeKontrol()
    On Error GoTo YenilemeHatasi
    
    ' Tüm bağlantıları yenile
    ThisWorkbook.RefreshAll

    ' 30 dakika sonra tekrar çalışması için zamanlayıcıyı ayarla
    Application.OnTime Now + TimeValue("00:30:00"), "YenileVeKontrol"

    ' F15 hücresinde hata olup olmadığını kontrol et
    If IsError(ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value) Then
        ' Hata varsa yeniden dene
        Call YenileVeKontrol
    Else
        ' Değer değişmişse VERİLER makrosunu çalıştır
        Static oldValue As Variant
        Dim newValue As Variant
        newValue = ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value
        If oldValue <> newValue Then
            oldValue = newValue
            Call VERİLER
        End If
    End If
    Exit Sub

YenilemeHatasi:
    ' Yenileme hatası durumunda tekrar dene
    Call YenileVeKontrol
End Sub

Hocam çok teşekkürler. Şimdi deneyeceğiö. Buna benzer bazı kodlar buldum bilemiyorum belki hatalıdır sizinkinde aynı sorun olmayabilir ama yenilerken kısır döngüye giriyor. Koflar şöyle;
Sub VeriYenile()
Application.OnTime Now + TimeValue("00:05:00"), "VeriYenile"
YenileVeKontrol
End Sub

Sub YenileVeKontrol()
On Error GoTo YenilemeHatasi
ThisWorkbook.RefreshAll

Application.Wait (Now + TimeValue("00:00:05"))

If IsError(ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value) Then
Call YenileVeKontrol
Else
Static oldValue As Variant
Dim newValue As Variant
newValue = ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value
If oldValue <> newValue Then
oldValue = newValue
Call VERİLER
End If
End If
Call VeriYenile
Exit Sub

YenilemeHatasi:
Call YenileVeKontrol
End Sub
SNNAY
Mesajlar: 45
Kayıt: Prş Mar 21, 2024 11:31 am
Lokasyon: istanbul
Meslek: Oto Yedek Parça Satış Elemanı
Adınız: Sinan
Soyadınız: Aykaç

Re: Otomatik veri yenileme sorunu.

Mesaj gönderen SNNAY »

Eğer F15 hücresindeki değer sürekli bir hata veriyorsa (örneğin, bir bağlantı hatası veya formül hatası), YenileVeKontrol sürekli olarak tekrar çağrılır. Bu durumda, hata sayacı yoksa sonsuz bir döngü oluşur.
Application.OnTime ifadesi, zamanlayıcının sürekli ayarlanması nedeniyle kodun çalışmasını sürekli devam ettirir. Eğer hata sürekli devam ederse, bu durum başka bir sonsuz döngü oluşturabilir. O yüzden Hata sayacı ve zaman sınırlama ekliyoruz:

Kod: Tümünü seç

Dim errorCount As Integer

Private Sub Workbook_Open()
    ' Her 30 dakikada bir yenileme işlemi başlat
    Application.OnTime Now + TimeValue("00:30:00"), "YenileVeKontrol"
End Sub

Sub YenileVeKontrol()
    On Error GoTo YenilemeHatasi
    
    ' Tüm bağlantıları yenile
    ThisWorkbook.RefreshAll

    ' F15 hücresinde hata olup olmadığını kontrol et
    If IsError(ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value) Then
        errorCount = errorCount + 1
        If errorCount < 5 Then ' Hata sayısını 5 ile sınırlıyoruz
            ' Hata varsa yeniden dene
            Call YenileVeKontrol
        Else
            MsgBox "Veri yenileme hatası devam ediyor. Lütfen kontrol edin."
            errorCount = 0 ' Sayaç sıfırlanır
        End If
    Else
        ' Değer değişmişse VERİLER makrosunu çalıştır
        Static oldValue As Variant
        Dim newValue As Variant
        newValue = ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value
        If oldValue <> newValue Then
            oldValue = newValue
            Call VERİLER
        End If
        errorCount = 0 ' Hata yoksa sayaç sıfırlanır
    End If

    ' 30 dakika sonra tekrar çalışması için zamanlayıcıyı ayarla
    Application.OnTime Now + TimeValue("00:30:00"), "YenileVeKontrol"
    Exit Sub

YenilemeHatasi:
    errorCount = errorCount + 1
    If errorCount < 5 Then
        ' Yenileme hatası durumunda tekrar dene
        Call YenileVeKontrol
    Else
        MsgBox "Yenileme hatası sürekli devam ediyor. Lütfen kontrol edin."
        errorCount = 0 ' Sayaç sıfırlanır
    End If
End Sub
Sinan05
Mesajlar: 7
Kayıt: Prş Eki 03, 2024 1:14 pm
Lokasyon: İstanbul
Meslek: Oto Satış Elemanı
Adınız: Sinan
Soyadınız: Ceviz

Re: Otomatik veri yenileme sorunu.

Mesaj gönderen Sinan05 »

SNNAY yazdı: Prş Eki 03, 2024 9:36 pm Eğer F15 hücresindeki değer sürekli bir hata veriyorsa (örneğin, bir bağlantı hatası veya formül hatası), YenileVeKontrol sürekli olarak tekrar çağrılır. Bu durumda, hata sayacı yoksa sonsuz bir döngü oluşur.
Application.OnTime ifadesi, zamanlayıcının sürekli ayarlanması nedeniyle kodun çalışmasını sürekli devam ettirir. Eğer hata sürekli devam ederse, bu durum başka bir sonsuz döngü oluşturabilir. O yüzden Hata sayacı ve zaman sınırlama ekliyoruz:

Kod: Tümünü seç

Dim errorCount As Integer

Private Sub Workbook_Open()
    ' Her 30 dakikada bir yenileme işlemi başlat
    Application.OnTime Now + TimeValue("00:30:00"), "YenileVeKontrol"
End Sub

Sub YenileVeKontrol()
    On Error GoTo YenilemeHatasi
    
    ' Tüm bağlantıları yenile
    ThisWorkbook.RefreshAll

    ' F15 hücresinde hata olup olmadığını kontrol et
    If IsError(ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value) Then
        errorCount = errorCount + 1
        If errorCount < 5 Then ' Hata sayısını 5 ile sınırlıyoruz
            ' Hata varsa yeniden dene
            Call YenileVeKontrol
        Else
            MsgBox "Veri yenileme hatası devam ediyor. Lütfen kontrol edin."
            errorCount = 0 ' Sayaç sıfırlanır
        End If
    Else
        ' Değer değişmişse VERİLER makrosunu çalıştır
        Static oldValue As Variant
        Dim newValue As Variant
        newValue = ThisWorkbook.Worksheets("DÖVİZ").Range("F15").Value
        If oldValue <> newValue Then
            oldValue = newValue
            Call VERİLER
        End If
        errorCount = 0 ' Hata yoksa sayaç sıfırlanır
    End If

    ' 30 dakika sonra tekrar çalışması için zamanlayıcıyı ayarla
    Application.OnTime Now + TimeValue("00:30:00"), "YenileVeKontrol"
    Exit Sub

YenilemeHatasi:
    errorCount = errorCount + 1
    If errorCount < 5 Then
        ' Yenileme hatası durumunda tekrar dene
        Call YenileVeKontrol
    Else
        MsgBox "Yenileme hatası sürekli devam ediyor. Lütfen kontrol edin."
        errorCount = 0 ' Sayaç sıfırlanır
    End If
End Sub
Hocam teşekkürler ilginize. Bu şekilde herşey yolunda gitsede makro hızlı çalışıp verilerin yenilemesi bitmeden VERİLER makrosuyla kayıt yapıyor eksik sonuç çıkıyor. Bende mantık yürüterek makroya bir kaç tane duraklama ekledim. Şuan istediğimi yapıyor. Sizinkini de yarın denicem. Tekrar teşekkür ederim, eksik olmayın.
Cevapla
  • Benzer Konular
    Cevaplar
    Görüntüleme
    Son mesaj