Özellik ikonu

RefreshAll

İndirme izni yok

Genel Bakış

RefreshAll (Workbook.RefreshAll), bir çalışma kitabındaki tüm dış veri aralıklarını, özet tabloları, Power Query sorgularını ve veri bağlantılarını tek seferde yenileyen bir Workbook yöntemidir. Veri sekmesindeki Tümünü Yenile düğmesinin VBA karşılığıdır. Kaynak veri değiştikten sonra raporların güncel sonucu göstermesini sağlamak için kullanılır.

Söz dizimi​

Yöntem bir Workbook nesnesi üzerinde çağrılır ve parametre almaz:
VBA 3 satır
ThisWorkbook.RefreshAll
' ya da
ActiveWorkbook.RefreshAll
  • expression: Bir Workbook nesnesini temsil eden ifade (ThisWorkbook, ActiveWorkbook ya da Workbooks("Kitap1.xlsx") gibi); zorunludur.
  • Parametre: Yoktur. Yöntem bir değer döndürmez, bu nedenle bir değişkene atanmaz.
Komut Excel arayüzünde Veri > Sorgular ve Bağlantılar > Tümünü Yenile (Data > Queries & Connections > Refresh All) düğmesiyle aynı işi yapar. Kısayolu Ctrl+Alt+F5 tuşlarıdır.

Nelerı yenilediği ve nelerı yenilemediği​

RefreshAll, çalışma kitabındaki şu öğeleri yeniler:
  • Özet tablolar: Özet tablo önbelleklerini kaynak verisinden yeniden okur. Kaynak, aynı kitaptaki bir aralık ya da Excel tablosu olabilir.
  • Dış veri aralıkları: QueryTable nesneleri, Web ve metin dosyası sorguları.
  • Power Query sorguları ve bağlantılar: Kitaptaki WorkbookConnection nesneleri.
Yöntem yalnızca çağrıldığı kitabı etkiler; açık olan diğer kitaplara dokunmaz. Formülleri yeniden hesaplamak için tasarlanmamıştır; bu iş için Application.Calculate kullanılır. Özet tablonun kaynak aralığını da genişletmez: kaynak aralığı sabitse yeni eklenen satırlar yenilemeden sonra da özet tabloya girmez. Bu yüzden kaynağı Excel tablosu yapmanız önerilir.

Eşzamanlı ve eşzamansız yenileme​

Bir bağlantıda arka planda yenileme (BackgroundQuery) açıksa yenileme işlemi makro çalışmaya devam ederken arka planda sürer. Bu durumda RefreshAll satırından hemen sonra özet tablodan okuduğunuz değer eski olabilir. Sonucu okumadan önce şu satırı çağırın:
VBA 2 satır
ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
Application.CalculateUntilAsyncQueriesDone yöntemi, bekleyen eşzamansız sorgular bitene kadar bekler. Aralık kaynaklı özet tablolar zaten eşzamanlı yenilenir; ancak aynı satırı her durumda kullanmak kodunuzu dış veri bağlantılarına karşı da güvenli kılar.
Tek bir bağlantıyı kesin olarak eşzamanlı yenilemek isterseniz o bağlantının BackgroundQuery özelliğini False yapabilirsiniz.

Yalnız bir parçayı yenileme seçenekleri​

Her şeyi yenilemek gerekmiyorsa daha dar kapsamlı yöntemler vardır:
  • PivotTable.RefreshTable: Yalnız belirtilen özet tabloyu yeniler.
  • PivotCache.Refresh: Bir önbelleği yeniler; o önbelleği kullanan tüm özet tablolar güncellenir.
  • QueryTable.Refresh: Tek bir dış veri aralığını yeniler.
  • WorkbookConnection.Refresh: Tek bir bağlantıyı yeniler.
Büyük kitaplarda yalnız gereken parçayı yenilemek süreyi belirgin biçimde kısaltır.

1. Eski ve yenilenmiş özet toplamı​

Sayfada Ürün ve Adet sütunları ile ptAdet1 adlı bir özet tablo vardır (özet tablo H3 hücresinden başlar ve önbelleği yalnız bu tabloya aittir). Aşağıdaki kodu standart bir modüle yapıştırın. Makro B2 hücresindeki adedi 200 yapar, yenilemeden önce özet tablonun genel toplamını C2 hücresine, RefreshAll sonrasındaki genel toplamı D2 hücresine yazar.
VBA 22 satır
Option Explicit

