Microsoft Excel

Herbers Excel/VBA-Archiv

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

Suche nur über bestimmte Tabellenblätter?

Betrifft: Suche nur über bestimmte Tabellenblätter? von: Victor
Geschrieben am: 22.10.2014 14:28:28

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?

  

Betrifft: AW: Suche nur über bestimmte Tabellenblätter? von: Tino
Geschrieben am: 22.10.2014 14:55:08

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


  

Betrifft: AW: Suche nur über bestimmte Tabellenblätter? von: Victor
Geschrieben am: 22.10.2014 15:07:52

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.


  

Betrifft: Bei mir nicht in meinem Nachbau! von: Tino
Geschrieben am: 22.10.2014 15:13:48

Hallo,

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

Gruß Tino


  

Betrifft: AW: Bei mir nicht in meinem Nachbau! von: Victor
Geschrieben am: 22.10.2014 15:42:25

Stimmt. Ich schau mal, wo ich einen Denkfehler habe.


  

Betrifft: Nah dran... von: Victor
Geschrieben am: 22.10.2014 15:55:15

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


  

Betrifft: AW: Nah dran... von: Tino
Geschrieben am: 22.10.2014 16:23:44

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


  

Betrifft: Perfekt gelöst - Danke! von: Victor
Geschrieben am: 22.10.2014 16:43:46

Genau so sollte es funktionieren - und ich habe nebenbei dazu gelernt. Danke Tino!


  

Betrifft: naja von: Tino
Geschrieben am: 22.10.2014 17:02:16

Hallo,
ich würde die Find Funktion verwenden anstatt alle Zellen einzeln abzuklappern.

Gruß Tino


  

Betrifft: AW: naja von: Victor
Geschrieben am: 22.10.2014 17:15:05

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.


 

Beiträge aus den Excel-Beispielen zum Thema "Suche nur über bestimmte Tabellenblätter?"