Soru Kaydetmeden önce 4 yerden mükerrer kaydı kontrol etmek

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
Merhaba herkese
Şöyle bir sorunum var
Verilerin işlendiği sayfa PASİF_İŞLEMLERİ adlı sayfa
Textbox 17 de 6 rakamlı siciller var
Textbox17 PASİF_İŞLEMLERİ. B2:B arasında
Textbox 18 onay tarihi PASİF_İŞLEMLERİ P2:p arasında
Textbox5 gidiş tarihi PASİF_İŞLEMLERİ G2:G arasında
Textbox 6 dönüş tarihi PASİF_İŞLEMLERİ H2:H arasında kayıt yapıyor.

Sistem textboxlardaki verileri PASİF_İŞLEMLERİ sayfasında A sutunu en son dolu satırın altına kaydediyor
Benim istediğim
PASİF_İŞLEMLERİ sayfasının ayni satırında Textbox17 Textbox18 textbox5 textbox6 daki tüm verilerle tıpa tıp aynı verilerin olduğu başka bir satır kayıtlı ise kaydetmeden önce sorsun evet denirse son boş satıra kaydı eklesin hayır denirse eğer kaydetmesin ve kaydedilmedi diye mesaj versin

Kod:
Private Sub Kaydet_Click()

'mesaj kutusu devreye giriyor.

If MsgBox("Bu kayıt PASİF_İŞLEMLERİ sayfasına kaydedilecek?", vbYesNo) = vbNo Then Exit Sub

 

Dim a, s As Worksheet, Say As Integer, ara As String, bul As Range, x As Integer

Set s = Worksheets("VERİ"): Set a = Worksheets("PASİF_İŞLEMLERİ")

 

Say = WorksheetFunction.CountA(a.Range("A2:A65536")) + 1

 

a.Cells(Say + 1, 1).Value = Say

a.Cells(Say + 1, 2).Value = TextBox17.Value

a.Cells(Say + 1, 3).Value = TextBox1.Value

a.Cells(Say + 1, 4).Value = TextBox2.Value

a.Cells(Say + 1, 5).Value = TextBox16.Value

a.Cells(Say + 1, 6).Value = TextBox4.Value

a.Cells(Say + 1, 7).Value = TextBox5.Value

a.Cells(Say + 1, 8).Value = TextBox6.Value

a.Cells(Say + 1, 9).Value = TextBox7.Value

a.Cells(Say + 1, 10).Value = TextBox8.Value

a.Cells(Say + 1, 11).Value = TextBox9.Value

a.Cells(Say + 1, 12).Value = TextBox10.Value

a.Cells(Say + 1, 13).Value = TextBox11.Value

a.Cells(Say + 1, 14).Value = TextBox12.Value

a.Cells(Say + 1, 15).Value = TextBox13.Value

a.Cells(Say + 1, 16).Value = TextBox18.Value

ActiveWorkbook.Save

 

MsgBox "Bu kayıt PASİF_İŞLEMLERİ listesine kaydedildi", vbCritical, "UYARI"

 

On Error Resume Next

 

TextBox17.SetFocus

 

Call UserForm_Initialize

 

 

End Sub
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,738
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kendinize uyarlarsınız.

C++:
Option Explicit

Private Sub CommandButton1_Click()
    Dim S1 As Worksheet, Say As Long
    
    Set S1 = Sheets("PASİF_İŞLEMLER")
    
    Say = Application.WorksheetFunction.CountIfs(S1.Range("B:B"), TextBox17, S1.Range("P:P"), CLng(CDate(TextBox18)), S1.Range("G:G"), CLng(CDate(TextBox5)), S1.Range("H:H"), CLng(CDate(TextBox6)))

    If Say > 0 Then
        If MsgBox("Bu kayıt daha önce yapılmış!" & vbLf & "Yine de işleme devam etmek istiyor musunuz?", vbCritical + vbYesNo + vbDefaultButton2) = vbNo Then
            MsgBox "Kayıt işlemi iptal edilmiştir.", vbInformation
            Exit Sub
        End If
    End If
        
    Rem Sizin kodlarınız...
    Rem Sizin kodlarınız...
    Rem Sizin kodlarınız...
