Mit VBA eine suche erstellen

Also ich habe eine Maske erstelle mit der ich aus einer datenbank daten abfragen will. mein problem ist das ich zwei möglichkeiten habe etwas zu suchen. einmal über den Namen, wird von TextBox20 ausgelesen und dann über die Personal Nr. wird über TextBox21 ausgelesen.
mein problem ist das die Namen suche funktioniert nur leider die Personal Nummer nicht… Spersonr ist die personalnummer.

also er geht dann immer bis 65550 und meldet dann einfehler weil er nichts findet.

dann hab ich noch eine frage, wie kann ich es machen das wenn er nichts findet dann soll er es in anzeigen. und nicht auf debuggen gehn. und wie könnte ich es machen wenn es mehrere möglichkeiten gibt, weil bei namen gibt ja leute mit den gleichen Namen?

Hier ist mein CODE :wink: wohl bemerkt ist mein erste selbst geschriebener Code bin also für verbesserungen immer sehr erfreut :wink:

Private Sub CommandButton1\_Click()

Sname = Me.TextBox20 ' "Nach Namen suchen" einlesen
Spersonr = Me.TextBox21 ' "Nach Personal Nr. suchen" einlesen


z = 2
If Sname "" Then
 Do While Sheets("Stammdaten").Cells(z, 3) Sname
 z = z + 1
 Loop
End If

If Spersonr "" Then
 Do While Sheets("Stammdaten").Cells(z, 2) Spersonr
 z = z + 1
 Loop
End If


Me.TextBox1 = Sheets("Stammdaten").Cells(z, 2) ' Personal Nummer Auslesen
Me.TextBox2 = Sheets("Stammdaten").Cells(z, 3) ' Name einlesen
Me.TextBox3 = Sheets("Stammdaten").Cells(z, 4) ' Vorname einlesen
Me.TextBox4 = Sheets("Stammdaten").Cells(z, 5) ' Strasse, Nr. einlesen
Me.TextBox5 = Sheets("Stammdaten").Cells(z, 6) ' Postleitzahl einlesen
Me.TextBox6 = Sheets("Stammdaten").Cells(z, 7) ' Wohnort einlesen
Me.TextBox7 = Sheets("Stammdaten").Cells(z, 12) ' Handy Nr einlesen
Me.TextBox8 = Sheets("Stammdaten").Cells(z, 10) ' Haus Tel Nr einlesen
Me.TextBox9 = Sheets("Stammdaten").Cells(z, 11) ' Geburtsdatum einlesen
Me.TextBox10 = Sheets("Stammdaten").Cells(z, 13)

End Sub

Ich bedanke mich schon ein mal für die Hilfe.

mfg
Leo

hallo Leo,

Also ich habe eine Maske erstelle mit der ich aus einer
datenbank daten abfragen will. mein problem ist das ich zwei
möglichkeiten habe etwas zu suchen. einmal über den Namen,
wird von TextBox20 ausgelesen und dann über die Personal Nr.
wird über TextBox21 ausgelesen.
mein problem ist das die Namen suche funktioniert nur leider
die Personal Nummer nicht… Spersonr ist die personalnummer.

eine Textbox liefert immer einen String, kann sein daß der nicht gefunden wird wenn in den zellen keine Strings sondern zahlen stehen.

ungetestete Abhilfe: Spersonr = Cint(Me.TextBox21)

dann hab ich noch eine frage, wie kann ich es machen das wenn
er nichts findet dann soll er es in anzeigen. und nicht auf
debuggen gehn.

in was anzeigen?

Anstatt der beiden For-Schleifen könntest du auch

If Application.CountIf(...) \> 1 Then
 zz=application.match(...) 
Else
 Msgbox "begriff nicht gefunden"
End If

CountIf ist Zählenwenn und hat die gleiche parameterfolge allerdings in Vba-Schreibweise.
Match ist genauso, entspricht vergleich().

und wie könnte ich es machen wenn es mehrere
möglichkeiten gibt, weil bei namen gibt ja leute mit den
gleichen Namen?

Dann kann Vba dir alle auflisten die so heißen oder Vba braucht noch eine Info, z.B. den Vornamen.

Hier ist mein CODE :wink: wohl bemerkt ist mein erste selbst
geschriebener Code bin also für verbesserungen immer sehr
erfreut :wink:

Ich verstehe die Logik nicht. Erst suchst du nach dem namen, wenn gefunden hat z die zeilennummer. Ab diesem z suchst du dann die personalnummer.
Ist es das was du auch willst?

Gruß
Reinhard

eine Textbox liefert immer einen String, kann sein daß der
nicht gefunden wird wenn in den zellen keine Strings sondern
zahlen stehen.

ungetestete Abhilfe: Spersonr = Cint(Me.TextBox21)

Das probier ich morgen dann mal aus, hmm also muss so zu sagen der String erst in eine Integer oder so geändert werde, das kann gut sein. das ist ein guter tip danke.

Anstatt der beiden For-Schleifen könntest du auch

If Application.CountIf(…) > 1 Then
zz=application.match(…)
Else
Msgbox „begriff nicht gefunden“
End If

CountIf ist Zählenwenn und hat die gleiche parameterfolge
allerdings in Vba-Schreibweise.
Match ist genauso, entspricht vergleich().

Ich werd es mal ausprobieren ob ich es damit hin bekomm :wink:
was heisst denn zz? weil ich hab ja als variabel nur z.

Ich verstehe die Logik nicht. Erst suchst du nach dem namen,
wenn gefunden hat z die zeilennummer. Ab diesem z suchst du
dann die personalnummer.
Ist es das was du auch willst?

Nee ich will das er entweder nach dem namen sucht oder die personal nummer. also es bleibt eine box dann immer leer deshalb immer die prüfung ob die box nicht leer ist.

ja mit dem Anzeigen wenn es falsch ist meinte ich sowas wie

Msgbox "begriff nicht gefunden"

Danke schon mal für die hilfe. :smiley: