Anasayfa | Akademik Forum | Sizden Gelenler | Sipariş
Menü Açıklamaları
Sorular - Cevaplar
Makaleler
Makrolar
Yerleşik İşlevler
Animasyonlar
Yumurtalar
Fonksiyonlar
MTK Programlar
ExcelCE
Dosya İndir
Neler Yaptık?
İletişim
Makaleler
ProgressBar Nesnesi - Cafer Ulusoy - 22.07.2004
Bir işlem yapılırken kalan sürenin ne kadar olduğunu gösteren görsel bir objedir. Bunun yanında bu zamanı yüzde değeri ile de göstermek mümkündür.

ProgresBar VBA’nın Toolbox penceresinin kontrolünde standart olarak bulunmaz. Bunu eklemek için Additional Controls penceresinden Microsoft ProgressBar’ın en son versiyonunu işaretleyin.


Şekil-1:
Microsoft ProgressBar’ı eklemek.

Daha sonra bir tane UserForm ekleyin ve UserForm’un üzerine bir tane ProgressBar bir tane de CommandButton çizin (Şekil-2)


Şekil-2:
UserFormu’n görüntüsü

Formun initialize olayına ProgressBar’ın maksimum ve minimum değerlerini şu kodu yazarak girelim.

Private Sub UserForm_Initialize()
    ProgressBar1.Max = 1000
    ProgressBar1.Min = 1
End Sub

CommandButton’nun click olayına da şu kodları yazalım.

Private Sub CommandButton1_Click()
    Dim i As Integer

   
For i = 1 To 1000
        ProgressBar1.Value = i
    Next i
End Sub

Kodları çalıştırın ve bir deneyin.


İLİŞKİLER

ProgresBar.Value
ProgresBar.Max

Burada şunu belirtmek isterim ProgressBar’ın maksimum değeri ile ProgressBar’ın valuesinin son sayısına eşit olduğunu görüyorsunuz. Genelde bir işlemin ne kadar süreceği %100 şeklinde gösterildiğinden ProgressBar’ın maksimum değeri genel olarak 100 belirlenir. Bu şekilde olursa ProgressBar’ın value'sinin son değerini 100’e tamamlamak gerekir.

Küçük bir örnek verip açıklamaya çalışırsak.

ProgressBar.max = ProgressBar.value

ProgresBar.max=100 olursa ProgressBar.value= ? kaç olmalıdır. İşte burada i döngüsünün son sayısını kaça bölmek gerekir ki sonuç ProgressBar’ın maksimum değerine eşit olsun aranır. Sonuç 10’dur. Ve ProgressBar’ın değeri ProgressBar.value=i/10 olur. Bunu sürekli hesaplamaktansa bu değeri standart hale getirip yazacak olursak sonuç şu şekilde olur.

ProgressBar.value=(i/i döngüsünün son değeri)*ProgressBar’ın maksimum değeri yani;

ProgressBar.value=(i/1000)*100

ProgressBar’ın valuesi ile ProgressBar’ın maksimum değeri arasındaki ilişkiyi anladıysak kodları değiştirin ve tekrar çalıştırın. Ekrana şu hata mesajını alacaksınız (Şekil 3).


Şekil-3
: ProgressBar minimum değer hatası

ProgressBar’ın Minimum değeri ile Döngünün Son Değeri ilişkisi


Şimdide ProgressBar’ın minimum değeri ile ilgili hata mesajını aldık. Çünkü ProgressBar’ın değerinin her artışı (i/1000)*100=0,1 dir. Oysaki bizim ProgressBar’ın minimum değeri 1 dir. Burada yapacağınız tek şey var ya maksimum değeri artırarak yada minimum değeri düşürerek  minimum değer ile maksimum değerin çarpımını döngünün son sayısına eşitlemek. Buradan şu sonuç çıkıyor.  ProgressBar’ın minimum değeri ile ProgressBar’ın maksimum değerinin çarpımı döngünün son sayısına eşit olmak zorunda. Yukarıda genellikle maksimum değer için 100 kullanıldığı için minimum değeri düşürelim. Kaç yazmamız gerekir. 100’ü 1000’e bölersek sonuç 0,1 olur. Buda ProgressBar’ın minimum değerine eşittir.


Sayısal Olarak Artışı Görmek


Artışı sayısal bir değer yani %100 cinsinden görmek için birkaç değişik yöntem mevcut Frame’nin Caption’u yada Label’in Caption’u kullanabiliriz. Biz Label’i kullanalım ve Userform’un üzerine bir Label çizelim. Döngünün içerisine şu kodu ekleyelim ve makroyu çalıştıralım.

Label1.Caption = (i / 1000) * 100

Dikkat ettiyseniz ProgressBar ilerlemiş fakat Label’in değeri artmamıştır. Sadece en sonda 100 değerini vermiştir. Aslında değer arttı fakat UserForm yenilenmediğinden bunu bize göstermedi. Bunun için ise Next i satırından bir önceki satıra DoEvents yazalım ve bir daha makroyu çalıştıralım. Hala bir eksiklik var değil mi? Hatta iki eksiklik var. Birincisi yüzdelik değer tam sayı değil. İkincisi % işareti yok. Bunların yapılması da çok basit. Tam sayıyı int kodu ile yüzdelik değeri de format ile halledeceğiz.

Label1.Caption = Format(Int((i / 1000) * 100), "%0")

İşte şimdi oldu artık yaptığımız işi hem sayısal hem de görsel olarak göreceğiz. En son ki kod eklememizden sonra tüm kodlarımız şu şekilde oldu.

Private Sub CommandButton1_Click()
  Dim i As Integer

 
For i = 1 To 1000
    ProgressBar1.Value = (i / 1000) * 100
    Label1.Caption = Format(Int((i / 1000) * 100), "%0")
    DoEvents
  Next i
End Sub

Private Sub UserForm_Initialize()
  ProgressBar1.Max = 100
  ProgressBar1.Min = 0.1
End Sub

Destek
M.ÖZTÜRK - Y.KARAMAN
Bu siteyi, "Hayatını çocuklarının Ahlâklı ve Dürüst yetişmesi için harcamış olan Cefakar ve Fedakar, Canım ANNEM'e adadım."
Copyright © 1998-2011 M. Temel Korkmaz - Tüm hakları saklıdır.