Kleine Anpassung im Such-Code
Pascal
Vorab wünsch ich Euch allen ein gutes neues Jahr, viel Glück und immer gute Gesundheit.
Zu meiner Frage / Problem:
In einer grossen Arbeitsmappe Excel hab ich verteilt über unzählige Tabellenblätter diverse Datensätze gespeichert.
Diese können über eine Userform mittels Volltextsuche durchsucht werden.
D.h. es kann nach einem Begriff gesucht werden.
Folgender Code hab ich dazu hinter der SUCHEN-Schaltfläche meiner UserForm:
Private Sub CommandButton1_Click()
'Sheets("Suche").UsedRange.Clear
On Error Resume Next
Dim oWS As Worksheet
Dim rngUnion As Range, rngFund As Range
Dim strErste$, strSuchBegriff$
Dim MaxRow As Long
Dim WS_Suche As Worksheet
'Tabelle für die Auflistung
Set WS_Suche = Sheets("Suche")
Such_Formular.CommandButton1.Visible = False
strSuchBegriff$ = Such_Formular.TextBox1.Value
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
Set rngFund = oWS.UsedRange.Find(strSuchBegriff$, LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)
If Not rngFund Is Nothing Then
Set rngUnion = Intersect(oWS.UsedRange, oWS.Rows(rngFund.Row))
strErste$ = rngFund.Address
Set rngFund = oWS.UsedRange.FindNext(rngFund)
Do While strErste$ rngFund.Address
Set rngUnion = Union(Intersect(oWS.UsedRange, oWS.Rows(rngFund.Row)), _
rngUnion)
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
If MaxRow > 1 Then
Such_Formular.CommandButton3.Visible = True
Else
Such_Formular.CommandButton3.Visible = False
End If
Such_Formular.TextBox1.Value = ""
End Sub
Die Suche an sich selber funktioniert gut. D.h. es werden auf dem Registerblatt SUCHE alle gefundenen Einträge der Datenbank bei welchen der gesuchteBegriff gefunden wurde aufgelistet.
Es kann dan (wieder über die Userform) innerhalb dieser gefundenen Datensätzen immer weiter eingrenzend weitergesucht werden, bis man endlich beim gesuchte
Datensatz ist.
Die Auflistung der Suchresultate (Datensätze) erfolgt wie gesagt im Tabellenblatt SUCHE
Mein Problem ist nur, dass hier nicht immer gleich dargestellt / gleich formatiert aufgelistet wird.
d.h. mal beginnt das Makro die Datensätze in der Spalte A aufzulisten, mal in der Spalte B, Mal in der Spalte D etc
dies ist unschön. Und da die Datensätze teilweise unterschiedlich lang sind werden sie (da die einzelnen Spalten teilweise zu schmal sind) abgeschnitten.
Daher meine Frage an Euch Profis:
Wie könnte ich meinen obigen Code anpassen, dass mit der Auflistung / Darstellung der gefundenen Datensätzen immer im der Spalte A des Tabellenblatts SUCHE
Begonnen wird ?
HERZLICHEN DANK für Eure Hilfe !