AW: Bestimmte Tabellenblätter durchsuchen
02.01.2023 23:33:30
Yal
Moin Daniel,
(Gut dass Du einen Zusatz zur Vorname eingibst. Im Forum heisst -gefühlt- jeder zweiter Daniel ;-)
Um die Meldung nur einmal zu bekommen, musst Du diese ausserhalb der For-Schleife ablagern.
Es gibt 3 Fälle zu behandeln: NameVorname und Kennzeichen gefunden, NameVorname gefunden aber nicht Kennzeichen, NameVorname nicht gefunden (Kennzeichen ist dann egal).
Folgende Code hat die Beschränkung, dass nur immer der ersten Treffer gemeldet wird ("in der Regel nur einen Treffer")
Sub Begriff_suchen()
Dim i As Integer
Dim NameVorname As Range
Dim Kennzeichen As Range
For i = 1 To 6
With Worksheets(i)
Set NameVorname = .Columns(2).Find(Me.ListBox1.List(ListBox1.ListIndex, 0) & " " & Me.ListBox1.List(ListBox1.ListIndex, 1), lookat:=xlWhole)
Set Kennzeichen = .Columns(4).Find(Me.ListBox1.List(ListBox1.ListIndex, 4), lookat:=xlWhole)
If Not NameVorname Is Nothing Then Exit For
End With
Next i
If Not NameVorname Is Nothing Then
If Not Kennzeichen Is Nothing Then
MsgBox "Kunden in " & NameVorname.Parent.Name & "!" & NameVorname.Address(0, 0) & " gefunden," _
& vbLf & "Kennzeichen in " & Kennzeichen.Parent.Name & "!" & Kennzeichen.Address(0, 0) & " gefunden."
Else
MsgBox "Kunden in " & NameVorname.Parent.Name & "!" & NameVorname.Address(0, 0) & " gefunden," _
& vbLf & "Kennzeichen nicht gefunden."
End If
Else
MsgBox "Kunde nicht gefunden."
End If
End Sub
NameVorname ist, wenn gefunden, eine Zelle. Der Parent davon ist dann eine Worksheet, die einen Namen hat. Onur verwendet Worksheets(i).Name, was nur zutreffend ist, wenn sowohl NameVorname und Kennzeichen auf dieselben Blatt sind.
Ich entdecke, als ich das schreibe, einen potentziellen Denkfehler: die For-Schleife wird abgebrochen, ab dem Moment wo NameVorname gefunden wird (Blatt i). Wenn Kennzeichen auf Blatt i+1 oder gar später vorliegt, wird es nicht gefunden. Dafür müsste man diesen Code verwenden:
Sub Begriff_suchen()
Dim i As Integer
Dim NameVorname As Range
Dim Kennzeichen As Range
For i = 1 To 6
Set NameVorname = Worksheets(i).Columns(2).Find(Me.ListBox1.List(ListBox1.ListIndex, 0) & " " & Me.ListBox1.List(ListBox1.ListIndex, 1), lookat:=xlWhole)
If Not NameVorname Is Nothing Then Exit For
Next i
For i = 1 To 6
Set Kennzeichen = Worksheets(i).Columns(4).Find(Me.ListBox1.List(ListBox1.ListIndex, 4), lookat:=xlWhole)
If Not Kennzeichen Is Nothing Then Exit For
Next i
If Not NameVorname Is Nothing Then
If Not Kennzeichen Is Nothing Then
MsgBox "Kunden in " & NameVorname.Parent.Name & "!" & NameVorname.Address(0, 0) & " gefunden," _
& vbLf & "Kennzeichen in " & Kennzeichen.Parent.Name & "!" & Kennzeichen.Address(0, 0) & " gefunden."
Else
MsgBox "Kunden in " & NameVorname.Parent.Name & "!" & NameVorname.Address(0, 0) & " gefunden," _
& vbLf & "Kennzeichen nicht gefunden."
End If
Else
MsgBox "Kunde nicht gefunden"
End If
End Sub
Da Worksheets(i) nur einmal je Block verwendet wird, wird auf "With" verzichtet.
VG
Yal