IsDate If koşulu doğrudan Else kısmına atlıyor

Katılım
26 Nisan 2006
Mesajlar
50
cevap = InputBox("Enter date", "ENTER", "DDMMYYYY")

If IsDate(cevap) Then

FTarih = (VBA.Left(cevap, 2) & VBA.Mid(cevap, 3, 2) & VBA.Right(cevap, 4)) * 1
Gun = (VBA.Left(cevap, 2)) * 1
GunAy = (VBA.Left(cevap, 2) & VBA.Mid(cevap, 3, 2))
Yıl = (VBA.Right(cevap, 4)) * 1
Ay = (VBA.Mid(cevap, 3, 2)) * 1

Else

Dim Msg, Style, Title, Help, Ctxt, Response, MyString As Variant
Msg = "Unrecognisable Date!" ' Define message.
Style = vbRetryCancel + vbCritical + vbDefaultButton1 ' Define buttons.
Title = "Halt"
Help = "" ' Define Help file.
Ctxt = 1000
Response = MsgBox(Msg, Style, Title, Help, Ctxt)

If Response = vbRetry Then
cevap = InputBox("Tarih giriniz", "GİRİŞ", "DDMMYYYY")
FTarih = (VBA.Left(cevap, 2) & VBA.Mid(cevap, 3, 2) & VBA.Right(cevap, 4)) * 1
Gun = (VBA.Left(cevap, 2)) * 1
GunAy = (VBA.Left(cevap, 2) & VBA.Mid(cevap, 3, 2))
Yıl = (VBA.Right(cevap, 4)) * 1
Ay = (VBA.Mid(cevap, 3, 2)) * 1

End If

End If


Merhaba arkadaşlar yukarıdaki kodda yapmaya çalıştıgım şey basit aslında;
Girilen sayılar bir tarih belirtiyor ise devam edip bu sayının parçalarını değişkenlere atamasını

Değil ise retry ve cancel butonları içeren bir uyarı getirmesini ve kullanıcıdan münasip bir tarih girmesini istiyorum fakat düzgün tarih girilse bile ilk önce uyarı çıkıyor retry dedikten sonra ancak düzgün tarihi tekrar girince kabul ediyor.
Aynı döngüye bakıp duruyorum göremez oldum hatamı siz de bir göz atabilirseniz memnun olurum.

Şimdiden teşekkürler
 

Levent Menteşoğlu

Administrator
Yönetici
Admin
Katılım
13 Ekim 2004
Mesajlar
16,058
Excel Vers. ve Dili
Excel 2010-32 bit-Türkçe
Excel 365 -32 bit-Türkçe
Atlaması gayet normal çünkü tarihi sekiz haneli olacak şekilde bitişik yazdırıyorsunuz, bu durumda isdate fonksiyonu bunu metin veya sayı olarak algıladığı için false sonucunu döndürüyor, elbette bu durum nedeniyle de sürekli else koşulu devreye giriyor.
 

Mahmut Bayram

Özel Üye
Katılım
25 Haziran 2005
Mesajlar
1,778
Excel Vers. ve Dili
2021 Excel Tr
IsDate değişken içerik kontrolünün kullanımı

IsDate(tarih)Buradaki “tarih” değişkeninin içeriği geçerli bir tarih ise geri dönen değer “True” aksi halde “False” olur.
Örnek kullanım1:
Kod:
Dim a
     a = IsDate("30/02/2007")   'verilen tarih doğru değil, a = False olacaktır. (sebebi ise Şubat ayı hiçbir zaman 30 çekmez)
     'a = IsDate("27/11/abc")     ' geçerli tarih değil,     a = False olacaktır. (sebebi ise 12abc bir tarih formatı değildir.)
     'a = IsDate("32/102007")     ' geçerli tarih değil,     a = False olacaktır. (sesebi ise 10. ay 32 çekmez)
     'a = IsDate("27/11/2007")    'geçerli tarih,            a = True olacaktır.  (sebebi malum)
  MsgBox a
Örnek kullanım2:
Kod:
Dim tarih
     Do
       tarih = InputBox("Okula başlama tarihiniz")
    Loop While Not IsDate(tarih)    'geçerli bir tarih değilse tekrar ediliyor
Sizin sorununuzun çözümü ise anladığım kadarıyla galiba şu şekilde
Kod:
Dim cevap As Date
cevap = InputBox("Enter date", "ENTER", "DD.MM.YYYY")

If IsDate(cevap) Then

FTarih = Left(cevap, 2) & Mid(cevap, 3, 2) & Right(cevap, 4)
gun = Left(cevap, 2)
gunay = Left(cevap, 2) & Mid(cevap, 4, 2)
yıl = Right(cevap, 4)
ay = Mid(cevap, 4, 2)
Else

If Response = vbRetry Then
cevap = InputBox("Tarih giriniz", "GİRİŞ", "DD.MM.YYYY")
FTarih = Left(cevap, 2) & Mid(cevap, 3, 2) & Right(cevap, 4)
gun = Left(cevap, 2)
gunay = Left(cevap, 2) & Mid(cevap, 3, 2)
yıl = Right(cevap, 4)
ay = Mid(cevap, 4, 2)
End If
End If
MsgBox "Girmiş olduğunuz tarihin ayrıntılı dökümü " & Chr(13) _
& "Gün :" & gun & Chr(13) _
& "Ay :" & ay & Chr(13) _
& "Yıl :" & yıl & Chr(13) _
& "Gün ve ay :" & gunay & Chr(13)
 
Son düzenleme:
Üst