Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bestimmte Tabellenblätter durchsuchen

Bestimmte Tabellenblätter durchsuchen
02.01.2023 22:18:09
EberhardDaniel
Guten Abend zusammen
Ich möchte zwei Suchbegriffe die sich jeweils in Spalte B und D befinden im Tabellenblatt 1 bis 6 suchen. In der Regel kommt der Suchbegriff nur einmal in einer der Tabellenblätter vor. Mit meiner Schleife durchsucht er jede Tabelle. Doch muss ich für jede Tabelle die MsgBox bestätigen. Mein Wunsch wäre, dass es zuerst die Tabellenblätter 1 bis 6 durchsucht und anschliessend die MsgBox erscheint! Wurde der Suchbegriff gefunden, sollte es mir gleich das Tabellenblatt und die Zelladresse in die Box schreiben. Ich hoffe das mir jemand dabei behilflich sein kann.
Freundliche Grüsse Daniel Eberhard

Dim NameVorname As Range
Dim Kennzeichen As Range
Dim i As Byte
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
If Not Kennzeichen Is Nothing Then
'Kunde hat Termin
MsgBox "Kunde hat Termin"
End If
Else
MsgBox "Kunde nicht gefunden"
End If
End With
Next i

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bestimmte Tabellenblätter durchsuchen
02.01.2023 22:46:06
onur
"In der Regel kommt der Suchbegriff nur einmal in einer der Tabellenblätter vor" - Dann lass das doch weg - dann bekommst du nur eine MsgBox.

            Else
MsgBox "Kunde nicht gefunden"
Dann nur noch das etwas verändern:

MsgBox "Kunde hat Termin (Blatt: " & Worksheets(i).Name & " Zelle " & NameVorname.Address

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
Anzeige
AW: Bestimmte Tabellenblätter durchsuchen
03.01.2023 16:18:18
Eberhard
Hallo Yal.
Super vielen Dank. Funktioniert.
Freundliche Grüsse Daniel Eberhard
AW: Bestimmte Tabellenblätter durchsuchen
03.01.2023 16:20:55
onur
Und wieso war meine Hilfe nicht mal eine Antwort wert ?

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige