• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Proğresbar mesaj

  • Konbuyu başlatan Konbuyu başlatan akd
  • Başlangıç tarihi Başlangıç tarihi

akd

Destek Ekibi
Destek Ekibi
Katılım
14 Ağustos 2004
Mesajlar
1,119
Excel Vers. ve Dili
2003
Merhaba arkadaşlar,
Ben makro ile yapılan işleri kaydediyorum, kitap çok yüklü olduğu için kaydetmesi uzun sürüyor.
Bu bekleme zamanında bir proğresbar çıkıp mavi kutucuklarla saga doğru dolsa ve üstte lütfen proğram kaydilirken bekleyin diye yazı yazsa.
bunu nasıl yapabilirim.
Teşekkürler...
 
Fonksiyonlara sormuşsunuz.Fonksiyon olarak olmazda makro ile,
Toolbox üzerinde Sağ clik Additional Controls'dan Microsoft ProgressBar Control,Verison 6,0 işaretleyyin.Userform üzerine ProgressBar,Label1 ve CommandButton1 ekliyeceksin.
Formun İnitialize kısmına;
Kod:
Private Sub UserForm_Initialize()
Label1.Visible = False
ProgressBar1.Visible = False
End Sub
CommandButton1'in içine
Kod:
Private Sub CommandButton1_Click()
ProgressBar1.Visible = True
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
ProgressBar1.Visible = False
End Sub
Yazarsın.Butonu tıkladığında çalışacaktır.
Kod:
  Next i
Kısmından sonra sizin kodlarınızı yerleştirirsiniz.

Raider'in Güzel Bir Ã?rneğide var.Onuda İncelerseniz Daha iyi olur.
http://www.excel.web.tr/viewtopic.php?t=878
 
Yukarıda xxrt tarafından önerilen kodda, ProgressBar nesnesi kullanılmıştır ki yine aynı mesajdaki linkte de ifade ettiğim gibi, ProgressBar bir Visual Basic nesnesi olup, her bilgisayarda da mutlaka bulunur diye bir kayıt yoktur.

Bu nedenle, ProgressBar nesnesinin yüklü olduğu bir bilgisayarda o tip bir kod sorunsuz çalışırken, bu nesnenin olmadığı bir bilgisayarda kodlar hata verecektir.

İşin diğer kısmı ise.... akd tarafından sorulan orjinal soruda;

.......kitap çok yüklü olduğu için kaydetmesi uzun sürüyor.
Bu bekleme zamanında bir proğresbar çıkıp mavi kutucuklarla saga doğru dolsa ve üstte lütfen proğram kaydilirken bekleyin diye yazı yazsa.

denilmektedir. Halbuki yukarıda xxrt tarafından önerilen kod veya benzeri kodlarda ProgressBar nesnesi kullanırken, her zaman bir döngüye ihtiyaç vardır. Bu döngü içindeki bir değişkeninin değerini anlık olarak kontrol ederek ProgressBar nesnesine anlık olarak atayacağımız değeri belirleyip, ancak ondan sonra bunu da görsel olarak UserForm üzerinde gösterebiliriz.

Yani, orjinal soruda bahsedilen çalışma kitabının kaydedilmesi sırasında oluşan event (olay) sürecinde bize, içeriğini bilebildiğimiz bir değişken gereklidir. Bazı teorilerim var ama benim şimdilik kesin olarak keşfedebildiğim bir şey değil bu.

Evet, aslında orjinal soru çok masumca basit bir istek olarak algılanıyor......... ama yukarıda belirttiğim konulardan dolayı aslında bu iş çok da basit değil. Yani, gerçek kaydetme süresini bilemediğiniz bir dosyada, doğru çalışan bir ProgressBar nesnesi görüntülemek zordur.

Tabii yukarıda değindiğim gibi bir de bu nesnenin, dosyayı yükleyeceğiniz başka bir bilgisayarda olmadığı durumunu da göz önünde bulundurmak gerekli.

Sonuçta , spesifik olarak bu soru (dosyanın kaydedilmesi sırasında kullanıcını uyarılması) için ben aşağıda belirttiğim çalışmamı önerebilirim:

1) Gerekli nesneler:

- UserForm1
- Label1

2) ThisWorkbook modulüne yerleştirilecek kodlar:

Kod:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    UserForm1.Label1.Caption = "Lütfen bekleyiniz....."
    UserForm1.Show 0
    CheckSave
End Sub

3) UserForm1 modulüne yerleştirilecek kodlar:

Kod:
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode <> 1 Then Cancel = 1
End Sub

4) Dosyada oluşturulacak yeni bir modül içine yerleştirilecek kodlar:

Kod:
Sub CheckSave()
    DoEvents
    UserForm1.Label1.Caption = "Dosya kaydedildi....."
    Application.OnTime Now + TimeValue("00:00:03"), "RemForm"
End Sub
'
Sub RemForm()
Unload UserForm1
End Sub

5) UserForm'u hazırlayıp, kodları da yerleştirdikten sonra şimdi dosyayı kaydedin. Kaydetme sırasında, kullanıcı UserForm üzerindeki mesajla uyarılacaktır.

6) UserForm ile yapılan bu iş, dosyanın gerçek kaydedilme sürecinde eşzamanlı olarak çalışır. Orjinal soruda da istenilen buydu. Eğer bu denemeyi, kaydetme süresi uzun olan bir dosyada denerseniz ( bende öyle bir dosya yok :mrgreen: ) kodların çalışması hakkında daha net fikriniz olucaktır.

7) Yukarıdaki kodlar için Office2000 veya daha ileri bir versiyon şarttır.

Not: Sözkonusu çalışmam ekli dosyada yer almaktadır.
 
Sayın Hocam,örneğinizi İnceledim ve,
akd' Alıntı:
Ben makro ile yapılan işleri kaydediyorum, kitap çok yüklü olduğu için kaydetmesi uzun sürüyor.
kaydet -makro kelimelerinden,Çalışma Kitabında Userformla veri kaydettiğini varsaydım.
[color=red' Alıntı:
Raider[/color]]
Yani, orjinal soruda bahsedilen çalışma kitabının kaydedilmesi sırasında oluşan

akd 'e, Çalışma Dosyasının Kaydedilmesi sırasında ProgressBar olayı istiyorsa,hocamın Kodları geçerlidir.
 
@xxrt:

heh heh.... haklı olabilirsin walla. Soruyu bir daha okuyunca bu kaydet'in ne olduğunu anlamadım. Dosyanın save- kaydet edilmesi mi, verilerin dosyaya yazılması mı tam belli değil.

Neyse, her ikisi için de birer cevap var. :mrgreen:
 
Merhaba arkadaşlar,
sayın raiderin tespit ettigi gibi , belgenin kapanmadaki kapanma süresince proğresbarın çalışmasını istedim.
Ã?rnek belgede zaman biraz uzun tutulmuş kayıt bittikten sonra yine kısa bir süre form görüntüde kalıyor.
Sorunuza gelince userformdan sayfaya kayıt yaptırıyorum ve userform sürekli açık eliktirk kesilmelerinde belge kaydedilmedigi için bilgiler siliniyor. bende formdan sayfaya kayıtta kitabı kaydet yapıyorum, bu aradaki bekleme süresini proğresbarla renklendirmek istedim.
Rmazanınız mubarek olsun, selamlar saygılar...
 
Merhaba arkadaşlar,
Proğresbarı ekledim , gördügünüz gibi kayıt süresi ile proğresbarın çalışma süresi birbirini tutmuyor.
 
Kadir bey;

Yukarıdaki ilk mesajımı herhalde okurken pek fazla üzerinde düşünmediniz.

Gönderdiğiniz son dosyaya baktım. Hem benim hem de xxrt'nin kodlarını birleştirip karma bir dosya yapmışsınız. Sonuç ta da doğru çalışmasını bekliyorsunuz.

Bu mümkün değil ki.......

xxrt'nin kodları afaki olarak 1 den 1000' e kadar sayıp, anlık değeri ProgressBar nesnesine değer olarak atıyor. Bu döngünün sizin dosyanın kaydetme süresiyle tabii ki hiçbir ilgisi yok.

Eğer amacınız, dosyanın kaydetme sürecinde, Windows'un çakılmadığını kullanıcıya belirtmek ise, sadece benim önerdiğim kodu kullanın. Yukarıda da belirttiğim gibi, o kodlarla dosyanın gerrçek eş zamanlı kaydetme süresince kullanıcıya gerekli ikaz mesajı verilir.

O kodların eksik olan kısmı ise "mavi kutucuklar"ın olmaması ve sağa doğru ilerlememesi.

Varsın o da eksik olsun ama amacınıza ulaşın......
 
sayın raider merhaba
ben vermiş olduğunuz kodu kullandım hakkatten çok iyi elinize sağlık. bu kodu dış veri güncellemede nasıl kullanabilirim.

örneğin merkez bankasından günlük kurları alıyorum. düğmeye de
Activeworkbook.Refreshall kodunu ekledim. bu güncelleme süresince sizin makronuzu nasıl kullanabilirim. veriyi aldığım adres http://www.tcmb.gov.tr/kurlar/today.html
teşekkürler
 
@ozozkilic:

Aslında mantık aynı ama konu bu kez dış veri alma olunca bir kaç ilave daha yapmak gerekiyor.

1) Gerekli nesneler:

- UserForm1

- Label1

2) UserForm1 üzerine Label1 nesnesini yerleştirin,

3) UserForm1 modulüne yerleştirilecek kodlar:

Kod:
Private Sub UserForm_Activate()
    Me.SpecialEffect = fmSpecialEffectEtched
    Label1.Caption = "Lütfen bekleyiniz....."
End Sub
'
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode <> 1 Then Cancel = 1
End Sub

4) Yeni bir modül ilave ettikten sonra, bu modül içine yerleştirilecek kodlar:

Kod:
Sub TcmbGunlukKurlar()
    UserForm1.Show 0
    DoEvents
    ActiveSheet.UsedRange.Clear
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://www.tcmb.gov.tr/kurlar/today.html", Destination:=Range("A6"))
        .Name = "today"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = False
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlSpecifiedTables
        .WebFormatting = xlWebFormattingAll
        .WebTables = "1"
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .Refresh BackgroundQuery:=False
    End With
    ActiveSheet.QueryTables(1).Delete
    Call CheckData
End Sub
'
Sub CheckData()
    DoEvents
    UserForm1.Label1.Caption = "Veriler alındı....."
    Application.OnTime Now + TimeValue("00:00:01"), "RemForm"
End Sub
'
Sub RemForm()
    Unload UserForm1
        For i = 1 To ActiveSheet.Names.Count
            If InStr(1, ActiveSheet.Names(i).Name, "today") Then
                ActiveSheet.Names(i).Delete
            End If
        Next
End Sub

5) Þimdi TcmbGunlukKurlar isimli proseduru çalıştırdığınızda, aktif sayfaya TCMB' nin günlük kurları http://www.tcmb.gov.tr/kurlar/today.html sayfasından yüklenecek ve bu işler yapılırken ve sonuçlandığında kullanıcı ekra gelen UserForm ile eşzamanlı olarak ikaz edilecektir.

6) Yukarıdaki kodlar için Office2000 veya daha ileri bir versiyon şarttır.


7) Konu ile ilgili örnek dosya ektedir...
 
@ozozkilic:

Eğer bu dış veri alma ve güncelleme işinin örneğin 10 saniye de bir tekrarlanmasını ve güncellemeler yapılırken UserForm ile kullanıcının ikaz edilmesini isterseniz, bununla ilgili dosya ektedir.
 
Teşekkürler arkadaşlar...
 
e tabi konuyla siz ilgilenince biraz profesyonellik kokuyor. ellerine sağlık. bunu direkt olarak kendi excelimde kullanacağım. tabi iznin olursa. :dua:
:hey: :hey:
 
offf birde şu dosyalar kaybolmasaydı
 
Geri
Üst