• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Tc kimlik no doğrulama, satırı silerken hata

  • Konbuyu başlatan Konbuyu başlatan cems
  • Başlangıç tarihi Başlangıç tarihi

cems

Altın Üye
Katılım
2 Eylül 2005
Mesajlar
2,581
Excel Vers. ve Dili
office 2010 tr 32bit
Kodları ekteki örneğin altında birebir aynı olarak verildiği gibi ;

Bir userform üzerinden kişi detayı yaparken textboxlardan biri tc kimlik doğrulama yapıyor.
Kaydederken algoritmayı kontrol ederek doğru veya yanlış diyor, kayda ( sonradan düzeltmek üzere ) devam edip bitiriyor. Buraya kadar normal.

Ancak userform üzerindeki sil tuşu kullanıldığında aynı kodlar typ mismatch13 hatası vererek duruyor, ayrıca hücrede 11 sayı olmadığında uyaran msgbox da yükseliyor.

Satırın silinirken tc kontrol kodlarına takılmaması ve msgboxun da silme esnasında yukselmemesi için nasıl bir düzeltme yapmam gerek ?

Sayfa1in olayında yazan kodlar

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, Range(["g:g"])) Is Nothing Then Exit Sub


If Len(Target) <> 11 Then
MsgBox "TC Kimlik numarası 11 Rakamdan oluşmalıdır.", vbCritical, "Hatalı !" 'X
'Target.Text = ""
Exit Sub
End If

Dim mod1 As Integer, mod2 As Integer, TC1 As Integer, TC2 As Integer, TC3 As Integer, TC4 As Integer, TC5 As Integer, TC6 As Integer, TC7 As Integer, TC8 As Integer, TC9 As Integer, TC10 As Integer, TC11 As Integer
TC1 = Mid(Target, 1, 1)
TC2 = Mid(Target, 2, 1)
TC3 = Mid(Target, 3, 1)
TC4 = Mid(Target, 4, 1)
TC5 = Mid(Target, 5, 1)
TC6 = Mid(Target, 6, 1)
TC7 = Mid(Target, 7, 1)
TC8 = Mid(Target, 8, 1)
TC9 = Mid(Target, 9, 1)
TC10 = Mid(Target, 10, 1)
TC11 = Mid(Target, 11, 1)

mod1 = ((((TC1 + TC3 + TC5 + TC7 + TC9) * 7) - (TC2 + TC4 + TC6 + TC8)) Mod 10)
mod2 = ((TC1 + TC2 + TC3 + TC4 + TC5 + TC6 + TC7 + TC8 + TC9 + TC10) Mod 10)

If mod1 = TC10 And mod2 = TC11 Then
MsgBox Target & " Geçerli TC kimlik numarası", vbInformation, "Bilgilendirme !"
Else
MsgBox Target & " Geçersiz TC kimlik numarası", vbExclamation, "Dikkat !"
End If
End Sub

Userform kodları

Kod:
Private Sub CommandButton1_Click()
son = Cells(65536, "A").End(xlUp).Row + 1
Cells(son, "a") = TextBox1
'Cells(son, "b") = TextBox34 'yeni veri kaydet
'Cells(son, "c") = TextBox35
'Cells(son, "d") = TextBox36
'Cells(son, "e") = TextBox37 'yeni veri kaydet
'Cells(son, "f") = TextBox38
Cells(son, "g") = TextBox2
End Sub

Private Sub CommandButton2_Click()
Sheets("sayfa1").Select
Dim cevap
Dim i
cevap = MsgBox("Seçili Kaydı Silmek istediğinizden Eminmisiniz ? Bu işlem geri alınamaz !! ", vbYesNo + vbQuestion, " Veri siliniyor.....")
If cevap = vbYes Then
Selection.EntireRow.Delete
End If
Range("A1").Select
MsgBox "Verileriniz geri alınamaz şekilde Silindi. Hata sonucu sildiyseniz tekrar yeni veri olarak girmeniz gerek.", , "Veri silindi"
'CommandButton19_Click
TextBox1 = ""
TextBox2 = ""

ThisWorkbook.Save
End Sub
 

Ekli dosyalar

Merhaba,

Sayfadaki change olayındaki kodlarda eklemeler yaptım.
Doğru için mesajı kaldırdım, sadece hatalı için mesaj vermesi daha anlamlı.

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

    On Error Resume Next
    If Intersect(Target, Range("g:g")) Is Nothing Or Target.Row < 5 Or Target.Value = vbEmpty Then Exit Sub
    
    
    If Len(Target) <> 11 Then
        MsgBox "TC Kimlik numarası 11 Rakamdan oluşmalıdır.", vbCritical, "Hatalı !" 'X
        Exit Sub
    End If
    
    Dim mod1 As Integer, mod2 As Integer, TC1 As Integer, TC2 As Integer, TC3 As Integer, TC4 As Integer, TC5 As Integer, TC6 As Integer, TC7 As Integer, TC8 As Integer, TC9 As Integer, TC10 As Integer, TC11 As Integer
    TC1 = Mid(Target, 1, 1)
    TC2 = Mid(Target, 2, 1)
    TC3 = Mid(Target, 3, 1)
    TC4 = Mid(Target, 4, 1)
    TC5 = Mid(Target, 5, 1)
    TC6 = Mid(Target, 6, 1)
    TC7 = Mid(Target, 7, 1)
    TC8 = Mid(Target, 8, 1)
    TC9 = Mid(Target, 9, 1)
    TC10 = Mid(Target, 10, 1)
    TC11 = Mid(Target, 11, 1)
    
    mod1 = ((((TC1 + TC3 + TC5 + TC7 + TC9) * 7) - (TC2 + TC4 + TC6 + TC8)) Mod 10)
    mod2 = ((TC1 + TC2 + TC3 + TC4 + TC5 + TC6 + TC7 + TC8 + TC9 + TC10) Mod 10)
    
    If mod1 = TC10 And mod2 = TC11 Then
'        MsgBox Target & " Geçerli TC kimlik numarası", vbInformation, "Bilgilendirme !"
    Else
        MsgBox Target & " Geçersiz TC kimlik numarası", vbExclamation, "Dikkat !"
    End If

End Sub
 
Sayın Yeşertener ,

Kodları ancak denemeye fırsatım oldu.

Sayfaya buton , userforma da ara butonu ekledim, veriyi userforma getirip sil tuşuna bastım

Kod:
If Intersect(Target, Range("g:g")) Is Nothing Or Target.Row < 5 Or Target.Value = vbEmpty Then

satırında runtime error typ mismatch13 hatası vererek programı durdurdu. İlginç olan silme gerçekleşiyor ama koddaki takılma yüzünden sayfayı kapatıp açmak gerekiyor. Kullanıcı 11000 kaydı yaparken silmesi gerektiğinde bu hata için kapatıp açmak istemeyecektir.

Sizce nasıl bir düzeltme bu sorunu aşabilir? Ekte aynı dosyada tuş ekleri yapıldı.

Net ve site üzerinde araştırdığıma göre bu kod kullanılmış ancak aynı problem yaşanmış ve bu silmede oluşan soruna cevap verilmemiş.

Belki siz başka ve çalışması ile beraber silmesinde sorun çıkarmayan kod önerirsiniz ?
 

Ekli dosyalar

Silme tuşundaki kodları şöyle kullanınca hata vermiyor:

Kod:
Private Sub CommandButton2_Click()
Sheets("sayfa1").Select
Dim cevap
Dim i
cevap = MsgBox("Seçili Kaydı Silmek istediğinizden Eminmisiniz ? Bu işlem geri alınamaz !! ", vbYesNo + vbQuestion, " Veri siliniyor.....")
If cevap = vbYes Then
[COLOR="Red"]Application.EnableEvents = False[/COLOR]
Selection.EntireRow.Delete
[COLOR="red"]Application.EnableEvents = True[/COLOR]
End If
Range("A1").Select
MsgBox "Verileriniz geri alınamaz şekilde Silindi. Hata sonucu sildiyseniz tekrar yeni veri olarak girmeniz gerek.", , "Veri silindi"
'CommandButton19_Click
TextBox1 = ""
TextBox2 = ""


ThisWorkbook.Save
End Sub
 
Sayın Yusuf44

Düzeltmeyi önerdiğiniz şekilde uygulayınca ; önce örnek dosyada sonra da asıl dosyada sorun çıkarmadan sessiz sedasız çalıştı ve konuyu çözmüş oldu.

Bu kodun daha önce kullanıldığı sayfalara yeniden geri gittim , tarihlerini izledim ve en azından 4 senedir çözülememiş bir muamma olarak kalmış. Benim gördüğüm ; fikir keskinliğiniz ile bunca yıldan sonra muamma'yı bertaraf eden ilk kişisiniz .... Konuya asıl bu taraftan bakmak , çözümünüzdeki mücevherane hali daha net hissettiriyor.

Çok miktarda teşekkürden ötesi elimden gelmiyor ancak, durum itibarı ile size karşı olan bakışım , daha önce sitede gördüğüm kodsiperane yardım ve fikir zenginliğinize özenmemin ve çalışmalarınızı izlemenin ötesinde bunların yoğurulmasındaki üstün yeteneğinize ve keskin zeka kıvraklığınıza artık hayranlıklar dolu, bunu da ifade etmek istiyorum.

Kuru da olsa müteşekkirim, önem verilen bir çalışmanın ilerlemesine yardım ettiniz , elinize sağlık :)
 
Son düzenleme:
Övgüleriniz için çok teşekkür ederim. Muhtemelen sitemizde çok bulunan benden çok daha keskin zekalı ve excel konusunda daha yetenekli, daha bilgili üstadlarımız konuyla ilgilenmemişlerdir. ilgilenselerdi muhtelemelen rahatça çözülürdü diye düşünüyorum.

Aslında konuyu ilk incelediğimde şaşırmıştım. Çünkü silme işlemini yapan düğmedeki kodlarda o hata veren satır bulunmuyordu. Daha sonra bu satırın sayfa olaylarına bağlı olduğunu gördüm ve sorunun kaynağının da bu sayfa olaylarındaki Change kodu olduğunu anladım. Sonuçta sil düğmesine basıldığında sayfada bir değişiklik yapılıyordu.

Daha önce bu siteden öğrendiğim yöntemle sayfa olaylarını geçici olarak durdurursam sorunun çözüleceğini düşündüm ve uyguladım.

Siz de dahil olmak üzere bu forumda yetkin kişilerden çok şey öğrendim. Asıl ben nezdinizde tüm foruma teşekkür etmek istiyorum.

İyi çalışmalar. Sağlıcakla kalınız.
 
Ben sadece sayfa olayına odaklanmıştım, form kodlarına hiç bakmadım :) nasıl olsa madem sayfada kod var formda neden olsun ki dediydim :)
 
Ben sadece sayfa olayına odaklanmıştım, form kodlarına hiç bakmadım :) nasıl olsa madem sayfada kod var formda neden olsun ki dediydim :)

Sayın Yeşertener ,

Sizin de bu sitede nasıl dosyalar arasında mekik dokuduğunuzu ve ulaşabildiğiniz her soruna bir çözümü , karşılıksız ve saatlerden dolayı farkındayım ki uykusuz da kalmayı göze alarak ulaştırmaya çalıştığınızın ve o cıvıl cıvıl bilgi hazinenizden sanki toprağa Yeşerten bir Er 'in ekin atması gibi serperek bundan sonrasında "kendi kendine yeşermesi" dışında kuru da olsa minik bir teşekkürden öte bir şey beklemediğinizin ; hepimiz farkındayız...

Umulur ki ; biz site üye veya müdavimleri, sizin demetlerinizden edindiğimiz ve bu sitede herkesin tadını çıta olarak yaşadığı saygı, zenaatkar'anelik ve edebî ahi'lik örneğini bizden sonraki kuşağa siz ve sitede kan ter içinde bu atmosferi oluşturan ilkeler çizgisinde destek veya yardıma koşan diğer çok değerli excel ustalarını utandırmayacak şekilde aktarmayı biliriz ...

Excel bir dijital muhabbet bu sitede ve sizler ile az da olsa çok da olsa muhabbetinize nail olmak en azından naçiz ben için ; bir ayrıcalık... :) İlgilenmiş olmanız yeter ...

Allah sizin de gönlünüzden ve kalenderliğinizden razı olsun , bir insanın hiç mi beklentisi olmaz?... :)
 
Son düzenleme:
Ek bilgi;

Önerilen "Application.EnableEvents = False" kodu sayfa olaylarını pasif duruma getirir. Bu sebeple bu aşamadayken kodlar hata verirse bu durumda kodlar tepki vermez. Yani kullanımı biraz risklidir.
 
Ek bilgi;

Önerilen "Application.EnableEvents = False" kodu sayfa olaylarını pasif duruma getirir. Bu sebeple bu aşamadayken kodlar hata verirse bu durumda kodlar tepki vermez. Yani kullanımı biraz risklidir.

Çok değerli üstadım Sayın Ayhan ;

Bazen

Kod:
 If not risc is nothing then
olsa bile deyip

denemeyi hepimiz sonucu görmek ve hatamız ile yüzleşmek için göze alıyoruz :) Riskin bazen gerçekleşmediği o an bile bir umut aydınlığı yapıyor ki beklentimiz de sanırım bu yaptığımız bu programlama işlerinde, en azından çalıştığında meseleyi halletmiş oluyor ; ta ki o risk gerçekleşene kadar.

Daha iyi bir çözüm ( 4 yıldır değinilememiş ) cereyan edene kadar , galiba eldeki çözüm en kıymetlisi olacak.

Şahsınızın da inanılmaz gelen ama bir o kadar da ; kodları okurken çok pratik olduğunu anladığımız yöntemleriniz ile excel'in derin uzayında dahi yol gösteren çalışmalarınız olduğunun sessiz üye tanıklarındanız ve bilgi çeşmenizden na'bedel derleyip bir gün lazım olur diye sakladığımız da çok vaki'dir ...

Sizler iyi ki varsınız, her bir mod'un sitenin başarı ve huzurunda payı ve bizlerin de memnuniyeti tartışılmaz derecededir ... Ne yazık ki bütün hoşgörü ve desteğinize biz üyelerden bir gönül dolusu saygı ve teşekkürden öte bir karşılığımız olmuyor. Hiç olmazsa hayır dilekleri dolu dualarımızın içinde olduğunuzu bilin ...
 
Günaydın. Korhan Bey'in mesajı üzerine şu şekilde yapınca hata vermedi:

Sayfa kodları:
Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

    'On Error Resume Next
    If Intersect(Target, Range("g5:g" & Rows.Count)) Is Nothing Then Exit Sub
            
    If Selection.Count > 1 Then GoTo 10
    If Target <> "" Then
        If Len(Target) <> 11 Then
            MsgBox "TC Kimlik numarası 11 Rakamdan oluşmalıdır.", vbCritical, "Hatalı !" 'X
            Exit Sub
        End If
    End If
    
    Dim mod1 As Integer, mod2 As Integer, TC1 As Integer, TC2 As Integer, TC3 As Integer, TC4 As Integer, TC5 As Integer, TC6 As Integer, TC7 As Integer, TC8 As Integer, TC9 As Integer, TC10 As Integer, TC11 As Integer
    TC1 = Mid(Target, 1, 1)
    TC2 = Mid(Target, 2, 1)
    TC3 = Mid(Target, 3, 1)
    TC4 = Mid(Target, 4, 1)
    TC5 = Mid(Target, 5, 1)
    TC6 = Mid(Target, 6, 1)
    TC7 = Mid(Target, 7, 1)
    TC8 = Mid(Target, 8, 1)
    TC9 = Mid(Target, 9, 1)
    TC10 = Mid(Target, 10, 1)
    TC11 = Mid(Target, 11, 1)
    
    mod1 = ((((TC1 + TC3 + TC5 + TC7 + TC9) * 7) - (TC2 + TC4 + TC6 + TC8)) Mod 10)
    mod2 = ((TC1 + TC2 + TC3 + TC4 + TC5 + TC6 + TC7 + TC8 + TC9 + TC10) Mod 10)
    
    If mod1 = TC10 And mod2 = TC11 Then
'        MsgBox Target & " Geçerli TC kimlik numarası", vbInformation, "Bilgilendirme !"
    Else
        MsgBox Target & " Geçersiz TC kimlik numarası", vbExclamation, "Dikkat !"
    End If
10:
End Sub

Silme kodları:

Kod:
Private Sub CommandButton2_Click()
Sheets("sayfa1").Select
Dim cevap
Dim i
cevap = MsgBox("Seçili Kaydı Silmek istediğinizden Eminmisiniz ? Bu işlem geri alınamaz !! ", vbYesNo + vbQuestion, " Veri siliniyor.....")
a = Selection.Row
If cevap = vbYes Then
   ' Rows(Rows.Count).Copy Rows(Selection.Row)
    'Selection = ""
    Rows(a).EntireRow.Delete
End If
Range("A1").Select
MsgBox "Verileriniz geri alınamaz şekilde Silindi. Hata sonucu sildiyseniz tekrar yeni veri olarak girmeniz gerek.", , "Veri silindi"
'CommandButton19_Click
TextBox1 = ""
TextBox2 = ""


ThisWorkbook.Save
End Sub

Korhan Bey'e uyarısı için teşekkürler. Normalde o pasif satırını sıkça kullanırım. Deneme yaparken hata verirse tekrar aktifleltşrmek için makro kullanırım ve normal kullanımda hata vermeyecek şekilde ayarlarım. Tabi normal dışı durumları da düşünmek gerekir.
 
Günaydın Sn Yusuf44 ,

Uygulayarak ve kodları karşılaştırarak deneyeceğim , ancak öz işler nedeni ile olasılıkla gece zamanlarında cevap gönderebileceğim .

Dikkatleriniz ve uyarılarınız ile sorumu gıyabımda tetkik etmeye devam ettiğiniz için müteşekkirim.
 
Sayın Yusuf44 ,

Yenilediğiniz kod düzeni ile kendi anadosyamda yaptığım denemelerde ki , sanırım 20 satır oldu ; hiç hata üretmedi ve sorunsuz olarak isteneni verdiği görünüyor.

Bir muamma'yı Sayın Ayhan'ın uyarısı üzerine daha kullanışlı halde tekrar çözdünüz :) Bu şekilde sırf benim değil ama konuya ihtiyacı olan gelecekteki kişilere de bir kere daha ışık tutmuş oldunuz ..

Tekrar tekrar teşekkür ederim , elinize sağlık :)
 
Günaydın. İf satırında or ve and ile ek şartlar arandığında kod tüm şartları kontrol etmeden diğer satıra geçmiyor. Örneğin "hücre boş değilse ve 11 karakterden farklıysa" şartında beklenen, boş ise alt satıra geçmesidir. Ama kod boş olmadığı halde bir de uzunluk kontrolü yapıyor. Hücre boş olduğundan ya da silindiğinden uzunluğu ölçemediği için de o hatayı oluşturuyor diye düşünüyorum. Bu nedenle şartları bölerek çözüm bulmaya çalıştım.
 
Başka bir dosyayı incelerken fark ettim ki bu haliyle de sıkıntı var. Şöyle ki veri girilmiş hücrede manuel olarak silme yapılırsa yine TC kimlik no doğrulama yapmaya çalışıyor ve yapamadığı için de hata veriyor. Kod şu şekilde daha doğru oldu sanki:

Kod:
Private Sub Worksheet_Change(ByVal Target As Range)

    If Intersect(Target, Range("g5:g" & Rows.Count)) Is Nothing Then Exit Sub
            
    If Selection.Count > 1 Then GoTo 10
    If Target <> "" Then
        If Len(Target) <> 11 Then
            MsgBox "TC Kimlik numarası 11 Rakamdan oluşmalıdır.", vbCritical, "Hatalı !" 'X
            Exit Sub
            Dim mod1 As Integer, mod2 As Integer, TC1 As Integer, TC2 As Integer, TC3 As Integer, TC4 As Integer, TC5 As Integer, TC6 As Integer, TC7 As Integer, TC8 As Integer, TC9 As Integer, TC10 As Integer, TC11 As Integer
            TC1 = Mid(Target, 1, 1)
            TC2 = Mid(Target, 2, 1)
            TC3 = Mid(Target, 3, 1)
            TC4 = Mid(Target, 4, 1)
            TC5 = Mid(Target, 5, 1)
            TC6 = Mid(Target, 6, 1)
            TC7 = Mid(Target, 7, 1)
            TC8 = Mid(Target, 8, 1)
            TC9 = Mid(Target, 9, 1)
            TC10 = Mid(Target, 10, 1)
            TC11 = Mid(Target, 11, 1)
            
            mod1 = ((((TC1 + TC3 + TC5 + TC7 + TC9) * 7) - (TC2 + TC4 + TC6 + TC8)) Mod 10)
            mod2 = ((TC1 + TC2 + TC3 + TC4 + TC5 + TC6 + TC7 + TC8 + TC9 + TC10) Mod 10)
    
            If mod1 = TC10 And mod2 = TC11 Then
        '        MsgBox Target & " Geçerli TC kimlik numarası", vbInformation, "Bilgilendirme !"
            Else
                MsgBox Target & " Geçersiz TC kimlik numarası", vbExclamation, "Dikkat !"
            End If
        End If
    End If
10:
End Sub
 
Değerli Üstatlarım;

Gününüz aydınlık, neşeniz yerinde ve kazancınız bol olsun.

Rica etsem; sizin gibi üstatların el değdiği dosyanın, en son halini paylaşmanız mümkün mü?

Sevgi ve saygılar.
 
Sayın YUSUF44 ,

Manuel silmek hiç aklıma gelmedi , zira zaten sayfa gizleniyor ve işlemlerin tamamı userform üzerinden sürdürülüyor. Bu halde sorun göstermemesi doğaldı, zira kullanıcı sayfaya normalde erişemez. Ancak bariz bir arıza halinde geliştirici erişebilir şekilde hazırlandı. Yine de bu kodları yerleştirmekte fayda var, zira biz gibi amatör geliştiriciler de malum, sınırlı bir hafızaya sahibiz . Sonra oturup neden böyle yapıyor diye takılmak da var :)

Puantaj ile ilgili diğer bir çalışmanızda gördüm ki , aslında Tc ve karakter sayı kontrolü ; benzersiz tanımlaması nedeni ile doğası gereği buna dayalı veriler içeren dosyaların olmazsa olmazı. Eksikliği de dert , yanlışlığı da ...

Bu arada 14 nolu mesajdaki fikrinize katılıyorum, zira koddaki o sorun olan satır silme gerçekleştikten sonra "ben bunu bulamıyorum" tarzı bir çıkış yapıyordu.

Sayın Assenucler, dosya ; geliştirmeyi talep edenin gerçek verileri ile yüklü olduğundan sitede paylaşımını yapamam, ancak zaten kod taşırken hücre aramamak için ilk mesajda aslına birebir oturan örnek bir dosya ile soruya başlamıştım . Sayın Yusuf44 de kodları buna göre düzenlemişti.

İlk mesajdaki dosyayı indirip onun üzerinde denemeniz mümkün.
 
Teşekkürler

Sayın Cems,


Bilgilendirmeniz için teşekkür eder. Sevgi ve saygılarımı sunarım.
 
Geri
Üst