Sub Yenile1()
    Dim ws As Worksheet
    Dim pt As PivotTable

    Set ws = ThisWorkbook.Worksheets("Adet Özeti")
    Set pt = ws.PivotTables("ptAdet1")

    ' Kaynak veriyi değiştir
    ws.Range("B2").Value = 200

    ' Yenilemeden önce özet tablonun genel toplamı (eski önbellek)
    ws.Range("C2").Value = pt.GetPivotData("Toplam Adet").Value

    ' Tüm özet tabloları ve bağlantıları yenile
    ThisWorkbook.RefreshAll
    Application.CalculateUntilAsyncQueriesDone

    ' Yenilemeden sonra genel toplam
    ws.Range("D2").Value = pt.GetPivotData("Toplam Adet").Value
End Sub
RefreshAll
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünAdetYenileme ÖncesiYenileme Sonrası
2Kalem120
3Defter80
4Silgi60
5Dosya90
6Klasör40
7Zımba110
Adet ÖzetiExcelDepo v1.0.0
Makro B2 hücresine 200 yazar. C2 hücresi, kaynak değiştiği halde özet tablo henüz yenilenmediği için eski önbellekteki toplamı gösterir: . RefreshAll çalıştıktan sonra D2 hücresi özet tablonun güncel genel toplamını gösterir: . İki değer arasındaki fark, yenilemenin kaynak veriyi önbelleğe yeniden okuduğunu kanıtlar.

2. Yenilemeden sonra şehir bazında okuma​

Sayfada Şehir ve Satış sütunları ile ptRapor2 adlı bir özet tablo bulunur (özet tablo H3 hücresinden başlar). Kodu standart bir modüle yapıştırın. Makro her şehrin satışını 250 artırır, RefreshAll ile özet tabloyu günceller ve her şehrin özet tablodaki güncel toplamını C sütununa yazar.
VBA 24 satır
Option Explicit

Sub Yenile2()
    Dim ws As Worksheet
    Dim pt As PivotTable
    Dim r As Long

    Set ws = ThisWorkbook.Worksheets("Satış Raporu")
    Set pt = ws.PivotTables("ptRapor2")

    ' Kaynaktaki her satışı 250 artır
    For r = 2 To 7
        ws.Cells(r, 2).Value = ws.Cells(r, 2).Value + 250
    Next r

    ' Özet tabloyu yenile ve bitmesini bekle
    ThisWorkbook.RefreshAll
    Application.CalculateUntilAsyncQueriesDone

    ' Her şehrin güncel toplamını özet tablodan oku
    For r = 2 To 7
        ws.Cells(r, 3).Value = pt.GetPivotData("Toplam Satış", "Şehir", ws.Cells(r, 1).Value).Value
    Next r
End Sub
RefreshAll
Formülünü incelemek için bir hücre seçin.
ABC
1ŞehirSatışYenilenen Satış
2İstanbul1.250,00
3Ankara980,00
4İzmir870,00
5Bursa640,00
6Adana720,00
7Konya510,00
Satış RaporuExcelDepo v1.0.0
B sütunundaki her satış değeri 250 artırılır. RefreshAll özet tabloyu güncelledikten sonra makro, GetPivotData ile her şehrin toplamını okuyup C sütununa yazar. Örneğin İstanbul satırında C2 hücresi , Ankara satırında C3 hücresi değerini alır. C sütunundaki değerler B sütunundaki yeni değerlerle aynıdır; özet tablonun gerçekten yenilendiğini böyle doğrularsınız.

3. RefreshAll ile tek önbellek yenilemesi​

Sayfada aynı kaynaktan iki ayrı özet tablo vardır: ptKalem3a ve ptKalem3b. Her biri kendi önbelleğini kullanır (H3 ve L3 hücrelerinden başlarlar). Kodu standart bir modüle yapıştırın. Makro B2 değerini 500 yapar, yalnız ilk tablonun önbelleğini yeniler ve iki tabloyu karşılaştırır; ardından RefreshAll ile ikinci tabloyu da günceller.
VBA 27 satır
Option Explicit

Sub Yenile3()
    Dim ws As Worksheet
    Dim pta As PivotTable
    Dim ptb As PivotTable

    Set ws = ThisWorkbook.Worksheets("Stok Takibi")
    Set pta = ws.PivotTables("ptKalem3a")
    Set ptb = ws.PivotTables("ptKalem3b")

    ' Kaynak veriyi değiştir
    ws.Range("B2").Value = 500

    ' Yalnız birinci tablonun önbelleğini yenile
    pta.PivotCache.Refresh
    Application.CalculateUntilAsyncQueriesDone

    ws.Range("C2").Value = pta.GetPivotData("Toplam Stok").Value
    ws.Range("D2").Value = ptb.GetPivotData("Toplam Stok").Value

    ' Şimdi tüm özet tabloları yenile
    ThisWorkbook.RefreshAll
    Application.CalculateUntilAsyncQueriesDone

    ws.Range("E2").Value = ptb.GetPivotData("Toplam Stok").Value
