Name des Tabellenblatts noch angeben
Pascal
Mittels einer Schaltfläche (diese steht auf einer UserForm) durchsuche ich eine Datenbank nach diversen Begriffen / Texten.
Den Makro-Code oder zumindst Teile davon - für diese geniale Such-Funktion lieferte mir vor einigen Jahren mal jemand hier aus dem Forum.
Dieses Makro listet dann alle gefundenen Datensätze (die in der ganzen Datenbank, verteilt auf verschiedene Tabellenblätter verstreut sind) tabellarisch auf.
Der Code hinter der Such-Schaltfläche ist folgender:
Private Sub CommandButton1_Click()
'On Error Resume Next
Dim wb As Workbook, WS_Suche As Worksheet, oWS As Worksheet, _
rngUnion As Range, rngFund As Range
Dim strErste$, strSuchBegriff$
Dim MaxRow As Long, xCol As Long
'Hinweis: da
'Dim strErste$ = Dim strErste As String
'muß bei der weiteren Verwendung der Variable 'strErste' das $-Zeichen nicht mehr geschrieben _
werden
Set wb = ThisWorkbook
'Tabelle für die Auflistung
Set WS_Suche = wb.Worksheets("Suche")
WS_Suche.UsedRange.Clear
strSuchBegriff = Such_Formular.TextBox1.Text
If StrPtr(strSuchBegriff) = 0 Then
Exit Sub
End If
MaxRow = 1
Sheets("Suche").UsedRange.Clear
For Each oWS In ThisWorkbook.Worksheets
If oWS.Name WS_Suche.Name Then
'es wirde die Suchoption xlByRows in xlByColumns geändert, damit die Zeilen _
in der Reihenfolge sind
Set rngFund = oWS.UsedRange.Find(strSuchBegriff, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
If Not rngFund Is Nothing Then
'letzte Spalte in der gefundenen Zeile ermitteln
xCol = oWS.Cells(rngFund.Row, oWS.Columns.Count).End(xlToLeft).Column
'nicht die ganze Zeile, sondern nur die Zellen mit Inhalt in der Zeile übernehmen
Set rngUnion = rngFund.EntireRow
strErste = rngFund.Address
Set rngFund = oWS.UsedRange.FindNext(rngFund)
Do While strErste rngFund.Address
xCol = oWS.Cells(rngFund.Row, oWS.Columns.Count).End(xlToLeft).Column
Set rngUnion = Union(rngUnion, rngFund.EntireRow)
Set rngFund = oWS.UsedRange.FindNext(rngFund)
Loop
End If
If Not rngUnion Is Nothing Then
For Each rngUnion In rngUnion.Areas
rngUnion.Copy WS_Suche.Cells(MaxRow, 1)
MaxRow = MaxRow + rngUnion.Rows.Count
Next rngUnion
Set rngUnion = Nothing
End If
End If
Next oWS
Set rngFund = Nothing
Set rngUnion = Nothing
Set oWS = Nothing
If MaxRow > 1 Then
Such_Formular.CommandButton3.Visible = True
Such_Formular.CommandButton1.Visible = False
Else
Such_Formular.CommandButton3.Visible = False
Such_Formular.CommandButton1.Visible = True
End If
Such_Formular.TextBox1.Text = ""
End Sub
Nun möchte ich diesen Code so erweitern, dass er mir hinter (oder vor) den gefundenen Datensätzen auch noch der Name des Tabellblatts hinschreibt, auf welchem der entsprechende Datensatz gefunden wurde.
Doch leider brachte ich das bisher nicht hin.
Versuchte schon mehrmals vergeblich über eine Art Worksheets.name .
Ich hoffe sehr, dass mir jemand hier weiterhelfen kann.
Im voraus HERZLICHEN DANK !!!