Zaman sayacı

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
sayfa1 de a1 hücresine 0-60 sn arası sayma gerçekleştiren bir zaman sayacına ihtiyacım var. konuyla ilgili olarak yardımlarınızı rica ediyorum.




saygılarımla
 

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
Eğer yüksek performanslı bir sayaç gerekli değilse;

1) A1 hücresinde 0-60 saniye saydıktan sonra durması için:

Kod:
Sub Test1()
    Start = Timer
    Do
        DoEvents
        Finnish = Timer
        [a1] = Format(Finnish - Start, "00")
    Loop While Finnish - Start <= 60
End Sub
2) 60 saniye saydıktan sonra tekrar başlaması için;

Kod:
Sub Test2()
ResumeSub:
    Start = Timer
    Do
        DoEvents
        Finnish = Timer
        [a1] = Format(Finnish - Start, "00")
    Loop While Finnish - Start <= 60
    GoTo ResumeSub:
End Sub
3) Application.OnTime metodunu kullanabilirsiniz ki, zaten bu metodu biliyorsunuz.
 
Katılım
7 Temmuz 2004
Mesajlar
1,141
settimer ve killtimer ile api'li alternatif.

edit
artısı :
1. bir hücreyi edit ederken bile çalışır.
2. gettickcount apisi gibi windows un çekirdek sayacını kullandığı için daha güvenilirdir.

eksisi:
1. olmadık yerlerde excelin hata vermesi. hata kontrollerinin yapılması gerekir.
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,057
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Sn Raider, Sn Alpen

Ã?neri ve örneğinizden çok istifade ettiğimi belirterek,katkılarınızdan dolayı çok teşekkür ederim.


saygılarımla
 

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
@leventm;

Rica ederiz, kolay gelsin.

@ALPEN;

lem..... hazırladığın dosyaya baktım, güzel de...... sayaç çalışırken başka bir hücreye girip de birşeyler yazmaya kalkınca XL "küt" diye kapanıyor.

Epey bir uğraşarak, aşağıdaki gibi birşeyler yapınca şimdilik sorun çözüldü gibi görünüyor.
 

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
Haklısın.... senin dosyayı indirirken mesajındaki notlarını okumamışım.

Epey uğraşmanın sonunda "On error resume next" kısmı da son çare idi....

Senin koddaki sorun da aynı şekilde çözülüyor tabii....

Fakat "on error...." satırını koyunca, belki Office versiyon farkındandır ama, bahsettiğin "+" kısmı olmuyor. Yani hücrede "edit" modundayken sayaç çalışmıyor.
 
Katılım
7 Temmuz 2004
Mesajlar
1,141
özür,

ben yüksek bir interval ile çalıştığım için edit'te de çalışıyor gibime gelmiş.

ama şimdi başka bir şey keşfettim. excel design modda iken de çalışabiliyor api.
 

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
"Design Mod" ile kasttettiğin, VBE'de çalışırken mi ?

Sanırım, handle olarak settimer fonksiyonuna 0 gönderince, bunu caller'ın ve de dolayısıyle XL application'ın handle'ı olarak algılıyor. O zaman da application kapanana veya saçmalayana kadar görevini yerine getirmeye çalışıyor.

.... diye bir teori ürettim.

Senin değerli yorumlarını da bekleriz....
 

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
bunu caller'ın ve de dolayısıyle XL application'ın handle'ı olarak algılıyor.
dediysek de, XLMAIN'in handle'ını gönderince başka türlü saçmaladı bu sefer......

amma gerdi bu timer işi ha ....
 

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
Since the caller of a callback is not within your program, it is important that an error in the callback procedure not be propagated back to the caller. You can accomplish this by placing the On Error Resume Next statement at the beginning of the callback procedure.
Yukarıdaki alıntı XL'in help dosyasında "AddressOf Operator" başlıklı kısmında. MS amcalarımızın dediği gibi çuvallamamak için "On Error Resume Next " kullanmak gerekiyor. Başka yolu yok gibi...
 
Katılım
7 Temmuz 2004
Mesajlar
1,141
evet haklısın. sanırım handle verilmezse xl in ki gidiyor.
birde her settimer çağrıldığında hafızada yeni bir id ile yeni bir timer daha çalışmaya başlıyor (örnekteki başlat butonuna arka arkaya 40-50 kere basılınca net şekilde anlaşılıyor)
anlamadığım bir kod derlenmeden nasıl bir api'ye "gel bendeki şu prosedürü çalıştır" diyebilir. sanırım xl hafızada da olsa kodu çalıştırmadan önce derliyor sanırım çünkü design moda geçip (arkada timer çalışırken) apinin timer kodunda herhangi bir değişiklik yapıldığında bu değişiklikler uygulamaya yansımıyor.
 

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
birde her settimer çağrıldığında hafızada yeni bir id ile yeni bir timer daha çalışmaya başlıyor (örnekteki başlat butonuna arka arkaya 40-50 kere basılınca net şekilde anlaşılıyor)

Çok doğru:

Kod:
Sub StartIt()
    ID = SetTimer(0, 0, 1000, AddressOf RunMe)
    MsgBox ID
End Sub

Üretilen ID'leri bir şekilde "capture" yapamazsan da, timer'ı "kill" yapamıyorsun.

çünkü design moda geçip (arkada timer çalışırken) apinin timer kodunda herhangi bir değişiklik yapıldığında bu değişiklikler uygulamaya yansımıyor.
Çünkü bu sırada, daha önceden çağrılan fonksiyonun ID'si ile Timer o sırada çalışıyor. O ID'i yakalamadan timer'ı sonlandıramadığımız için de, çalışmaya devam ediyor.
 
Katılım
7 Ekim 2007
Mesajlar
3
Excel Vers. ve Dili
excel-2003
De&#287;erli Arkada&#351;lar.

Haz&#305;rlad&#305;&#287;&#305;n&#305;z &#231;al&#305;&#351;malar &#231;ok g&#252;zel olmu&#351;lar, hepiniz sa&#287;olun varolun.
Benim s&#246;yle bir say&#305;c&#305;ya ihtiyac&#305;m var. Ba&#287;l&#305; h&#252;crenin de&#287;eri >= 1 ise say&#305;c&#305; says&#305;n, ba&#287;l&#305; h&#252;crenin de&#287;eri =< 0 ise say&#305;c&#305; dursun. Sonra bu say&#305;c&#305;y&#305; h&#252;creye fonksiyon olarak girmek istiyorum "=TIMER(...)"
Amac&#305;m Excel'de zaman r&#246;lesi olu&#351;turmak.

Yard&#305;mc&#305; olursan&#305;z memnun olurum. Hepinize kolay gelsin.
sayg&#305;lar&#305;mla,
M.Akif Erdo&#287;an
 
Üst