Proğresbar mesaj

akd

Destek Ekibi
Destek Ekibi
Katılım
14 Ağustos 2004
Mesajlar
1,114
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...
 
X

xxrt

Misafir
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
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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.
 
X

xxrt

Misafir
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.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@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:
 

akd

Destek Ekibi
Destek Ekibi
Katılım
14 Ağustos 2004
Mesajlar
1,114
Excel Vers. ve Dili
2003
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...
 

akd

Destek Ekibi
Destek Ekibi
Katılım
14 Ağustos 2004
Mesajlar
1,114
Excel Vers. ve Dili
2003
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.
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
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......
 
Katılım
19 Ağustos 2004
Mesajlar
40
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
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@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...
 

Haluk

Özel Üye
Katılım
7 Temmuz 2004
Mesajlar
12,406
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Altın Üyelik Bitiş Tarihi
@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.
 

akd

Destek Ekibi
Destek Ekibi
Katılım
14 Ağustos 2004
Mesajlar
1,114
Excel Vers. ve Dili
2003
Teşekkürler arkadaşlar...
 
Katılım
19 Ağustos 2004
Mesajlar
40
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:
 

Barons

Altın Üye
Katılım
14 Mayıs 2005
Mesajlar
967
Excel Vers. ve Dili
Microsoft Ofis 365
Altın Üyelik Bitiş Tarihi
06-01-2040
offf birde şu dosyalar kaybolmasaydı
 
Üst