Genel Bakış
StatusBar (Application.StatusBar), Excel penceresinin sol altındaki durum çubuğunda görünen metni okumanızı ya da değiştirmenizi sağlayan Application nesnesi özelliğidir. Uzun süren makrolarda kullanıcıya ilerleme durumunu, işlem adımını ya da bilgi iletisini, kullanıcıyı durdurup tıklama istemeden göstermek için kullanılır. Yazdığınız ileti siz geri almadıkça çubukta kalır; bu yüzden makro bitince çubuğu Excel'e geri vermeniz gerekir.
Makro her satırın tutarını D sütununa yazar; örneğin ilk satırın tutarı 5.400,00 olur. Döngü sürerken durum çubuğunda sırayla ilerleme iletileri görünür. Döngü bittiğinde çubuktaki son ileti E2 hücresine kaydedilir: Tutar hesaplanıyor: 6 / 6. Ardından Application.StatusBar = False satırı çubuğu Excel'e geri verir; bu satır olmasa son ileti ekranda kalmaya devam ederdi.
Makro her şehir için Ocak, Şubat ve Mart toplamını E sütununa yazar; İstanbul için sonuç 375.000 olur. F sütunundaki iletiler döngü sırasında durum çubuğunda görünen metni gösterir: ilk satırda [##--------] İstanbul işlendi, 20%, son satırda [##########] Antalya işlendi, 100%. Metindeki # ve - karakterleri kaç adımın tamamlandığını gösterir. Ekran güncellemesi kapalı olsa bile durum çubuğu güncellenmeye devam eder. Temizle etiketinin altındaki iki satır, makro normal bitse de hata verse de çubuğu Excel'e geri verir ve ekran güncellemesini açar.
Birinci adımda çubuk Excel'e verildiği için okunan değer YANLIŞ, veri türü String olur. İkinci adımda çubuğa metin yazıldığından okunan değer Rapor hazırlanıyor..., veri türü String olur. Üçüncü adımda False atanınca değer yeniden YANLIŞ, tür String olur. Bu davranıştan yararlanarak makronuz çubuğun başlangıç değerini bir değişkende saklayabilir ve iş bitince aynı değeri geri yükleyebilir.
Söz dizimi
StatusBar özelliği Application nesnesine aittir. Hem değer atamak hem de mevcut değeri okumak için kullanılır:
VBA
4 satır
Application.StatusBar = "Görüntülenecek metin"
Application.StatusBar = False
değişken = Application.StatusBar
Application.DisplayStatusBar = True
- Application: Excel uygulamasını temsil eden nesne. Excel içindeki VBA kodunda genellikle bu şekilde açıkça yazılır.
- Metin (String): Durum çubuğunda gösterilecek ileti. Zorunludur; atama yapılırken bir metin ya da False verilmelidir.
- False: Durum çubuğunun denetimini Excel'e geri verir; Excel kendi iletilerini (Hazır, Hesaplanıyor gibi) yeniden gösterir. True atanamaz.
- DisplayStatusBar: İsteğe bağlı olarak birlikte kullanılan ayrı bir özelliktir; durum çubuğunun görünür olup olmadığını belirler. Çubuk gizliyse StatusBar ile yazdığınız ileti görünmez.
Dönüş değeri ve geri verme
StatusBar özelliğini okuduğunuzda iki durumdan biriyle karşılaşırsınız:- String: Kodla bir ileti yazılmışsa o metin döner.
- False: Çubuk Excel'in denetimindeyse, yani kodla ileti yazılmamışsa ya da önceki ileti False ile kaldırılmışsa False değeri (hücrede YANLIŞ) döner. Örnek 3'te bu sonucun veri türü sütununda String göründüğüne dikkat edin.
Ne zaman kullanılır
Durum çubuğu iletisi, MsgBox gibi kullanıcıdan onay beklemez; makro kesintisiz çalışmaya devam eder. Bu nedenle şu işlerde tercih edilir:- İlerleme göstermek: Bir döngüde "12 / 200 satır işlendi" gibi sayaç yazmak.
- Adım bildirmek: "Veriler okunuyor...", "Rapor kaydediliyor..." gibi aşamaları göstermek.
- Ekran güncellemesi kapalıyken geri bildirim vermek: Application.ScreenUpdating özelliği False iken sayfa donmuş gibi görünür; çubuktaki ileti makronun çalıştığını gösterir.
1. Döngüde ilerleme iletisi
Sipariş listesinde her satırın tutarı adet ile birim fiyatın çarpımı olarak hesaplanır. Makro her satırda durum çubuğuna "kaçıncı satır" iletisini yazar, son iletiyi E2 hücresine kaydeder ve çubuğu Excel'e geri verir. Kodu standart bir modüle (Ekle > Modül) yapıştırın.
VBA
22 satır
Option Explicit
Sub SiparisTutarHesapla()
Dim ws As Worksheet
Dim son As Long, i As Long
Set ws = ActiveSheet
son = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To son
' Tutar = Adet x Birim Fiyat
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value * ws.Cells(i, 3).Value
' Durum çubuğuna ilerleme iletisi yaz
Application.StatusBar = "Tutar hesaplanıyor: " & (i - 1) & " / " & (son - 1)
Next i
' Son iletiyi sayfaya kaydet (yalnızca örnek amaçlı)
ws.Range("E2").Value = Application.StatusBar
' Durum çubuğunu Excel'e geri ver
Application.StatusBar = False
End Sub
StatusBar
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Ürün | Adet | Birim Fiyat | Tutar | Son İleti |
| 2 | Klavye | 12 | 450,00 | 5.400,00 | Tutar hesaplanıyor: 6 / 6 |
| 3 | Fare | 25 | 180,00 | 4.500,00 | |
| 4 | Monitör | 5 | 3.200,00 | 16.000,00 | |
| 5 | Kulaklık | 18 | 650,00 | 11.700,00 | |
| 6 | Yazıcı | 3 | 4.100,00 | 12.300,00 | |
| 7 | Webcam | 9 | 720,00 | 6.480,00 |
Sipariş ListesiExcelDepo v1.0.0
2. İlerleme çubuğu ve hata durumunda temizlik
Şehirlerin üç aylık satışları toplanırken durum çubuğunda metinle çizilmiş bir ilerleme çubuğu ve yüzde gösterilir. Ekran güncellemesi kapatılır; hata olsa da olmasa da çubuk ve ekran güncellemesi son bölümde eski haline getirilir. Her adımın iletisi F sütununa da yazılır. Kodu standart bir modüle yapıştırın.
VBA
29 satır
Option Explicit
Sub SehirToplamlariniHesapla()
Dim ws As Worksheet
Dim i As Long, n As Long, k As Long
Set ws = ActiveSheet
n = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row - 1 ' veri satırı sayısı
On Error GoTo Temizle
Application.ScreenUpdating = False
For i = 2 To n + 1
' Ocak-Mart toplamını E sütununa yaz
ws.Cells(i, 5).Value = Application.WorksheetFunction.Sum(ws.Range(ws.Cells(i, 2), ws.Cells(i, 4)))
' 10 karakterlik metin tabanlı ilerleme çubuğu
k = Int((i - 1) / n * 10)
Application.StatusBar = "[" & String(k, "#") & String(10 - k, "-") & "] " & ws.Cells(i, 1).Value & " işlendi, " & Format((i - 1) / n, "0%")
' İletiyi F sütununa kaydet (yalnızca örnek amaçlı)
ws.Cells(i, 6).Value = Application.StatusBar
Next i
Temizle:
' Hata olsa da olmasa da burada çubuk ve ekran eski haline döner
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
StatusBar
Formülünü incelemek için bir hücre seçin.| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Şehir | Ocak | Şubat | Mart | Toplam | İlerleme |
| 2 | İstanbul | 125.000 | 118.000 | 132.000 | 375.000 | (##--------) İstanbul işlendi, 20% |
| 3 | Ankara | 84.000 | 79.500 | 91.000 | 254.500 | (####------) Ankara işlendi, 40% |
| 4 | İzmir | 67.000 | 71.000 | 69.500 | 207.500 | (######----) İzmir işlendi, 60% |
| 5 | Bursa | 43.000 | 45.500 | 47.000 | 135.500 | (########--) Bursa işlendi, 80% |
| 6 | Antalya | 38.000 | 41.000 | 52.000 | 131.000 | (##########) Antalya işlendi, 100% |
Şehir SatışlarıExcelDepo v1.0.0
3. StatusBar değerini okuma ve veri türü
Bu örnek, çubuğa ileti yazılmadan önce ve sonra StatusBar özelliğinin ne döndürdüğünü ve veri türünü sayfaya yazar. Böylece çubuk Excel'e verildiğinde okunan YANLIŞ değeri ile metin yazıldığında okunan ileti yan yana görülür; veri türü sütununda ise üç adımda da String görünür. Kodu standart bir modüle yapıştırın.
VBA
21 satır
Option Explicit
Sub DurumCubuguDegeriniDene()
Dim ws As Worksheet
Set ws = ActiveSheet
' 1. Çubuğu Excel'e ver ve değeri oku
Application.StatusBar = False
ws.Range("C2").Value = Application.StatusBar
ws.Range("D2").Value = TypeName(Application.StatusBar)
' 2. Çubuğa ileti yaz ve değeri oku
Application.StatusBar = "Rapor hazırlanıyor..."
ws.Range("C3").Value = Application.StatusBar
ws.Range("D3").Value = TypeName(Application.StatusBar)
' 3. İletiyi kaldır ve yeniden oku
Application.StatusBar = False
ws.Range("C4").Value = Application.StatusBar
ws.Range("D4").Value = TypeName(Application.StatusBar)
End Sub
StatusBar
Formülünü incelemek için bir hücre seçin.| A | B | C | D | |
|---|---|---|---|---|
| 1 | Adım | İşlem | Sonuç | Veri Türü |
| 2 | 1 | StatusBar False yapıldı | YANLIŞ | String |
| 3 | 2 | Metin yazıldı | Rapor hazırlanıyor... | String |
| 4 | 3 | İleti kaldırıldı | YANLIŞ | String |
Durum DenetimiExcelDepo v1.0.0
Kullanırken dikkat edin
- Çubuğu her zaman geri verin: Makro bittiğinde ya da hata verdiğinde Application.StatusBar = False çalışmazsa son ileti çubukta takılı kalır ve Excel kendi iletilerini göstermez. Hata olasılığı olan makrolarda On Error GoTo ile bir temizlik bölümü kurun ve çubuğu orada sıfırlayın.
- Uygulama düzeyinde bir ayardır: StatusBar belirli bir çalışma kitabına değil Excel uygulamasına aittir. Açık tüm çalışma kitaplarında aynı ileti görünür; kitap değiştirseniz de ileti kalır.
- DisplayStatusBar kapalıysa ileti görünmez: Durum çubuğu Görünüm ayarlarından ya da Application.DisplayStatusBar = False ile gizlenmişse yazdığınız ileti kullanıcıya ulaşmaz. İleti göstermeden önce DisplayStatusBar özelliğini True yapmak ve gerekiyorsa eski değerini saklayıp sonra geri yüklemek iyi bir uygulamadır.
- Çok uzun iletiler kesilebilir: Çubuğun genişliği pencere boyutuna bağlıdır; çok uzun metinler sığmadığı için kesilerek görünebilir. İletiyi kısa tutun ve en önemli bilgiyi başa yazın.
- Her döngü adımında yazmak yavaşlatabilir: Yüz binlerce satırlık döngülerde her adımda çubuğu güncellemek makroyu gözle görülür biçimde yavaşlatabilir. İletiyi her 100 ya da 1000 adımda bir güncellemek için Mod işlecinden yararlanabilirsiniz.
- Kullanıcıya zorunlu bilgi için uygun değildir: Çubuk iletisini kullanıcı fark etmeyebilir. Mutlaka okunması gereken uyarılar ya da karar gerektiren durumlar için MsgBox kullanın; durum çubuğunu yalnızca bilgilendirme ve ilerleme amacıyla kullanın.
- İlgili konular:
- Application.DisplayStatusBar: Durum çubuğunu gösterir ya da gizler.
- Application.ScreenUpdating: Makro sırasında ekran yenilemesini kapatarak hızı artırır.
- Application.Cursor: Fare imlecinin görünümünü (bekleme simgesi gibi) değiştirir.
- Application.EnableEvents: Olayların tetiklenmesini açar ya da kapatır.
- Application.Calculation: Hesaplama modunu belirler.
- MsgBox: Kullanıcıya onay gerektiren iletiler gösterir.
- For...Next ve Mod: Döngülerde ilerlemeyi belirli aralıklarla bildirmek için kullanılır.
- On Error GoTo: Hata durumunda temizlik kodunu çalıştırmayı sağlar.