End Sub
RefreshAll
Formülünü incelemek için bir hücre seçin.
ABCDE
1ÜrünAdetBirinci Tabloİkinci Tablo Önceİkinci Tablo Sonra
2Vida300
3Somun250
4Cıvata180
5Pul400
6Dübel150
7Matkap Ucu90
Stok TakibiExcelDepo v1.0.0
Makro B2 hücresine 500 yazar ve yalnız ptKalem3a tablosunun önbelleğini yeniler. C2 hücresi birinci tablonun güncel toplamını gösterir: . D2 hücresi, ikinci tablo kendi önbelleğini kullandığı için henüz eski toplamı taşır: . RefreshAll çalıştıktan sonra E2 hücresi ikinci tablonun da güncellendiğini gösterir: . Böylece RefreshAll'ın kitaptaki tüm önbellekleri yenilediğini, PivotCache.Refresh'in ise yalnız tek önbelleği yenilediğini görürsünüz.

Kullanırken dikkat edin​

  • Kaynak aralığı sabittir: RefreshAll, özet tablonun kaynak aralığını genişletmez. Kaynağa sonradan satır ekliyorsanız verileri bir Excel tablosuna (Ekle > Tablo) dönüştürüp özet tabloyu o tablodan kurun; böylece yeni satırlar yenilemede otomatik olarak dahil olur.
  • Eşzamansız sorgular: Arka planda yenilemesi açık bağlantılarda RefreshAll hemen döner ve veriler sonradan gelir. Sonucu okumadan ya da kaydetmeden önce Application.CalculateUntilAsyncQueriesDone çağırın; gerekirse ilgili bağlantının BackgroundQuery özelliğini False yapın.
  • Korumalı sayfalar ve özet tablo alanları: Özet tablonun bulunduğu sayfa korumalıysa yenileme hata verebilir. Ayrıca kaynakta bir sütun başlığının adını değiştirirseniz yenilemeden sonra o alan özet tablodan kaybolur ve PivotFields("...") çağrıları hata verir; kodda alan adlarını kaynak başlıklarıyla birebir aynı tutun.
  • Gereksiz yere her şeyi yenilemeyin: Büyük kitaplarda RefreshAll tüm bağlantıları ve önbellekleri yeniler, bu da uzun sürebilir. Yalnız tek bir özet tabloyu güncellemek istiyorsanız PivotTable.RefreshTable ya da PivotCache.Refresh kullanın. Yenileme sırasında Application.ScreenUpdating değerini geçici olarak False yapmak ekran titremesini azaltır.
  • ThisWorkbook ile ActiveWorkbook farkı: ThisWorkbook makronun bulunduğu kitabı, ActiveWorkbook ise o anda etkin olan kitabı gösterir. Başka bir kitap etkin olduğunda ActiveWorkbook.RefreshAll beklenmeyen bir kitabı yenileyebilir; hedef kitabı açıkça belirtmek daha güvenlidir.
  • İlgili konular:
    • PivotTable.RefreshTable: Tek bir özet tabloyu yeniler.
    • PivotCache.Refresh: Bir özet tablo önbelleğini yeniler.
    • QueryTable.Refresh: Tek bir dış veri aralığını yeniler.
    • WorkbookConnection.Refresh: Tek bir bağlantıyı yeniler.
    • Application.CalculateUntilAsyncQueriesDone: Eşzamansız sorguların bitmesini bekler.
    • Application.Calculate: Formülleri yeniden hesaplar.
    • PivotTable.GetPivotData: Özet tablodan belirli bir değeri okur; çalışma sayfası karşılığı ÖZETVERİAL işlevidir.
Örneklerdeki makroların tamamı indirilebilir Excel dosyasındadır (.xlsm). Dosyayı açtıktan sonra makroları etkinleştirin, ardından Alt + F11 ile Visual Basic Düzenleyicisi'nde kodları inceleyebilir ve Alt + F8 ile çalıştırabilirsiniz.
Yazar
ExcelDepo
İndirme sayısı
0
Gösterim
16
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst