Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Suche nach ID und Namen

Betrifft: Suche nach ID und Namen von: Knoof
Geschrieben am: 14.07.2014 11:42:06

Hallo,

Ich habe ein Suchfeld in dem man eine ID eingeben kann und durch den Suchen Button wird diese ID gesucht.

Ist es möglich das gleiche Feld für eine Namenssuche zu verwenden?

Sagen wir der Benutzer kennt die ID nicht, gibt den Nachnamen ein und klickt auf suche, ist das möglich? Habe es bisher noch nicht für beides hinbekommen , nur für die ID.

Private Sub cmdsuchen_Click()
Dim x As Integer
If txtsuche = "" Then
MsgBox ("Bitte füllen Sie das Suchfeld!")
Else

    Z = ActiveSheet.UsedRange.Rows.Count
    temp = 0
    x = txtsuche
        For I = 3 To Z
            If Cells(I, 1) = x Then
            temp = 1
        Exit For
            End If
Next
If temp = 1 Then

zeile = I
Rows(zeile).Select

MsgBox ("Die Nummer wurde gefunden!")
End Sub

  

Betrifft: AW: Suche nach ID und Namen von: Ralf P.
Geschrieben am: 14.07.2014 12:36:16

Hallo,

eine For Schleife für die Suche ist ungünstig
Range.Find durchsucht Tausende Zellen in Bruchteilen von Sekunden, das ist besser geeignet.

Private Sub cmdsuchen_Click()
Dim x As String
dim sh as Worksheet
dim Suche as Range

set sh = activesheet

If txtsuche = "" Then
  MsgBox ("Bitte füllen Sie das Suchfeld!")
Else
   set Suche = sh.columns(1).find(x,,xlvalues,xlwhole)
'columns(1) evtl anpassen
end if

if not suche is nothing then
   sh.Rows(suche.row).Select
   MsgBox ("Die Nummer wurde gefunden!")
else
   MsgBox ("Die Nummer wurde NICHT gefunden!")
end if

End Sub
Gruß
Ralf


  

Betrifft: AW: Suche nach ID und Namen von: UweD
Geschrieben am: 14.07.2014 12:40:15

Hallo

so auf die Schnelle abgeändert.....

Private Sub cmdsuchen_Click()
    Dim x As Integer
    Dim SP1 As Integer, SP2 As Integer
    SP1 = 1 ' Erste Suchspalte
    SP2 = 2 ' Zweite Suchspalte
    If txtsuche = "" Then
        MsgBox ("Bitte füllen Sie das Suchfeld!")
    Else

        Z = ActiveSheet.UsedRange.Rows.Count
        temp = 0
        x = txtsuche
        For I = 3 To Z
            If Cells(I, SP1) = x Or Cells(I, SP2) Then
                temp = 1
                Exit For
            End If
        Next
        If temp = 1 Then

            zeile = I
            Rows(zeile).Select

            MsgBox ("Die Nummer wurde gefunden!")
        End If
    End If
End Sub
geht aber auch ohne Schleife mit hilfe von Find...


Gruß UweD


  

Betrifft: AW: Suche nach ID und Namen von: Knoof
Geschrieben am: 14.07.2014 12:49:55

Hallo Uwe,

Danke für deine Antwort.
Leider bekomme ich die Fehlermeldung "Typen unverträglich" in der Zeile

If Cells(I, SP1) = x Or Cells(I, SP2) Then

Ich versteh nicht wieso.

Und SP2 müsste als String deklariert werden da ja nach einem Namen gesucht werden soll.

Gruß, Knoof


  

Betrifft: AW: uppps von: UweD
Geschrieben am: 14.07.2014 12:58:41

If Cells(I, SP1) = x Or Cells(I, SP2) = x Then


  

Betrifft: AW: uppps von: Knoof
Geschrieben am: 14.07.2014 13:14:50

Leider gehts immernoch nicht.
Wenn ich einen Namen als Suchkriterium eingebe kommt der Fehler "Typen unverträglich" das wird wohl daran liegen das x also txtsuche als integer festgelegt ist und der mit dem eingegebenen Namen nicht arbeiten kann.


  

Betrifft: AW: uppps von: UweD
Geschrieben am: 14.07.2014 16:37:42

Hallo nochmal.

Wenn der NAME auch Text sein kann, dann ist genau das der Fehler...

Dim x As String oder
Dim x As Variant

Gruß UweD


  

Betrifft: AW: uppps von: Knoof
Geschrieben am: 15.07.2014 08:21:19

Hallo nochmal :D,

Gut dann sind wir schonmal einen Schritt weiter. Dim x As String würde ja keinen Sinn machen da x ja entweder die ID ist also Integer oder x ist der Name nach dem gesucht wird also String, also denke ich das Variant in Frage kommt.

Nun gibts den Fehler 1004: Anwendungs- oder objektdefinierter Fehler.
Ebenfalls in der Zeile : If Cells(I, SP1) = x Or Cells(I, SP2) = x Then

Wenn ich Or Cells(I, SP2) = x Then heraus nehme ist es kein Problem nach der ID zu suchen, da taucht kein Fehler auf.

Gruß,
Knoof


  

Betrifft: AW: uppps von: UweD
Geschrieben am: 15.07.2014 09:02:37

Hallo nochmal

Die ID (als Zahl vorliegend) kann doch im Makro als Text interpretiert werden.
Ich würde als String deklarieren.

Stell doch mal eine Musterdatei hier hoch...


  

Betrifft: AW: uppps von: Knoof
Geschrieben am: 15.07.2014 09:37:43

Okay ich habe eine Beispieldatei vorbereitet

https://www.herber.de/bbs/user/91507.xlsm


Gebe in die Suche die ID 1111 ein, das klappt einwandfrei, nun soll in das suchfeld ebenfalls zB ein Nachname eingegeben werden undderjenige soll nun auch gefunden werden.


  

Betrifft: AW: uppps von: UweD
Geschrieben am: 15.07.2014 10:03:25

Auf x kann komplett verzichtet werden.

txtsuche wird bereits als String übergeben...

Private Sub cmdsuchen_Click()
    Dim SP1 As Integer, SP2 As Integer
    SP1 = 1 ' Erste Suchspalte
    SP2 = 3 ' Zweite Suchspalte
    If txtsuche = "" Then
        MsgBox ("Bitte füllen Sie das Suchfeld!")
    Else
        Z = ActiveSheet.UsedRange.Rows.Count
        temp = 0
        For I = 3 To Z
            If Cells(I, SP1) = txtsuche Or Cells(I, SP2) = txtsuche Then
                temp = 1
                Exit For
            End If
        Next
        If temp = 1 Then
            zeile = I
            Rows(zeile).Select
            MsgBox ("Suchbegriff wurde gefunden!")
        Else
            Rows(1).Select
            MsgBox ("Suchbegriff wurde NICHT gefunden!")
        End If
    End If
    Unload UserForm1
End Sub

Gruß UweD


  

Betrifft: AW: uppps von: UweD
Geschrieben am: 15.07.2014 10:09:46

da war ich doch noch zu schnell...


so aber

If Cells(i, SP1) = CStr(txtsuche) Or Cells(i, SP2) = txtsuche Then


Gruß UweD


  

Betrifft: AW: uppps von: Knoof
Geschrieben am: 15.07.2014 10:17:42

Vielen Dank !