Excel VBA'da, Now işlevi, bilgisayarınızın sistem saatine göre geçerli tarih ve saati döndüren yerleşik bir tarih ve saat işlevidir. VBA kodunuz içinde tarih ve saat değerlerini kaydederken veya düzenlerken kullanışlıdır.
Aşağıdaki örneğe bakın:

VBA Now ile geçerli saati yazdırmak için bir alt rutin bildirin. Immediate sekmesinde yazdırılır. VBA Now Biçimi varsayılan olarak “dd-mm-yyyy hh:mm:ss” olarak yazdırılır.

- VBA Now fonksiyonu bilgisayarınızın sistem saatine göre geçerli tarih ve saati alır. Geçerli tarih ve saati saniyeye kadar içeren bir Tarih veri değeri döndürür.
- Now'ın sonucu bir değişkene atanabilir, bir hücrede görüntülenebilir veya VBA kodu içinde hesaplamalar için kullanılabilir.
- Now fonksiyonunun sonucunu, Biçim fonksiyonunu kullanarak tarih ve saati belirli bir biçimde görüntüleyecek şekilde biçimlendirebilirsiniz.
- Now(), kayıt günlükleri, zaman aralıklarını ölçme veya zamana duyarlı hesaplamalar gibi tarih ve saat bileşenleriyle çalışırken yaygın olarak kullanılır.
Sözdizimi
VBA Now'ın sözdizimi aşağıda gösterilmiştir:
Now()
Nerede,
Now(), “Date” veri türündeki bir değişkene atanmış VBA fonksiyonudur veya VBA Now'dan String'e dönüştürülebilir. Bu nedenle, “String” ve “Date” veri türleri birbirinin yerine kullanılabilir. Bu fonksiyon için argüman yoktur.
Excel VBA Now Fonksiyonu Nasıl Kullanılır?
VBA Now'ın uygulanabileceği bir örnek oluşturmak için aşağıdaki adımları izleyin:
- Bir Excel Çalışma Kitabı açın. Araç Çubuğu'ndaki Geliştirici bölümüne gidin.

Geliştirici bölümündeki “Visual Basic” simgesine tıklayın. VBA kod düzenleyicisini açar.
Editörde “Ekle”ye tıklayın ve VBA Alt Rutinleri/fonksiyonlarını oluşturmak ve düzenlemek için yeni bir Modül oluşturmak üzere “Modül”ü seçin.
- Excel VBA'da saati yazdırarak dijital saat oluşturmak için bir alt prosedür oluşturun.

- VBA'da Do Döngüsü Başlatma.

- Do Döngüsü içerisinde, geçerli saati “A1” hücresine yazdırın.

- Bekleme işlevini kullanarak döngüyü 1 saniye geciktirin. Sonra, sürekli olarak döngüye alın.

Kod:
Sub UpdateDigitalClock()
Do
ThisWorkbook.Sheets(“NOW_Use”).Range(“A1”).Value = Now
Application.Wait Now + TimeValue(“00:00:01”)
Loop
End Sub - Yukarıdaki alt rutini çalıştırın. “NOW_Use”a gidin ve çıktıyı görüntüleyin.

Bir dakika sonra,
Bir dakika sonra,
Bu basit örnek bize VBA Now fonksiyonunun nasıl ve nerede kullanılacağını gösteriyor.
Excel VBA'da ŞİMDİ İşlevinin Örnekleri
Now()'ın gerçek yaşam uygulamalarında pratik olarak kullanılabileceği bazı ilginç örneklere bakalım.
Örnek 1
Değişiklikleri takip etmek için belirli bir zamanda değişiklikleri kaydetmeniz gereken bir örneği ele alalım. Bu, Excel VBA'daki Now işlevi kullanılarak yapılabilir . Aşağıdaki adımları izleyerek bunu nasıl yapabileceğimizi görelim:
- Adım 1: Değişiklikleri kaydetmek istediğiniz sayfaya sağ tıklayın.

Açılır menüde “Kodu Görüntüle”ye tıklayın. Bu, belirli sayfa için özel olarak VBA Düzenleyicisini açacaktır.

- Adım 2: Bir Range değişkeni için özel bir alt rutin bildirin.

- Adım 3: Hücre değerini depolamak için bir aralık bildirin. Hücre değeri değişirse, yeni bir Now fonksiyonu yazdıracaktır.

- Adım 4: Tercih ettiğiniz Hücre Aralığını belirtin.

- Adım 5: Hücre değerlerinin boş olup olmadığını veya geçerli değerin boş olup olmadığını kontrol etmek için bir If ifadesi başlatın; Now fonksiyonu “C1” hücresine yazdırılır.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim TargetCell As Range
Set TargetCell = Me.Range(“B1”)
If Not Intersect(Target, TargetCell) Is Nothing And TargetCell.Value <> “” Then
Me.Range(“C1”).Value = Now
End If
End Sub
- Adım 6: Çalışma sayfasına geri dönün ve çıktıyı görüntüleyin.

Eğer değerler bir süre sonra değiştirilirse,

Bununla birlikte, belirli bir zamanda yapılan değişiklikleri kaydeden bir kayıt uyguladık.
Örnek 2
Burada, bir Userform'daki bir butona iki kez tıklanması arasındaki süreyi ölçeceğiz.
- Adım 1: “Userform”u seçerek Excel VBA’da bir Userform oluşturun .

Özelleştirmeye başlayabileceğiniz yeni, boş bir Userform oluşturur.

