Özellik ikonu

StatusBar

İndirme izni yok

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.

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.
Bu davranış sayesinde makronuz çubuğu değiştirmeden önce eski iletiyi saklayabilir, iş bitince eski değeri geri yükleyebilir. Eski değer False ise yine False atamanız yeterlidir.

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.
İletiyi yazan her makro, işini bitirdiğinde (ve hata durumunda) çubuğu False ile Excel'e geri vermelidir.

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.
ABCDE
1ÜrünAdetBirim FiyatTutarSon İleti
2Klavye12450,005.400,00Tutar hesaplanıyor: 6 / 6
3Fare25180,004.500,00
4Monitör53.200,0016.000,00
5Kulaklık18650,0011.700,00
6Yazıcı34.100,0012.300,00
7Webcam9720,006.480,00
Sipariş ListesiExcelDepo v1.0.0
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.

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.
ABCDEF
1ŞehirOcakŞubatMartToplamİlerleme
2İstanbul125.000118.000132.000375.000(##--------) İstanbul işlendi, 20%
3Ankara84.00079.50091.000254.500(####------) Ankara işlendi, 40%
4İzmir67.00071.00069.500207.500(######----) İzmir işlendi, 60%
5Bursa43.00045.50047.000135.500(########--) Bursa işlendi, 80%
6Antalya38.00041.00052.000131.000(##########) Antalya işlendi, 100%
Şehir SatışlarıExcelDepo v1.0.0
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.

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.
ABCD
1AdımİşlemSonuçVeri Türü
21StatusBar False yapıldıYANLIŞString
32Metin yazıldıRapor hazırlanıyor...String
43İleti kaldırıldıYANLIŞString
Durum DenetimiExcelDepo v1.0.0
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.

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.
Ö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