• DİKKAT

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

Zaman sayacı

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,060
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
 
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.
 
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.
 
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
 
@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.
 
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.
 
ö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.
 
"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....
 
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 ....
 
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...
 
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.
 
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.
 
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
 
Geri
Üst