• DİKKAT

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

find Lookat Problemini aşamıyorum nerde hatam var

Katılım
3 Haziran 2022
Mesajlar
10
Excel Vers. ve Dili
excel
Herkese merhaba "Login" isimli sayfa İÇERİSİNDE; A Sütünu kullanıcıadi, B sütunu şifre olmak üzere örnek tablo aşağıdaki gibidir.Formumda 3a det txtbox ve bir adet kaydet butonu var.
A B
354671 12345
359767 12345
364699 12345
370995 12345
375467 12345

Private Sub btnKaydet_Click()
Aranan = txtKullaniciadi.Value
Range("A:A").Find(What:=Aranan, LookAt:=xlWhole).Select 'Hata aldığım kısım burası.'
degisecek_satir = ActiveCell.Row



If Worksheets("Login").Cells(degisecek_satir, 1) = txtKullaniciadi.value and Worksheets("Login").Cells(degisecek_satir, 2)=txteskiSifre.value

Worksheets("Login").Range("B" & degisecek_satir) = txtYeniSifre.Value
msgbox "Şifre Değiştirildi."

else
msgbox "sifre hatalı"
end if
exit sub


Lookat:=xlWhole kullanmak zorundayım cünkü tam eşleşme olsun istiyorum.Eğer A sutunundaki veriyi txtkullanici adi kısmına tam ve doğru yazdığıgımda problem yok yeni şifreyi eskisiyle değiştirebiliyor.ANCAK,kullanıcı 36469 yazdığında veya tablo içinde olmayan herhangi bir sayı yazdığımda hata alıyorum.Aklım durdu çok uğraştım yapamadım yardım ederseniz çok sevinirim
 
Örnek bir dosya olsaydı o hataları biz de alabilir, çözüm için deneme yanılma yapabilirdik.
 
Arama işlemi yerine sayma işlemi ile yapabilirsiniz.
Kod:
Private Sub btnKaydet_Click()
Aranan = txtKullaniciadi.Value

If WorksheetFunction.CountIf(Worksheets("Login").Range("A:A"), Aranan) > 0 Then
'Range("A:A").Find(What:=Aranan, LookAt:=xlWhole).Select 'Hata aldığım kısım burası.'
    degisecek_satir = ActiveCell.Row
    If Worksheets("Login").Cells(degisecek_satir, 1) = txtKullaniciadi.Value And Worksheets("Login").Cells(degisecek_satir, 2) = txteskiSifre.Value Then
        Worksheets("Login").Range("B" & degisecek_satir) = txtYeniSifre.Value
        MsgBox "Şifre Değiştirildi."
    End If
Else
    MsgBox "sifre hatalı"
End If
End Sub
 
Aşağıdaki kodları deneyin:

PHP:
Private Sub btnKaydet_Click()
Aranan = TextBox1.Value
If WorksheetFunction.CountIf([A:A], Aranan) = 0 Then
    MsgBox "Lütfen kullanıcı adını düzeltiniz", vbInformation
    TextBox1.SetFocus
    Exit Sub
Else
    Range("A:A").Find(What:=Aranan, LookAt:=xlWhole).Select
    degisecek_satir = ActiveCell.Row
    If Worksheets("Login").Cells(degisecek_satir, 1) = TextBox1.Value And Worksheets("Login").Cells(degisecek_satir, 2) = TextBox2.Value Then
        Worksheets("Login").Range("B" & degisecek_satir) = TextBox3.Value
        MsgBox "Şifre Güncellendi."
    Else
        MsgBox "Sicil veya şifreniz hatalı"
    End If
End If
End Sub

Sayın @AdemCan da benzer biz çözüm sunmuş zaten.
 
Aşağıdaki kodları deneyin:

PHP:
Private Sub btnKaydet_Click()
Aranan = TextBox1.Value
If WorksheetFunction.CountIf([A:A], Aranan) = 0 Then
    MsgBox "Lütfen kullanıcı adını düzeltiniz", vbInformation
    TextBox1.SetFocus
    Exit Sub
