Konu
:
Excel'de Progressbar Nesnesi / Bir İşlemi Yaparken Kalan Süre Gösterme Objesi
Yalnız Mesajı Göster
Excel'de Progressbar Nesnesi / Bir İşlemi Yaparken Kalan Süre Gösterme Objesi
08-11-2012
#
1
Prof. Dr. Sinsi
Excel'de Progressbar Nesnesi / Bir İşlemi Yaparken Kalan Süre Gösterme Objesi
ProgressBar Nesnesi / Bir İşlemi Yaparken Kalan Süre Gösterme Objesi
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
Kaynak
Prof. Dr. Sinsi
Kullanıcının Profilini Göster
Prof. Dr. Sinsi Kullanıcısının Web Sitesi
Prof. Dr. Sinsi tarafından gönderilmiş daha fazla mesaj bul