veri doğrulama makro hatası

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
389
Excel Vers. ve Dili
office 10 türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
hocalarım merhaba;
Makro kaydet ile yaptığım veri doğrulamalı kodlar makro çalıştır dediğimde resimdeki sarı renkli satırları hatalı olarak gösteriyor. Acaba makro veri doğrulamadaki formülleri çözümleyemiyor mu? hatanın sebebi nedir nasıl düzeltebilirim?
 

Ekli dosyalar

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,409
Excel Vers. ve Dili
Ofis 365 Türkçe
Merhaba,
Makro içinde kullandığınız fonksiyonların İngilizcesini yazın, Noktalı Virgiülleri de Virgül ile yazarak deneyin.
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
389
Excel Vers. ve Dili
office 10 türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
Necdet hocam ilgin için teşekkür ederim
"=OR(T4=""X"",AND(IF NUMBER(T4),T4>=DATE(2025,1,1),T4<=DATE(2025,6,30)))"
"=Or(T4=""X"",and(if number(T4),T4>=date(2025,1,1),T4<=date(2025,6,30)))"
küçük büyük harf olarak ingilizce bu şekilde çevirdim ama aynı hata ekranı çıkıyor acaba çeviri yanlış mı
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
107
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
@m.ensar makro kaydet demesen kodlar ile ne yapmak istedigini yazarsan. Direkt ona gore kod yazdiririz
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
389
Excel Vers. ve Dili
office 10 türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
volki hocam =YADA(T4=""X"";VE(ESAYIYSA(T4);T4>=TARİH(2025;1;1);T4<=TARİH(2025;6;30))) T4 hücresine ya X yazılabilsin yada 01.01.2025 tarihi ile 30.06.2025 tarihleri arasında bir tarih yazılabilsin bunların dışında birşey yazılamasın Veri doğrulama ile yukardaki formül bu işi yapıyor ancak bunu uygulamam gereken 8 farklı liste var her defasında uğraşmamak için listeleri düzenlemem bittiğinde kod çalıştır diyerek işlemleri bitirmek istiyorum
 

volki_112

Altın Üye
Katılım
29 Eylül 2023
Mesajlar
107
Excel Vers. ve Dili
2019 Türkçe
Altın Üyelik Bitiş Tarihi
13-12-2029
@m.ensar chatgpt cevabı
Bu işlem için VBA ile aşağıdaki kodu kullanabilirsiniz. Kod, Worksheet_Change olayına bağlı olarak çalışır ve belirtilen hücre aralığında sadece "X" veya 01.01.2025 ile 30.06.2025 tarihleri arasındaki değerlerin girilmesine izin verir.
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim rng As Range
    Dim cell As Range
    Dim allowedDate As Boolean
    Dim inputValue As Variant

    ' A1:A100 aralığını belirle
    Set rng = Me.Range("A1:A100")

    ' Hedef hücreler kontrol edilir
    If Not Intersect(Target, rng) Is Nothing Then

        Application.EnableEvents = False ' Döngü oluşmaması için etkinlikleri devre dışı bırak

        For Each cell In Intersect(Target, rng)

            inputValue = cell.Value
            allowedDate = False

            ' Eğer "X" ise geçerli
            If inputValue = "X" Then
                allowedDate = True

            ' Eğer tarih aralığında bir değer ise geçerli
            ElseIf IsDate(inputValue) Then
                If CDate(inputValue) >= DateValue("01.01.2025") And CDate(inputValue) <= DateValue("30.06.2025") Then
                    allowedDate = True
                End If
            End If
           
            ' Geçersiz değer varsa uyarı ve geri al
            If Not allowedDate Then

                MsgBox "Sadece 'X' veya 01.01.2025 ile 30.06.2025 tarihleri arasında bir değer girebilirsiniz!", vbExclamation

                cell.Value = ""
            End If
        Next cell
       
        Application.EnableEvents = True ' Etkinlikleri yeniden etkinleştir
    End If

End Sub
 

Necdet

Moderatör
Yönetici
Katılım
4 Haziran 2005
Mesajlar
15,409
Excel Vers. ve Dili
Ofis 365 Türkçe
Kodu inceleyin, diğerlerini de kendinize uyarlayın.
Mantığını kontrol etmedim, sadece kodu düzenledim.

Kod:
Sub TAKİP2()
    
With Range("T4:T750").Validation
    .Delete
    .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:= _
    "=OR(T4=""X"",AND(ISNUMBER(T4),T4>=DATE(2025,1,1),T4<=DATE(2025,6,30)))"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = _
    "1. TAKİP 01.01.2025 İLE 30.06.2025 TARİHLERİ ARASINDA OLMALI!!"
    .ShowInput = True
    .ShowError = True
End With

End Sub
 

m.ensar

Altın Üye
Katılım
5 Nisan 2016
Mesajlar
389
Excel Vers. ve Dili
office 10 türkçe
Altın Üyelik Bitiş Tarihi
25-10-2025
Hayırlı sabahlar Volki hocam Necdet hocam çok teşekkür ediyorum emeklerinize sağlık bilginize zeval gelmesin
 
Üst