Çözüldü Tarihle ilgili kod satırındaki CDate nedir

  • Konuyu başlatan Konuyu başlatan hakki83
  • Başlangıç tarihi Başlangıç tarihi

hakki83

Site Üyesi
Excel Versiyonu
Excel 2016
Excel Sürümü
64 Bit
Excel Dili
Türkçe
Merhabalar

Aşağıdaki satırın ne olduğunu biliyorum, fakat bazı kodlarda bu satırı
If Date >= CDate("01.01.2022") Then Exit Sub

olarak görüyorum. Bazen de
If Date >= ("01.01.2022") Then Exit Sub

şeklinde.

İkisinde ortak olmayan CDate ifadesinin anlamı nedir, CDate olunca ya da olmayınca fark nedir? Teşekkürler.
 
Cep telefonundayım.

Her iki ibareyi MsgBox ile ekrana getirerek bir kontrol yapın bakalım.
Yani bu if satırlarının yerine

MsgBox Date >= CDate("01.01.2022")
MsgBox Date >= ("01.01.2022")

satırlarını ekleyip, ekrana gelen sonuçları karşılaştırın. Tabi aynı şekilde tarihleri değiştirerek de işlem yapsanız iyi olur.

.
 
Cep telefonundayım.

Her iki ibareyi MsgBox ile ekrana getirerek bir kontrol yapın bakalım.
Yani bu if satırlarının yerine

MsgBox Date >= CDate("01.01.2022")
MsgBox Date >= ("01.01.2022")

satırlarını ekleyip, ekrana gelen sonuçları karşılaştırın. Tabi aynı şekilde tarihleri değiştirerek de işlem yapsanız iyi olur.

.
Ömer Baran hocam denedim

İkisinin tarihlerini 2020 yaptım
İkisi de True mesajını verdi.

İkisinin tarihlerini 2022 yaptım
CDate’li olan False, diğeri True mesajını verdi.

Yani kodlarda girdiğimiz tarihler, şimdiki tarihten küçük olursa ikisi de True,
Girdiğimiz tarihler şimdiki tarihten büyük olursa, sadece CDate False uyarısı verdi. Fakat buradan çıkacak sonuç nedir?
 
Size ne olduğunu yazmak yerine şunu önermek isterim.

Immediate Window penceresini aktif edip, Debug.Print Date ve Debug.Print CDate("01.01.2022") yaparak çıktılarını görmeniz mantığını çözmek için yol gösterecektir.
Sayın hocam anlamaya çalışıyorum, ama anlayamadım, daha önce immediate window kullanmadım. Keşke biraz detaylı anlatsaydınız.
Kodların başına sub yazacak mıyım?
Çıktı almaktan kastınız nedir?
İmmediate makro düğmesiyle mi çalışıyor?
Eğer öyleyse önerdiğiniz ilk satırı yazarken (debug satırı) neden hata verdi?
 
Immediate Window penceresini aktif ettiyseniz,
  1. Verdiğim Debug.Print Cdate şeklindeki değeri kod satırında, sonucun ne olduğunu görmek istediğiniz kod satırının hemen altına koyun.
  2. Sonra F8 ile kodlarınızı adımlayın.
  3. Debug.Print satırını geçtikten sonra Immediate Window penceresindeki oluşan değeri gözlemleyin.
Ömer abinin benden hemen önce yazdığı MsgBox'ta veri göstermenin bir tık farklı versiyonudur denebilir.
 
Immediate Window penceresini aktif ettiyseniz,
  1. Verdiğim Debug.Print Cdate şeklindeki değeri kod satırında, sonucun ne olduğunu görmek istediğiniz kod satırının hemen altına koyun.
  2. Sonra F8 ile kodlarınızı adımlayın.
  3. Debug.Print satırını geçtikten sonra Immediate Window penceresindeki oluşan değeri gözlemleyin.
Ömer abinin benden hemen önce yazdığı MsgBox'ta veri göstermenin bir tık farklı versiyonudur denebilir.
Hocam örnek dosya üzerinden gidersek sanırım daha iyi olacak. İmmediate penceresine yazdıklarım kaydolmuyor bile, siliniyor. Hiç anlayamadım neyi ne yapacağımı. Debug’ları yazıyorum F8’e basıyorum hiçbir şey çıkmıyor. Başlatına sub yazıp denedim yine olmadı.
 

Ekli dosyalar

Ekli dosyalar

  • 1632938612363.webp
    1632938612363.webp
    7.4 KB · Görüntüleme: 21
  • 1632938642524.webp
    1632938642524.webp
    2.7 KB · Görüntüleme: 21
İmmediate’yi biraz anlamış oldum. Peki hocam ilk mesajımda (1. mesaj) ikisinin farkını sormuştum, bunu çözmeye çalışıyorum.

