Özellik ikonu

ScreenUpdating

İndirme izni yok

Genel Bakış

ScreenUpdating (Application.ScreenUpdating), Excel ekranının makro çalışırken yenilenip yenilenmeyeceğini belirleyen, Boolean türünde bir okunur/yazılır özelliktir. Değeri False yapıldığında Excel işlemleri arka planda yürütür ve ekranı çizmez; bu sayede makro daha hızlı çalışır, ekran da titremez. İş bitince değerin True yapılması gerekir.

Söz dizimi​

Özelliği değiştirmek ve okumak için kullanılan söz dizimi şöyledir:
VBA 2 satır
Application.ScreenUpdating = True | False
durum = Application.ScreenUpdating
Özelliğin parametresi yoktur; atanan ya da okunan değer Boolean türündedir:
  • True: Excel ekranı her değişiklikte yeniler. Excel açıldığında ve makro başladığında varsayılan değer budur.
  • False: Ekran yenilenmez. Hücre değişiklikleri, sayfa geçişleri ve seçimler arka planda yapılır, ekran dondurulmuş gibi görünür.
Özellik okunduğunda geçerli durumu Boolean olarak döndürür. Bu sayede makronun başında mevcut değeri saklayıp sonda aynen geri yükleyebilirsiniz.

Ne zaman ve neden kullanılır​

Döngülerle çok sayıda hücreye yazan, sayfalar arasında geçiş yapan, biçimlendirme uygulayan ya da büyük aralıklar kopyalayan makrolarda Excel her adımda ekranı yeniden çizer. Bu çizim işlemi, makronun toplam süresinin büyük bölümünü oluşturabilir. ScreenUpdating özelliğini False yaparak bu çizimi ortadan kaldırırsınız.
  • Hız: Özellikle binlerce satırlık döngülerde süre belirgin biçimde kısalır.
  • Görsel rahatlık: Kullanıcı, sayfaların açılıp kapanmasını ve seçimlerin gezinmesini görmez.
  • Kapsam: Özellik Excel uygulamasının tamamı için geçerlidir, yalnızca tek bir çalışma kitabı için değil.
Özelliği kapatmak makronun yaptığı işi değiştirmez; yalnızca sonucun ekrana yansıtılma zamanını erteler.

Açmayı unutmayın ve hata durumu​

Makro bir hata nedeniyle yarıda kalırsa ve ekran yenilemesi kapalı kalmışsa, Excel penceresi donmuş gibi görünebilir. Bunu önlemek için özelliği kapatan her makroda, hata olsa bile çalışan bir geri yükleme bloğu bulundurun:
VBA 9 satır
Sub Ornek()
    Dim eski As Boolean
    eski = Application.ScreenUpdating
    On Error GoTo Temizle
    Application.ScreenUpdating = False
    ' ... asıl işlemler ...
Temizle:
    Application.ScreenUpdating = eski
End Sub
Makro normal biçimde biterse de akış Temizle etiketine gelir ve değer eski haline döner. Makro bittiğinde Excel genellikle değeri kendiliğinden True yapar; yine de açıkça geri yazmak iyi bir alışkanlıktır. Hata ayıklarken kod arada durursa Hemen Pencere (Immediate Window) içinde Application.ScreenUpdating = True yazarak ekranı geri açabilirsiniz.

1. Döngüde ekranı kapatarak hesaplama​

Aşağıdaki makro, her ürünün tutarını adet ile birim fiyatı çarparak D sütununa yazar. Döngü süresince ekran yenilemesi kapatılır. Kodu standart bir modüle (Ekle > Modül) yapıştırın.
VBA 19 satır
Option Explicit

Sub TutarlariHesapla()
    Dim ws As Worksheet
    Dim i As Long

    Set ws = ActiveSheet

    ' Ekran yenilemesini kapat
    Application.ScreenUpdating = False

    For i = 2 To 7
        ' Tutar = Adet x Birim Fiyat
        ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
    Next i

    ' Ekran yenilemesini yeniden aç
    Application.ScreenUpdating = True
End Sub
ScreenUpdating
Formülünü incelemek için bir hücre seçin.
ABCD
1ÜrünAdetBirim FiyatTutar
2Kalem1204,50540,00
3Defter8018,001.440,00
4Silgi2003,00600,00
5Cetvel607,50450,00
6Dosya4522,00990,00
7Kağıt Paketi3095,002.850,00
SatışlarExcelDepo v1.0.0
Makro çalıştıktan sonra D sütununda her ürünün tutarı bulunur; örneğin Kalem için 540,00, Defter için 1.440,00 yazılır. Aynı sonuç ekran yenilemesi açıkken de elde edilirdi, ancak satır sayısı çok olduğunda kapalı durum belirgin biçimde daha hızlıdır.

2. Mevcut durumu okuyup geri yükleme​

Bu makro özelliğin değerini üç aşamada sayfaya yazar: başlangıçta, kapattıktan sonra ve eski değere döndürdükten sonra. Hata olsa bile geri yükleme satırına ulaşılması için On Error GoTo kullanılır. Kodu standart bir modüle yapıştırın.
VBA 23 satır
Option Explicit

Sub DurumuIzle()
    Dim ws As Worksheet
    Dim eski As Boolean

    Set ws = ActiveSheet

    ' Mevcut değeri sakla
    eski = Application.ScreenUpdating
    ws.Range("B2").Value = eski

    ' Hata olursa Temizle etiketine git
    On Error GoTo Temizle

    Application.ScreenUpdating = False
    ws.Range("B3").Value = Application.ScreenUpdating

