Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Suche nur über bestimmte Tabellenblätter?
22.10.2014 14:28:28
Victor
Hallo,
nachdem ich nun schon häufig als "passiver" Nutzer viele Anregungen in diesem Forum mitnehmen konnte, steige ich mal mit einem direkten Anliegen ein.
Ich habe derzeit eine Suche über die gesamte Arbeitsmappe mit folgendem Code realisiert:
Option Explicit

Sub Suche()
Call Blattschutz_aufheben
Dim suche As String
Dim z As Long
Dim Zelle As Range
Dim Blatt As Worksheet
suche = UF_Suche.TextBox1.Value
z = 0
If suche = "" Then Exit Sub
For Each Blatt In ActiveWorkbook.Worksheets
For Each Zelle In Blatt.UsedRange
If Zelle = suche Then
z = z + 1
Zelle.EntireRow.Interior.ColorIndex = 35
End If
Next Zelle
Next Blatt
MsgBox suche & " wurde " & z & " mal gefunden."
Call Blattschutz_setzen
End Sub

Ich möchte nun erreichen, dass nur im Code festgelegte Tabellenblätter (Tabelle 1 bis 5, benannt als Telefone, Bluetooth, Zubehör usw...) jeweils beginnend von Zelle A7 bis zum Ende des gefüllten Bereiches durchsucht werden. Der genutzte Daten-Bereich ist jeweils als Tabelle formatiert und mit entsprechenden Namen (Tab_Telefone, Tab_Bluetooth usw.) versehen. Wenn diese direkt angesprochen werden könnten, wäre das ideal, da sie sich ja dynamisch erweitern.
Erreichen möchte ich, dass bei Eingabe eines Suchbegriffes in Textbox1 der Userform (UF_Suche) die gefundenen Zeilen farblich unterlegt werden (funktioniert mit dem obigen Code bereits-aber eben in der gesamten Arbeitsmappe). Das sollte jetzt aber nur in den Datenbereichen (Tab_Telefone usw.) geschehen.
Mir fehlt allerdings das Know-how und ich hoffe auf eure Hilfe. Wie sollte der Code dazu aussehen?

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suche nur über bestimmte Tabellenblätter?
22.10.2014 14:55:08
Tino
Hallo,
du könntest ein Array nit den Namen der Tabellen erstellen die durchsucht werden sollen.
Beispiel nicht getestet:
Sub suche()
Dim suche As String
Dim z As Long
Dim Zelle As Range
Dim Blatt As Worksheet
Dim ArTab, n&
ArTab = Array("Tabelle1", "Tabelle2")
Call Blattschutz_aufheben
suche = UF_Suche.TextBox1.Value
z = 0
If suche = "" Then Exit Sub
With ActiveWorkbook
For n = LBound(ArTab) To UBound(ArTab)
Set Blatt = .Worksheets(ArTab(n))
For Each Zelle In Blatt.UsedRange
If Zelle = suche Then
z = z + 1
Zelle.EntireRow.Interior.ColorIndex = 35
End If
Next Zelle
Next n
End With
MsgBox suche & " wurde " & z & " mal gefunden."
Call Blattschutz_setzen
End Sub
Gruß Tino

Anzeige
AW: Suche nur über bestimmte Tabellenblätter?
22.10.2014 15:07:52
Victor
Hallo Tino,
danke für die schnelle Antwort - dein Code wirft in
Set Blatt = .Worksheets(ArTab(n))
Laufzeitfehler 9, Index außerhalb des gültigen Bereiches aus.
Unerheblich, ob ich ArTab = Array als ("Tabelle 1") oder ("Tab_Telefone") festlege.

Bei mir nicht in meinem Nachbau!
22.10.2014 15:13:48
Tino
Hallo,

Die Datei https://www.herber.de/bbs/user/93290.xlsm wurde aus Datenschutzgründen gelöscht


Gruß Tino

AW: Bei mir nicht in meinem Nachbau!
22.10.2014 15:42:25
Victor
Stimmt. Ich schau mal, wo ich einen Denkfehler habe.

Nah dran...
22.10.2014 15:55:15
Victor
Hallo Tino - wenn ich das Array mit dem Tabellenblattnamen (in meinem Fall Telefone) setze, läuft es. Allerdings werden auch Einträge außerhalb der Datenbereiche gefunden-eben das will ich vermeiden.
Hier: Die Zeilen über und unter Tab_Test1 auf Tabelle 1 und Tab_Test3 auf Tabelle 3 sollen nicht in die Suche einbezogen werden. Mit Tabelle1.Tab_Test1 habe ich wieder den Laufzeitfehler.
https://www.herber.de/bbs/user/93293.xlsm

Anzeige
AW: Nah dran...
22.10.2014 16:23:44
Tino
Hallo,
wenn Du Namen für die Bereiche verwendest,
musst Du diese als RangeBereich behandeln und nicht als Tabelle.
Sub suche()
Dim suche As String
Dim z As Long
Dim Zelle As Range
Dim rngSuchRange As Range
Dim ArTab, n&
ArTab = Array("Tab_Test1", "Tab_Test3")
Call Blattschutz_aufheben
'suche = UF_Suche.TextBox1.Value
suche = "Test-Eintrag"
z = 0
If suche = "" Then Exit Sub
For n = LBound(ArTab) To UBound(ArTab)
Set rngSuchRange = Range(ArTab(n))
For Each Zelle In rngSuchRange
If Zelle = suche Then
z = z + 1
Zelle.EntireRow.Interior.ColorIndex = 35
End If
Next Zelle
Next n
MsgBox suche & " wurde " & z & " mal gefunden."
Call Blattschutz_setzen
End Sub
Gruß Tino

Anzeige
Perfekt gelöst - Danke!
22.10.2014 16:43:46
Victor
Genau so sollte es funktionieren - und ich habe nebenbei dazu gelernt. Danke Tino!

naja
22.10.2014 17:02:16
Tino
Hallo,
ich würde die Find Funktion verwenden anstatt alle Zellen einzeln abzuklappern.
Gruß Tino

AW: naja
22.10.2014 17:15:05
Victor
Ok-Danke für den Hinweis. Wenn ich irgendwann mal soweit blicken kann versuch ich mich daran ;-). Bis dahin wird's so funktionieren-die Datenmenge in den Tabellen hält sich auch in Grenzen.

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige