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.
Özelliğin parametresi yoktur; atanan ya da okunan değer Boolean türündedir:
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.
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.
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.
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.
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
- 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.
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.
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
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar |
| 2 | Kalem | 120 | 4,50 | 540,00 |
| 3 | Defter | 80 | 18,00 | 1.440,00 |
| 4 | Silgi | 200 | 3,00 | 600,00 |
| 5 | Cetvel | 60 | 7,50 | 450,00 |
| 6 | Dosya | 45 | 22,00 | 990,00 |
| 7 | Kağıt Paketi | 30 | 95,00 | 2.850,00 |
SatışlarExcelDepo v1.0.0
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.| A | B | |
|---|---|---|
| 1 | Adım | ScreenUpdating değeri |
| 2 | Makro başlangıcı | DOĞRU |
| 3 | Kapatıldıktan sonra | YANLIŞ |
| 4 | Geri yüklendikten sonra | DOĞRU |
Durum TakibiExcelDepo v1.0.0
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.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Ay | Hedef | Gerçekleşen | Durum |
| 2 | Ocak | 50.000 | 52.400 | Hedef tamam |
| 3 | Şubat | 50.000 | 47.800 | Hedefin altında |
| 4 | Mart | 55.000 | 58.100 | Hedef tamam |
| 5 | Nisan | 55.000 | 53.900 | Hedefin altında |
| 6 | Mayıs | 60.000 | 61.250 | Hedef tamam |
| 7 | Haziran | 60.000 | 57.600 | Hedefin altında |
Aylık RaporExcelDepo v1.0.0
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