Temizle:
    ' Normal akış da hata durumu da buraya gelir
    Application.ScreenUpdating = eski
    ws.Range("B4").Value = Application.ScreenUpdating
End Sub
ScreenUpdating
Formülünü incelemek için bir hücre seçin.
AB
1AdımScreenUpdating değeri
2Makro başlangıcıDOĞRU
3Kapatıldıktan sonraYANLIŞ
4Geri yüklendikten sonraDOĞRU
Durum TakibiExcelDepo v1.0.0
Başlangıç değeri DOĞRU olarak okunur. Özellik False yapıldıktan hemen sonra YANLIŞ değerini görürsünüz. Eski değer geri yazıldıktan sonra DOĞRU yeniden başlangıçtaki değere eşit olur. Bu yapı, makroyu çağıran başka bir makro ekran yenilemesini zaten kapatmış olsa bile onun ayarını bozmamanızı sağlar.

3. Aylık rapor durumunu renklendirme​

Bu örnekte her ayın gerçekleşen değeri hedefle karşılaştırılır; Durum sütununa metin yazılır ve hücre renklendirilir. Biçimlendirme işlemleri ekran yenilemesini en çok yoran işlemlerdendir. Kodu standart bir modüle yapıştırın.
VBA 26 satır
Option Explicit

Sub DurumlariYaz()
    Dim ws As Worksheet
    Dim i As Long
    Dim eski As Boolean

    Set ws = ActiveSheet
    eski = Application.ScreenUpdating

    On Error GoTo Temizle
    Application.ScreenUpdating = False

    For i = 2 To 7
        If ws.Cells(i, 3).Value >= ws.Cells(i, 2).Value Then
            ws.Cells(i, 4).Value = "Hedef tamam"
            ws.Cells(i, 4).Interior.Color = RGB(198, 239, 206)
        Else
            ws.Cells(i, 4).Value = "Hedefin altında"
            ws.Cells(i, 4).Interior.Color = RGB(255, 199, 206)
        End If
    Next i

Temizle:
    Application.ScreenUpdating = eski
End Sub
ScreenUpdating
Formülünü incelemek için bir hücre seçin.
ABCD
1AyHedefGerçekleşenDurum
2Ocak50.00052.400Hedef tamam
3Şubat50.00047.800Hedefin altında
4Mart55.00058.100Hedef tamam
5Nisan55.00053.900Hedefin altında
6Mayıs60.00061.250Hedef tamam
7Haziran60.00057.600Hedefin altında
Aylık RaporExcelDepo v1.0.0
Makro bittiğinde Ocak için Hedef tamam, Şubat için Hedefin altında yazılır; hedefi tutturan aylar yeşil, tutturamayanlar kırmızı renkte görünür. Ekran yenilemesi döngü boyunca kapalı olduğundan her hücre için ayrı çizim yapılmaz; sonuç iş bitince tek seferde görüntülenir. Makronun sonunda eski değer geri yüklendiği için çağıran koda bir yan etki bırakılmaz.

Kullanırken dikkat edin​

  • Her zaman True olarak geri alın: Özelliği False yaptığınız her makroda, işlem sonunda değeri True yapın ya da başlangıçtaki değeri geri yazın. Hata ile yarıda kalan makro ekranı kapalı bırakabilir; bu durumda Excel donmuş gibi görünür.
  • Hata yönetimini ihmal etmeyin: On Error GoTo ile bir temizleme etiketi tanımlayıp geri yüklemeyi orada yapın. Başka bir makroyu çağıran makrolarda, değeri sabit True yapmak yerine başlangıçtaki değeri saklayıp geri yazmak çağıran kodun ayarını korur.
  • Yalnızca çizimi etkiler: ScreenUpdating hesaplamayı, olayları ya da uyarı kutularını kapatmaz. Hesaplama süresini kısaltmak için Application.Calculation, olay tetiklenmesini durdurmak için Application.EnableEvents özelliklerini ayrıca kullanmanız gerekir.
  • Hızın asıl kaynağı kodun yapısıdır: Ekran yenilemesini kapatmak yardımcı olur ancak Select ve Activate kullanmadan doğrudan nesnelere başvurmak ve aralıklara tek seferde dizi ile yazmak çoğu zaman daha büyük kazanç sağlar.
  • Kullanıcıya geri bildirim verin: Uzun süren makrolarda ekran donmuş göründüğünden, Application.StatusBar ile ilerleme bilgisi yazmayı düşünün. İş bitince durum çubuğunu False atayarak eski haline döndürün.
  • İlgili konular:
    • Application.Calculation: Hesaplama modunu elle ayarlama
    • Application.EnableEvents: Olayların tetiklenmesini açma ve kapama
    • Application.DisplayAlerts: Uyarı iletilerini kapatma
    • Application.StatusBar: Durum çubuğuna ilerleme metni yazma
    • On Error GoTo: Hata yönetimi ve temizleme etiketleri
    • Range.Value: Aralıklara toplu değer yazma
    • Select ve Activate: Gereksiz seçimlerden kaçınma
Ö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
12
İlk yayın
Güncel

Puanlar

0.00 Oylama 0 İnceleme
Geri
Üst