![]() |
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. http://frmsinsi.net/images/forumsins...sinsi.net_.jpg Ş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) http://frmsinsi.net/images/forumsins...sinsi.net_.jpg Ş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). http://frmsinsi.net/images/forumsins...sinsi.net_.jpg Ş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 |
Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.