Şöyle mi anlamalıyım;

If Date >= CDate("01.01.2022")
olunca, parantezin içindeki tarih ne yazılmış olursa olsun, bugünün tarihini yazılmış gibi kabul eder,


If Date >= ("01.01.2022") olunca, parantezin içindeki tarihi dikkate alır.

Böyle midir? Çünkü immediate’de böyle sonuç görünüyor.
 
Merhabalar

Aşağıdaki satırın ne olduğunu biliyorum, fakat bazı kodlarda bu satırı
If Date >= CDate("01.01.2022") Then Exit Sub

olarak görüyorum. Bazen de
If Date >= ("01.01.2022") Then Exit Sub

şeklinde.

İkisinde ortak olmayan CDate ifadesinin anlamı nedir, CDate olunca ya da olmayınca fark nedir? Teşekkürler.

Verilerin türleri vardır.
Bir değişkene atanan bir veriyi ne türde olduğunu dim ile tanımlıyoruz.
Bu tür bir sayı olabilir bir metin olabilir True-False şeklinde bolean bir değer olabilir ya da tarih olabilir vb.
"01.01.2022" şeklinde yazınca bu bir tarih formatı şeklinde olmayabilir bunu tarihveri türüne sokup üzerinde tarihle ilgili işlemler yapabilmek için onu öncelikle tarih formatına çevirmemiz lazım

işte CDate ile formatı Tarih olmayan verileri tarih biçimine çevrilmesini sağlamış oluyoruz.
 
Verilerin türleri vardır.
Bir değişkene atanan bir veriyi ne türde olduğunu dim ile tanımlıyoruz.
Bu tür bir sayı olabilir bir metin olabilir True-False şeklinde bolean bir değer olabilir ya da tarih olabilir vb.
"01.01.2022" şeklinde yazınca bu bir tarih formatı şeklinde olmayabilir bunu tarihveri türüne sokup üzerinde tarihle ilgili işlemler yapabilmek için onu öncelikle tarih formatına çevirmemiz lazım

işte CDate ile formatı Tarih olmayan verileri tarih biçimine çevrilmesini sağlamış oluyoruz.
Doğru Sn meraklı. Dim’den pek anlamıyorum ama onlarca deneme yaptım, ve CDate yazılmadığı zaman, parantez içindeki tarihe göre işlem yapmadığını gördüm. Yani bu gibi satırlarda CDate’yi kullanmalıyız.
 
Doğru Sn meraklı. Dim’den pek anlamıyorum ama onlarca deneme yaptım, ve CDate yazılmadığı zaman, parantez içindeki tarihe göre işlem yapmadığını gördüm. Yani bu gibi satırlarda CDate’yi kullanmalıyız.
şöyle bir örnek vereyim

1 armut + 1 armut daha kaç yapar ? 2 armut yapar...

peki soruyu değiştireyim

1 armut + 1 elma kaç yapar? ( Cevap yok) neden çünkü elmalar elmalarla armutlar armutlarla toplanır yani aynı türde veriler toplanır ya da üzerlerinde işlem yapılabilir.

Sizin soruya uyarlarsak


armut yerine text-metin veri türü koyun
elma yerine de zaman veri türünü koyun

metin türü yazılmış "02.02.2022" ile zaman türünde olan 01.01.2022 i çıkartalım ya da toplayalım... işlem sonuç vermez çünkü biri elma biri armut...
onun için metin türünde yani armut olanı elmaya yani zaman türüne çeviriyoruz CDate ile ve sonra işlem yapıyoruz :)
 
Sizlere, bu konuyla ilgili son sorumu bir örnek dosyayla sorarak bitireyim.

Örnek dosyada (gördüğüm kadarıyla) birbiriyle aynı işi yapan çok basit iki farklı kod vardır.

İçlerinden birini tercih edecek olsanız hangisini tercih ederdiniz ve (lütfen nedeniyle)
 

Ekli dosyalar

Esas olarak iki prosedür çok farklı değil.
Tercihi belirleyecek olan; koşul gerçekleşmiyorsa (yazılan tarih geçmiş bir tarihse) yapılacak işlemin ne olacağı.
Koşul gerçekleşmiyorsa (geçmiş bir tarih yazılmışsa);
-- birinde kodda, başka işlem yapılmadan prosedür sonlandırılırken,
-- diğerinde End If satırından önce yazılacak ELSE kalıbına veya End If satırından sonra yazılacak başka işlemlere geçilmesi mümkün.

-- Tabi bir de üçüncü seçenek var, o da; Exit Sub yerine, GoTo sonraki veya GoTo 10 gibi prosedür içerisinde yapılacak yönlendirme.

.
 
Üst