Else
    Range("A:A").Find(What:=Aranan, LookAt:=xlWhole).Select
    degisecek_satir = ActiveCell.Row
    If Worksheets("Login").Cells(degisecek_satir, 1) = TextBox1.Value And Worksheets("Login").Cells(degisecek_satir, 2) = TextBox2.Value Then
        Worksheets("Login").Range("B" & degisecek_satir) = TextBox3.Value
        MsgBox "Şifre Güncellendi."
    Else
        MsgBox "Sicil veya şifreniz hatalı"
    End If
End If
End Sub

Sayın @AdemCan da benzer biz çözüm sunmuş zaten.
Birinci else den sonra işleme geçmiyor benim kodlarımda da sıkıntı var sanırım Yusuf bey
 
Alternatif;

FIND (BUL / CTRL+F) komutu sayfada veriyi bulamazsa hata verir. Bu sebeple SET'leyerek kullanmakta fayda vardır. Aşağıdaki örnek kodlamada bu yapı kullanılmıştır.

Ayrıca TextBox nesnesi adı üstünde metin kutusudur. Bu nesneye yazacağınız sayısal verilerde VBA tarafında metin şeklinde değerlendirilmektedir. Bu sebeple sorgu satırlarını buna göre düzenlemek fayda sağlayacaktır.

C++:
Private Sub btnKaydet_Click()
    Dim S1 As Worksheet, Aranan As Variant, Bul As Range
   
    Set S1 = Sheets("Login")
   
    Aranan = TextBox1.Value
   
    Set Bul = S1.Range("A:A").Find(What:=Aranan, LookAt:=xlWhole)
   
    If Not Bul Is Nothing Then
        If CStr(S1.Cells(Bul.Row, 1)) = TextBox1.Value And CStr(S1.Cells(Bul.Row, 2)) = TextBox2.Value Then
            S1.Cells(Bul.Row, 2) = TextBox3.Value
            MsgBox "Şifre güncellendi.", vbInformation
        Else
            MsgBox "Sicil veya şifreniz hatalı!", vbCritical
        End If
    Else
        MsgBox "Kullanıcı bulunamadı!", vbCritical
    End If
   
    Set Bul = Nothing
    Set S1 = Nothing
End Sub
 
Alternatif;

FIND (BUL / CTRL+F) komutu sayfada veriyi bulamazsa hata verir. Bu sebeple SET'leyerek kullanmakta fayda vardır. Aşağıdaki örnek kodlamada bu yapı kullanılmıştır.

Ayrıca TextBox nesnesi adı üstünde metin kutusudur. Bu nesneye yazacağınız sayısal verilerde VBA tarafında metin şeklinde değerlendirilmektedir. Bu sebeple sorgu satırlarını buna göre düzenlemek fayda sağlayacaktır.

C++:
Private Sub btnKaydet_Click()
    Dim S1 As Worksheet, Aranan As Variant, Bul As Range
  
    Set S1 = Sheets("Login")
  
    Aranan = TextBox1.Value
  
    Set Bul = S1.Range("A:A").Find(What:=Aranan, LookAt:=xlWhole)
  
    If Not Bul Is Nothing Then
        If CStr(S1.Cells(Bul.Row, 1)) = TextBox1.Value And CStr(S1.Cells(Bul.Row, 2)) = TextBox2.Value Then
            S1.Cells(Bul.Row, 2) = TextBox3.Value
            MsgBox "Şifre güncellendi.", vbInformation
        Else
            MsgBox "Sicil veya şifreniz hatalı!", vbCritical
        End If
    Else
        MsgBox "Kullanıcı bulunamadı!", vbCritical
    End If
  
    Set Bul = Nothing
    Set S1 = Nothing
End Sub
Çok teşekkür ediyorum Korhan hocam,
 
Geri
Üst