Bu UserForm'u isteğinize göre düzenleyin.

- Adım 2: Bir Etiket oluşturun ve özelliklerini özelleştirin.


Artık UserForm aşağıdaki gibi görünecektir:

- Adım 3: Yukarıdaki fonksiyonu çağırarak VBA Bugün artı 7 gün uygulayan bir alt prosedür başlatın.


Komut Düğmesini düzenleyip özelleştirdikten sonra, UserForm şu anda şu şekilde görünüyor:

Düğmeye çift tıklayarak VBA düzenleyicisini açabilir ve düğmenin işlevlerini tanımlayabilirsiniz.

- Adım 4: Fonksiyonun dışında bir “Date” değişkeni bildirin. Bu, birçok VBA düğmesi tıklaması arasında değerini koruması içindir.

Adım 5: Yukarıdaki değişken için herhangi bir değerin bildirilip bildirilmediğini kontrol edin. Bildirilmemişse, VBA ile atayın. Şimdi zamanı.

Adım 6: Kullanıcıya zamanlayıcının başlatıldığına dair bir mesaj ekleyin.

Adım 7: Else bloğunda, düğmeye ikinci kez tıklandıktan sonra geçerli saati saklamak için başka bir Tarih değişkeni tanımlayın.

- Adım 8: Mevcut ve önceki başlangıç saatleri arasındaki farkı bulmak için yukarıda belirtilen değişkeni atayın.

- Adım 9: Bir mesaj kutusu fonksiyonunda geçen süreyi yazdırın ve başlangıç zamanını 0 olarak ayarlayın. Ardından, If-Else ifadesi bloğunu sonlandırın.

Kod:
UserForm'da
Başlangıç Zamanını Tarih Olarak Kıs
Dim StartTime As Date
Private Sub CommandButton1_Click()
If StartTime = 0 Then
StartTime = Now
MsgBox “Timer started!”
Else
Dim ElapsedTime As Date
ElapsedTime = Now – StartTime
MsgBox “Time elapsed: ” & Format(ElapsedTime, “hh:mm:ss”)
StartTime = 0
End If
End Sub
- Adım 10: Programı çalıştırmak için “F5” tuşuna basın. Oluşturduğunuz UserForm gösterilecek ve onu görüntüleyebilirsiniz.

Butona bir kez tıklanır.

Başka bir zaman tıklayın.

Her iki tıklama arasında yaklaşık 46 saniye geçtiğini görebiliyoruz.
VBA'da Zamanlayıcı Fonksiyonuna Alternatif
VBA'daki Timer işlevi gece yarısından bu yana geçen saniye sayısını döndürür. Ancak, daha yüksek çözünürlüklü bir zamanlayıcıya veya milisaniyeleri veya mikrosaniyeleri ölçen bir zamanlayıcıya ihtiyacınız varsa, daha yüksek hassasiyetli zamanlama için GetTickCount adlı Windows API işlevini veya QueryPerformanceCounter işlevini kullanma gibi diğer yöntemleri kullanabilirsiniz.
Diğer bilinen alternatiflerden bazıları şunlardır:
- Now işlevi: Now işlevi geçerli tarih ve saati döndürür. Alt prosedürde belirtilen işlemi tamamlamak için kodun tükettiği zamanı izlemek için Timer işlevine alternatif olarak kullanılabilir.
- SetTimer ve KillTimer fonksiyonları: Bunlar, .NET kullanmadan Application.OnTime metoduna alternatif olarak kullanılabilen Win32 API fonksiyonlarıdır. SetTimer fonksiyonu belirtilen milisaniye sayısı için bir zamanlayıcı ayarlarken, KillTimer fonksiyonu belirtilen zamanlayıcıyı yok eder.
- Bekleme ve Uyku işlevleri: Bunlar, VBA kod yürütmesini duraklatmak veya geciktirmek için kullanılabilen VBA işlevleridir . Bekleme işlevi, kod yürütmesini belirtilen saniye sayısı boyunca korurken, VBA'daki Uyku işlevi, kodun yürütülmesini belirtilen milisaniye sayısı boyunca askıya alır. Bu işlevler, kod yürütmesinde gecikme oluşturmak için yararlı olabilir.
- Özel işlevler: Alt prosedürde belirtilen işlemi tamamlamak için kodun tükettiği zamanı izlemek üzere VBA'da özel işlevler oluşturabilirsiniz. Örneğin, kod yürütmenin başlangıç saati ile bitiş saati arasındaki farkı döndüren bir işlev oluşturabilirsiniz.
Dikkat Edilmesi Gereken Önemli Noktalar
- Bilgisayarınızın tarih ve saat ayarlarının doğru olduğundan emin olun çünkü Now() bu ayarlara dayanır.
- Now sonucunu depoladığınız değişkenlerinizin ve hücrelerinizin, bilgileri doğru şekilde görüntülemek için tarih/saat veri türleri olarak biçimlendirildiğinden emin olun.
- Now fonksiyonu çağrıldığında tarih ve saati yakalar. Sonucu bir değişkende saklarsanız, otomatik olarak güncellenmez.
- Now fonksiyonu ikinci düzey hassasiyet sağlar.
- Excel'de, Şimdi'yi bir hücreye yerleştirirseniz, çalışma sayfası yeniden hesaplandığında güncellenir.
- Bu fonksiyon, olay zaman damgalarını kaydetme, gerçek zamanlı ilerlemeyi izleme ve zaman tabanlı mantığı gerçekleştirme yolunu sağlar.
