|
|
Konu Araçları |
excelde, gösterme, işlemi, kalan, nesnesi, objesi, progressbar, süre, yaparken |
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 ObjesiProgressBar 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() ProgressBar1Max = 1000 ProgressBar1Min = 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 ProgressBar1Value = i Next i End Sub Kodları çalıştırın ve bir deneyin İLİŞKİLER ProgresBarValue ProgresBarMax 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 ProgressBarmax = ProgressBarvalue ProgresBarmax=100 olursa ProgressBarvalue= ? 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 ProgressBarvalue=i/10 olur Bunu sürekli hesaplamaktansa bu değeri standart hale getirip yazacak olursak sonuç şu şekilde olur ProgressBarvalue=(i/i döngüsünün son değeri)*ProgressBar’ın maksimum değeri yani; ProgressBarvalue=(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 Label1Caption = (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 Label1Caption = 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 ProgressBar1Value = (i / 1000) * 100 Label1Caption = Format(Int((i / 1000) * 100), "%0") DoEvents Next i End Sub Private Sub UserForm_Initialize() ProgressBar1Max = 100 ProgressBar1Min = 01 End Sub Kaynak |
Konu Araçları | Bu Konuda Ara |
Görünüm Modları |
|