2015-07-10 5 views
5

Bir dizi komutun ne kadar sürdüğünü görüntülemek için aşağıdaki kodu kullanmaya çalışıyorum. Bu örnekte, "10" ya da benzer bir şeyle geri dönmesini bekledim.VBA - Bir alt sürenin ne kadar sürdüğü gösteriliyor

Bunun yerine geri birlikte gelir:

enter image description here

neler oluyor ve nasıl bunu doğru biçimlendirmek?

Sub timeyWimey() 

    Dim t1 As Date 
    Dim t2 As Date 
    Dim timeTaken As Date 

     t1 = Now() 
     Application.Wait (Now + TimeValue("0:00:10")) 
     t2 = Now() 

     timeTaken = t2 - t1 

     MsgBox timeTaken 

End Sub 

Düzenleme: bazı büyük Yanıtlar sonra

Final Kodu: in

Sub timeyWimey() 

    'Dim t1 As Double 
    'Dim t2 As Double 


     t1 = Now() 
     Application.Wait (Now + TimeValue("0:00:10")) 
     t2 = Now() 

     timeTaken = t2 - t1 

     MsgBox Format(timeTaken, "nn:ss.000") 

End Sub 

Sonuçlar:

enter image description here

BAM! Sorun çözüldü! Yardımınız için herkese teşekkürler!

cevap

2

Tarihler MS Access ve MS Excel içinde sayısal değer olarak saklanır. Hemen pencerenizde (Ctrl + G) ?Cdbl(now()) yazıyorsanız, böyle bir sayı alırsınız: 42195.5204050926.

Tam sayılar, 1899 Aralık 30'dan bu yana kaç gün geçtiğini gösterir ve ondalık, o günün ne kadarının geçtiğini gösterir.

timeTaken = 42195.5222337963 - 42195.5204050926 

Sadece birkaç dakika sonra bir kez daha ve sonra Now() kontrol Bu örnekte:

Yani kodunuzda temelde böyle bir şey söylüyor. Bu yüzden, 0.0018287037 ile bitti.

Şimdi bir Date değişken kullanılarak bu sizin örnekte olduğu gibi, temelde 30 Aralık 1899, 12:02:38 olup 0.0018287037 adresten ne zaman söylüyorum olduğunu göstermek için giderseniz.

görsel olarak hemen pencereye geri dönüyor ve ?cdate(0.0018287037) yazarak bu görebilir ve böyle bir sonuç elde edecektir: 12:02:38 AM. Sonra ?cdate(1.0018287037) yazabilirsiniz bir adım daha ileri götürmek için ve şöyle bir sonuç elde edecektir: 1899-12-31 12:02:38 AM

Yani durum basitçe sadece değiştirebilirsiniz:

MsgBox timeTaken 

için:

MsgBox Format(timeTaken, "nn:ss") 

Not: Bu cevap hala geçerli olsa da, ekran görüntüsünde "Excel" yazdığını fark etmemiştim.

+0

Teşekkür ederiz. Yani bu kesinlikle sorunu açıklıyor. Bunun için biraz düşüneyim. – timbram

+0

Peki, ondalık basamaktan sonraki sayıların biçimi (geçen geçerli günün miktarı) nasıl çalışır? Eğer betiğimi yeniden çalıştırırsam, herşeyi iki katına çıkarırsam, geçen sürenin (10 sn) 0.00005787036934635 olduğunu anlarım. Günün bir yüzdesi mi yoksa bir şey mi? – timbram

+0

Çiftimi cevabımın sonuna nasıl biçimlendirebileceğinizi ekledim. Ve '0.00005787036934635' temel olarak günün yüzdesidir. Örneğin, 0,5 olsaydı, günün yarısı geçtiği için saat 12: 00 olurdu. – Newd

1

Normalde, iki tarih arasındaki farkı hesaplamak için DateDiff function'u kullanırsınız; ancak, DateDiff'in size milisaniye vermeyeceği için, başka bir şey isteyeceğinizi düşünüyorum.Bunun yerine, aramayı sadece bir kaç saniye olan Timer() numaralı "Now" işlevine değiştirin (dikkatli olun, sadece gece yarısından bu yana geçen süreyi size verir, bu nedenle t2 - t1 negatif olabilir ve komutlarınız birkaç tane son bulursa) günler anlamlı bir sonuç almayacaksınız).

+0

Teşekkürler, bu benim amaçları için harika çalışacaktır. – timbram

1

Zamanlayıcı işlevini deneyebilirsiniz. Diğer cevapların da belirttiği gibi, bazı uyarılar olabilir.

Dim startTime As Double, endTime As Double 
startTime = Timer 

Application.Wait (Now + TimeValue("0:00:10")) 

endTime = Timer 
msgBox endTime - startTime 
+0

Nefret ediyorum ve onu seviyorum! :) Zamanla uğraşmaktan nefret ediyorum VBA'da bu kadar acı var! Yine de, zamanla uğraşmak HERHANGİ bir dilde karmaşık bir canavar olabilir! Bu yöntem çalışıyor ve şu anki işlemim için milisaniye hakkında endişelenmiyorum ve gece ya da başka bir şey üzerinde çalışmayacağım. – timbram

İlgili konular