End Sub
 

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
Hocam benim kodların hepsinin başına REM mı yazmam gerekiyor onu anlamadım
 

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
Kendinize uyarlarsınız.

C++:
Option Explicit

Private Sub CommandButton1_Click()
    Dim S1 As Worksheet, Say As Long
   
    Set S1 = Sheets("PASİF_İŞLEMLER")
   
    Say = Application.WorksheetFunction.CountIfs(S1.Range("B:B"), TextBox17, S1.Range("P:P"), CLng(CDate(TextBox18)), S1.Range("G:G"), CLng(CDate(TextBox5)), S1.Range("H:H"), CLng(CDate(TextBox6)))

    If Say > 0 Then
        If MsgBox("Bu kayıt daha önce yapılmış!" & vbLf & "Yine de işleme devam etmek istiyor musunuz?", vbCritical + vbYesNo + vbDefaultButton2) = vbNo Then
            MsgBox "Kayıt işlemi iptal edilmiştir.", vbInformation
            Exit Sub
        End If
    End If
       
    Rem Sizin kodlarınız...
    Rem Sizin kodlarınız...
    Rem Sizin kodlarınız...
End Sub
Hocam kodları bu şekilde birleştirdim
Kod:
Private Sub Kaydet_Click()

'''''''''''''''''''''''''''''''''''''Mükerrer Kaydı''''''''''''''''''''''''''''''''''''
Dim S1 As Worksheet, Say As Long
    
    Set S1 = Sheets("PASİF_İŞLEMLER")
    
    Say = Application.WorksheetFunction.CountIfs(S1.Range("B:B"), TextBox17, S1.Range("P:P"), CLng(CDate(TextBox18)), S1.Range("G:G"), CLng(CDate(TextBox5)), S1.Range("H:H"), CLng(CDate(TextBox6)))

    If Say > 0 Then
        If MsgBox("Bu kayıt daha önce yapılmış!" & vbLf & "Yine de işleme devam etmek istiyor musunuz?", vbCritical + vbYesNo + vbDefaultButton2) = vbNo Then
            MsgBox "Kayıt işlemi iptal edilmiştir.", vbInformation
            Exit Sub
        End If
    End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

'mesaj kutusu devreye giriyor.
If MsgBox("Bu kayıt PASİF_İŞLEMLERİ sayfasına kaydedilecek?", vbYesNo) = vbNo Then Exit Sub

Dim a, s As Worksheet, Say As Integer, ara As String, bul As Range, x As Integer
Set s = Worksheets("VERİ"): Set a = Worksheets("PASİF_İŞLEMLERİ")

Say = WorksheetFunction.CountA(a.Range("A2:A65536")) + 1

a.Cells(Say + 1, 1).Value = Say
a.Cells(Say + 1, 2).Value = TextBox17.Value
a.Cells(Say + 1, 3).Value = TextBox1.Value
a.Cells(Say + 1, 4).Value = TextBox2.Value
a.Cells(Say + 1, 5).Value = TextBox16.Value
a.Cells(Say + 1, 6).Value = TextBox4.Value
a.Cells(Say + 1, 7).Value = TextBox5.Value
a.Cells(Say + 1, 8).Value = TextBox6.Value
a.Cells(Say + 1, 9).Value = TextBox7.Value
a.Cells(Say + 1, 10).Value = TextBox8.Value
a.Cells(Say + 1, 11).Value = TextBox9.Value
a.Cells(Say + 1, 12).Value = TextBox10.Value
a.Cells(Say + 1, 13).Value = TextBox11.Value
a.Cells(Say + 1, 14).Value = TextBox12.Value
a.Cells(Say + 1, 15).Value = TextBox13.Value
a.Cells(Say + 1, 16).Value = TextBox18.Value
ActiveWorkbook.Save

MsgBox "Bu kayıt PASİF_İŞLEMLERİ listesine kaydedildi", vbCritical, "UYARI"

On Error Resume Next

TextBox17.SetFocus

Call UserForm_Initialize


End Sub
Bu kısımda hata mesajı veriyor

'mesaj kutusu devreye giriyor.
If MsgBox("Bu kayıt PASİF_İŞLEMLERİ sayfasına kaydedilecek?", vbYesNo) = vbNo Then Exit Sub

Dim a, s As Worksheet, Say As Integer, ara As String, bul As Range, x As Integer
Set s = Worksheets("VERİ"): Set a = Worksheets("PASİF_İŞLEMLERİ")


Dim a, s As Worksheet, Say As Integer, ara As String, bul As Range, x As Integer altı çizili renkli kısımda malesef hata verdi kod


Adsız.jpg
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,738
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Değişkenleri de kendinize uyarlayınız.

İki tane aynı değişken olmaz. Bunu bir tane olacak şekilde düzenleyin.
 

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
@Korhan Ayhan Hocam teke indirdiğimde de
Say= application.worksheet.function.contIfs(S1.Range
Diye başlayan satır hata veriyor.
Kodları revize etmeniz mümkün mü
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,738
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Ben yaparsam balık vermiş olurum.

Siz yapın ki bilgiler kalıcı olsun.

Öncelikle benim verdiğim kod bloğunda Dim ile başlayan satır ile sizde ki kod bloğunda bulunan Dim ile başlayan satırı ortak şekilde düzenleyin.

Sonra ben PASİF_İŞLEMLER sayfasına "S1" demişim. Siz ise "a" demişsiniz. Bunları düzeltmeniz gerekiyor. Hepsini "a" olarak düzeltin.

Dim ile başlayan tanımlamaları kodu en başına alın. Böylece yönetmeniz daha kolay olur.
 

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
@Korhan Ayhan Hocam tüm alanlari elimden geldiğince düzenledim
Kod:
Dim a, s As Worksheet, Say As Long, ara As String, bul As Range, x As Integer

Set s = Worksheets("VERİ"): Set a = Worksheets("PASİF_İŞLEMLERİ")

 

 

   

    Say = Application.WorksheetFunction.CountIfs(a.Range("B:B"), TextBox17, a.Range("P:P"), CLng(CDate(TextBox18)), a.Range("G:G"), CLng(CDate(TextBox5)), a.Range("H:H"), CLng(CDate(TextBox6)))

 

    If Say > 0 Then

        If MsgBox("Bu kayıt daha önce yapılmış!" & vbLf & "Yine de işleme devam etmek istiyor musunuz?", vbCritical + vbYesNo + vbDefaultButton2) = vbNo Then

            MsgBox "Kayıt işlemi iptal edilmiştir.", vbInformation

            Exit Sub

        End If

    End If

 

 

 

'mesaj kutusu devreye giriyor.

If MsgBox("Bu kayıt PASİF_İŞLEMLERİ sayfasına kaydedilecek?", vbYesNo) = vbNo Then Exit Sub

 

 

Say = WorksheetFunction.CountA(a.Range("A2:A65536")) + 1
BU sefer de run time erro 13
Type mismatch hatası verdi .
Nerede hata yaptım ki
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,738
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
İlk olarak bu şekilde tanımlama yanlıştır.

Dim a, s As Worksheet

Aşağıdaki gibi olmalıdır.

Dim a As Worksheet,, s As Worksheet


Hata için kodu F8 tuşu ile adım adım çalıştırıp deneme yapın. Böylece hata veren satırı tespit edebilirsiniz.
 

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
Bu kod hata veriyor
Kod:
    Say = Application.WorksheetFunction.CountIfs(a.Range("B:B"), TextBox17, a.Range("P:P"), CLng(CDate(TextBox18)), a.Range("G:G"), CLng(CDate(TextBox5)), a.Range("H:H"), CLng(CDate(TextBox6)))
Bu sefer de run time erro 13
Type mismatch hatası verdi .
Nerede hata yaptım ki
 

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
Hocam sorunu tespit ettim
Sayin. @Korhan Ayhan Hocam Sizin yazdığınız kodda
Say = Application.WorksheetFunction.CountIfs(a.Range("B:B"), TextBox17, a.Range("P:p"), CLng(CDate(TextBox18)), a.Range("G:G"), CLng(CDate(TextBox5)), a.Range("H:H"), CLng(CDate(TextBox6)))
Textbox17, 18 , 5 ve 6 nin tamamının doLu olması isteniyor .
Tamamı dolu olmayınca kaybetmediği gibi tüm textboxlar 5. 6 17 18 dolu olsa bile bire bir aynibmi diye malesef kontrol etmiyor.
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,738
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Örnek dosyanın önemi burada belli oluyor...
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,738
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Bu dosyadaki TC. NO' lar gerçek değildir umarım..
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,738
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Tamamdır.

Eğer siz bahsettiğiniz nesnelere veri girişi yapmadan KAYIT butonuna tıklarsanız hatalar almanız muhtemeldir.

Bunun için hata kontrolleri eklemeniz gerekiyor.

Örneğin tarih yazılan bir nesne boş bırakılırsa ve siz bu nesneyi sonrasında Cdate(Textbox5) gibi sorgularsanız hata alırsınız.

Bu sebeple kodlarınızın en başına örneğin aşağıdaki gibi nesne boş ise kontrolü eklemeniz gerekiyor.

C++:
If TextBox5 = "" Then
Msgbox "Lütfen onay tarihini giriniz!", VbCritical
Exit Sub
End If
Bunun gibi diğer nesneleriniz içinde bu kontrolleri eklemelisiniz.

Bu aşamalardan sonra 4 kritere göre saydırma kontrolünüz hata vermeden sizin istediğiniz sonucu verecektir.
 

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
Tamamdır.

Eğer siz bahsettiğiniz nesnelere veri girişi yapmadan KAYIT butonuna tıklarsanız hatalar almanız muhtemeldir.

Bunun için hata kontrolleri eklemeniz gerekiyor.

Örneğin tarih yazılan bir nesne boş bırakılırsa ve siz bu nesneyi sonrasında Cdate(Textbox5) gibi sorgularsanız hata alırsınız.

Bu sebeple kodlarınızın en başına örneğin aşağıdaki gibi nesne boş ise kontrolü eklemeniz gerekiyor.

C++:
If TextBox5 = "" Then
Msgbox "Lütfen onay tarihini giriniz!", VbCritical
Exit Sub
End If
Bunun gibi diğer nesneleriniz içinde bu kontrolleri eklemelisiniz.

Bu aşamalardan sonra 4 kritere göre saydırma kontrolünüz hata vermeden sizin istediğiniz sonucu verecektir.
Hocam 4 textbox da dolu üst üste kaydet diyorum
1 kere bile sormadı bu kayıt var diye . ama 4 textboxta aynı ise sorma kodu çalışması lazım değil miydi
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,738
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Eklediğiniz dosyada PASİF_İŞLEMLERİ sayfası boştu. Bu sebeple test edemedim.
 

TURKOLOG

Altın Üye
Katılım
13 Kasım 2008
Mesajlar
744
Excel Vers. ve Dili
2016 64 TR
Altın Üyelik Bitiş Tarihi
29-10-2026
Hocam malesef 4 textboxta kontorl sağlamıyor tuşa baktıkça aynı verileri alt alta basıyor
 

Korhan Ayhan

Administrator
Yönetici
Admin
Katılım
15 Mart 2005
Mesajlar
42,738
Excel Vers. ve Dili
Microsoft 365 Tr-En 64 Bit
Kontrol sağlanıyor.

Siz sayfaya kaydettiğiniz verilerinizi kontrol ediniz.

G-H ve P sütunundaki tarihler sanırım sola yanaşık duruyor.(Yani tarih değiller. Sadece görüntüleri tarih gibi)
 
Üst