• DİKKAT

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

Textboxda ki veriyi veritabanında aratmak

Katılım
11 Şubat 2018
Mesajlar
15
Excel Vers. ve Dili
Excel 2016 VBA
Arkadaşlar merhaba. Bi nöbet listem var ve listeyi düşey ara ve yatay ara ile düzenledim.

Daha sonra bunu bi userforma bağlayıp, veri ekleyebildiğim filan güzel bi arayüz yaptım. Textbox'a veri girip düşeyaranın bağlı olduğu hücreye bağladım ancak haliyle yazdığım şahısa özel sicil sayısı (düşeyaranın bağlı olduğu unique değer) orda yoksa eğer bana "bu kişi bulunamadı" tarzı bi hata vermesini istiyorum. aklıma formülü bir türlü gelmedi, açıkçası yeniyimde.

Yardımlarınızı bekliyorum. Hepinize teşekkür ediyorum.
 
Öncelikle foruma hoş geldiniz.

Teorik olarak : aranan veriyi bulan kodların sonunda ve end sub dan önce

Kod:
Else
Msgbox" aranan veri bulunamadı "

Deneyin. Ya da bahsettiğiniz kodları taşıyan bir userformu ve atmasyon bir kaç verisi olan olan örnek bir dosyayı hazırlayarak www.dosya.tc. gibi bir dış servera zipleyerek yükleyin, linki de burada paylaşın ki , pratik çözüm de verilebilsin.
 
Merhaba, foruma hoşgeldiniz.

DÜŞEYARA işlemine ilişkin kodları bilemediğim icin formül mantığına göre cevap vermek istedim. Kodlar da bu mantık üzerine kurulabilir.

Kod:
=[COLOR="red"]EĞERHATA[/COLOR]([COLOR="Red"]DÜŞEYARA[/COLOR]([COLOR="Blue"]......[/COLOR]);"Bu Kişi Bulunamadı.")
[B]veya[/B]
=[COLOR="red"]EĞER[/COLOR]([COLOR="red"]EĞERSAY[/COLOR]([COLOR="Blue"]...tablonun [B]ilk sütunu[/B]... [/COLOR][B][COLOR="Red"];[/COLOR][/B] [COLOR="blue"]...TextBox metni...[/COLOR])=0;"Bu Kişi Bulunamadı"[B][COLOR="Red"];[/COLOR][/B][COLOR="red"]DÜŞEYARA[/COLOR]([COLOR="Blue"]...TextBox metni...[/COLOR][B][COLOR="Red"];[/COLOR][/B][COLOR="Blue"] ...tablo alanı ..[/COLOR].[B][COLOR="Red"];[/COLOR][/B][COLOR="blue"]...sütun indis sayısı...[/COLOR][B][COLOR="red"];[/COLOR][/B]0))
 
Merhaba, foruma hoşgeldiniz.

DÜŞEYARA işlemine ilişkin kodları bilemediğim icin formül mantığına göre cevap vermek istedim. Kodlar da bu mantık üzerine kurulabilir.

Kod:
=[COLOR="red"]EĞERHATA[/COLOR]([COLOR="Red"]DÜŞEYARA[/COLOR]([COLOR="Blue"]......[/COLOR]);"Bu Kişi Bulunamadı.")
[B]veya[/B]
=[COLOR="red"]EĞER[/COLOR]([COLOR="red"]EĞERSAY[/COLOR]([COLOR="Blue"]...tablonun [B]ilk sütunu[/B]... [/COLOR][B][COLOR="Red"];[/COLOR][/B] [COLOR="blue"]...TextBox metni...[/COLOR])=0;"Bu Kişi Bulunamadı"[B][COLOR="Red"];[/COLOR][/B][COLOR="red"]DÜŞEYARA[/COLOR]([COLOR="Blue"]...TextBox metni...[/COLOR][B][COLOR="Red"];[/COLOR][/B][COLOR="Blue"] ...tablo alanı ..[/COLOR].[B][COLOR="Red"];[/COLOR][/B][COLOR="blue"]...sütun indis sayısı...[/COLOR][B][COLOR="red"];[/COLOR][/B]0))

Cevaplarınız için teşekkür ederim. İstediğim dosyanın benzerini yapıp açıklamaları yazdım. Kontrol edip dönüş yapabilir misiniz?
http://s3.dosya.tc/server13/gige8x/deneme.rar.html
 
Chrome tarayıcısı güvenlik ile ilgili bir uyarı vererek, verdiğiniz harici bağlantı adresi üzerinden örnek dosyanın indirme işlemini durduruyor.
İsterseniz bir de dosyaupload.com paylaşım sitesini deneyin.
 
Tekrar merhaba.

Gerçek userform ve kodlarınızı paylaşmadığınıza göre ancak aşağıdaki gibi bir cevap verebiliyorum.

İstediğiniz birçok şekilde yapılabilir. Aklıma ilk gelen aşağıdaki gibi bir kod.
(TextBox'un özelliklerinden ControlSource satırını boş bırakmanızda yarar var sanırım.)

Ayrıca sicil numarasının 3 karakter şeklinde standart olduğunu varsayarak,
3 karakter yazıldıktan sonra işlem yapılması ( <<<=== şeklinde işaretledim ) için bir satır ekledim.
Doğru sicil numarası yazıldığında Sayfa2'deki formüllerin yerine gerekli veriler 3'üncü satırına DEĞER olarak yazdırılır,
yanlış sicil numarası yazılmışsa 3'üncü satırdaki veriler silinir.
.
Kod:
[B]Private Sub TextBox1_Change()[/B]
If Len(TextBox1) < 3 Then Exit Sub  '[COLOR="red"]<<<===[/COLOR]
If WorksheetFunction.CountIf(Sheets("veritabanı").Range("A2:A" & _
    Sheets("veritabanı").Cells(Rows.Count, 1).End(3).Row), CLng(TextBox1)) = 0 Then
   [COLOR="Red"] Sheets("Sayfa2").Range("A3:E3") = ""[/COLOR]
    MsgBox "Yazılan sicil numarası veritabanında yok. Yeniden deneyiniz.", vbCritical
Else
    [B]satir[/B] = WorksheetFunction.Match(CLng(TextBox1), Sheets("veritabanı").Range("A2:A" & _
            Sheets("veritabanı").Cells(Rows.Count, 1).End(3).Row), 0) + 1
[COLOR="blue"]    Sheets("Sayfa2").[A3] = CLng(TextBox1)
    Sheets("Sayfa2").[B3] = Sheets("veritabanı").Range("B" & satir)
    Sheets("Sayfa2").[C3] = Sheets("veritabanı").Range("C" & satir)
    Sheets("Sayfa2").[D3] = Sheets("veritabanı").Range("D" & satir)
    Sheets("Sayfa2").[E3] = Sheets("veritabanı").Range("E" & satir)[/COLOR]
    MsgBox "Yazdığınız sicil numarası, veritabanının" & vbLf & _
    satir & " numaralı satırında kayıtlı olup B:E sütun aralığına gerekli bilgiler yazdırıldı.", vbInformation
End If
[B]End Sub[/B]
 
Kod ile uygulamada , veritabanı sayfasını kontrol eden userform üzerinde ara ve kaydet tuşları yerleştirildi.

Ekteki dosyayı kontrol ediniz .

http://s3.dosya.tc/server14/1u8eb9/veri_bulunamadi.rar.html

Yine de , cevap gönderdikten sonra gördüğüm Sayın Baran'ın gönderdiği çözümün benim önerimden daha sağlıklı olduğunu da eklemem gerek :) Şiir kitabı okur gibi oluyor insan ; kodları okurken .. :)
 
Son düzenleme:
Yanlış nesne ayarlarınızı farketmemiştim , sorun çıkardığını farkedince mevcut userform1 i silip yeni bir userform1 üzerine nesneleri ve kodları ekledim .

Bu şekilde yenilenen yapıyı bir önceki cevabımdaki linki iptal ederek yeniden yükledim
 
Son düzenleme:
Tekrar merhaba.

Gerçek userform ve kodlarınızı paylaşmadığınıza göre ancak aşağıdaki gibi bir cevap verebiliyorum.

İstediğiniz birçok şekilde yapılabilir. Aklıma ilk gelen aşağıdaki gibi bir kod.
(TextBox'un özelliklerinden ControlSource satırını boş bırakmanızda yarar var sanırım.)

Ayrıca sicil numarasının 3 karakter şeklinde standart olduğunu varsayarak,
3 karakter yazıldıktan sonra işlem yapılması ( <<<=== şeklinde işaretledim ) için bir satır ekledim.
Doğru sicil numarası yazıldığında Sayfa2'deki formüllerin yerine gerekli veriler 3'üncü satırına DEĞER olarak yazdırılır,
yanlış sicil numarası yazılmışsa 3'üncü satırdaki veriler silinir.
.
Kod:
[B]Private Sub TextBox1_Change()[/B]
If Len(TextBox1) < 3 Then Exit Sub  '[COLOR="red"]<<<===[/COLOR]
If WorksheetFunction.CountIf(Sheets("veritabanı").Range("A2:A" & _
    Sheets("veritabanı").Cells(Rows.Count, 1).End(3).Row), CLng(TextBox1)) = 0 Then
   [COLOR="Red"] Sheets("Sayfa2").Range("A3:E3") = ""[/COLOR]
    MsgBox "Yazılan sicil numarası veritabanında yok. Yeniden deneyiniz.", vbCritical
Else
    [B]satir[/B] = WorksheetFunction.Match(CLng(TextBox1), Sheets("veritabanı").Range("A2:A" & _
            Sheets("veritabanı").Cells(Rows.Count, 1).End(3).Row), 0) + 1
[COLOR="blue"]    Sheets("Sayfa2").[A3] = CLng(TextBox1)
    Sheets("Sayfa2").[B3] = Sheets("veritabanı").Range("B" & satir)
    Sheets("Sayfa2").[C3] = Sheets("veritabanı").Range("C" & satir)
    Sheets("Sayfa2").[D3] = Sheets("veritabanı").Range("D" & satir)
    Sheets("Sayfa2").[E3] = Sheets("veritabanı").Range("E" & satir)[/COLOR]
    MsgBox "Yazdığınız sicil numarası, veritabanının" & vbLf & _
    satir & " numaralı satırında kayıtlı olup B:E sütun aralığına gerekli bilgiler yazdırıldı.", vbInformation
End If
[B]End Sub[/B]

Çok teşekkür ederim şimdi deneyeceğim, ancak yanlış anlamadı isem 3. satırın komple silinmesi durumu nasıl oluyor? eğer satır silinir ise orda ki formüllerde silinecektir
 
Tekrar merhaba.

Gerçek userform ve kodlarınızı paylaşmadığınıza göre ancak aşağıdaki gibi bir cevap verebiliyorum.

İstediğiniz birçok şekilde yapılabilir. Aklıma ilk gelen aşağıdaki gibi bir kod.
(TextBox'un özelliklerinden ControlSource satırını boş bırakmanızda yarar var sanırım.)

Ayrıca sicil numarasının 3 karakter şeklinde standart olduğunu varsayarak,
3 karakter yazıldıktan sonra işlem yapılması ( <<<=== şeklinde işaretledim ) için bir satır ekledim.
Doğru sicil numarası yazıldığında Sayfa2'deki formüllerin yerine gerekli veriler 3'üncü satırına DEĞER olarak yazdırılır,
yanlış sicil numarası yazılmışsa 3'üncü satırdaki veriler silinir.
.
Kod:
[B]Private Sub TextBox1_Change()[/B]
If Len(TextBox1) < 3 Then Exit Sub  '[COLOR="red"]<<<===[/COLOR]
If WorksheetFunction.CountIf(Sheets("veritabanı").Range("A2:A" & _
    Sheets("veritabanı").Cells(Rows.Count, 1).End(3).Row), CLng(TextBox1)) = 0 Then
   [COLOR="Red"] Sheets("Sayfa2").Range("A3:E3") = ""[/COLOR]
    MsgBox "Yazılan sicil numarası veritabanında yok. Yeniden deneyiniz.", vbCritical
Else
    [B]satir[/B] = WorksheetFunction.Match(CLng(TextBox1), Sheets("veritabanı").Range("A2:A" & _
            Sheets("veritabanı").Cells(Rows.Count, 1).End(3).Row), 0) + 1
[COLOR="blue"]    Sheets("Sayfa2").[A3] = CLng(TextBox1)
    Sheets("Sayfa2").[B3] = Sheets("veritabanı").Range("B" & satir)
    Sheets("Sayfa2").[C3] = Sheets("veritabanı").Range("C" & satir)
    Sheets("Sayfa2").[D3] = Sheets("veritabanı").Range("D" & satir)
    Sheets("Sayfa2").[E3] = Sheets("veritabanı").Range("E" & satir)[/COLOR]
    MsgBox "Yazdığınız sicil numarası, veritabanının" & vbLf & _
    satir & " numaralı satırında kayıtlı olup B:E sütun aralığına gerekli bilgiler yazdırıldı.", vbInformation
End If
[B]End Sub[/B]

Ömer Baran bey şimdi inceledim hepsini, gayet güzel olmuş ama ControlSource'yi neden boş bırakmam gerektiğini anlamadım
 
Tekrar merhaba.
Bilgisayar başında değilim.
Ben olsam o alana SİCİL NO yazardım.
Kodların işleyişi ile ilgili bir durum yok.
Yazacağınız metin userformu açtığınızda textboxta görünür.

Ayrıca; mesajlarınızda sadece gerektiğinde ve sadece mesajın ilgili kısmını alıntılarsanız; forum sayfaları gereksiz şiymeyeceğini hatırlatmak isterim.
 
Geri
Üst