Anzeige
Archiv - Navigation
1320to1324
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

Suchresultate auf Tabellenblatt auflisten lassen

Suchresultate auf Tabellenblatt auflisten lassen
28.06.2013 08:54:25
Pascal
Guten Tag miteinander
Vor einiger Zeit schon hatte ich - dank der grossartigen Forumshilfe hier - ein Vorschlag für eine Matrix-Suche erhalten, welche ich dann auch in ein grösseres Projekt habe übernehmen können.
An dieser Stelle nochmals herzlichen Dank für die damalige Hilfe!
In der Beilage nochmals das Beispiel welches ich seinerzeits erhalten hatte.
https://www.herber.de/bbs/user/86100.xls
Nun möchte ich das Beispiel so anpassen, dass mir die Fundstellen nicht selektiert werden, sonder alle Fundstellen in einem separaten Tabellenblatt Namens "Suche_1" aufgelistet werden.
Es soll auch keine Frage kommen... "wollen Sie weitersuchen" sondern ... es sollen gemäss Suchmatrix (siehe Beispielsdatei) solange gesucht werden, bis alle entsprechenden Tabellenblätter durchsucht wurden.
Alle Fundstellen sollen dann also auf dem Tabellenblatt "Suche_1" aufgelistet werden.
(mit der Idee, dass man dann von diesem Tabellenblatt mit einem Doppelklick auf die entsprechende Fundstelle, zu dieser springen kann)
Kann man diesen Code dementsprechend so erweitern oder umbauen ?
Danke Euch herzlich für Eure Tips und erneute Hilfe
Private Sub CB_Suchen_Click()
Dim wks As Worksheet
Dim rng As Range
Dim sAddress As String, sFind As String
Dim bolSuchen As Boolean, bolSuchenEnde As Boolean
sFind = Me.tbox_Suchbegriff
If sFind = "" Then GoTo Beenden
For Each wks In Worksheets
'Prüfen ob Blatt durchsucht werden soll
With wksMatrix
If LCase(Application.WorksheetFunction.VLookup(wks.Name, .Range(.Cells(2, 1), _
.Cells(.Rows.Count, 1).End(xlUp).Offset(0, Me.ListBox_Suche.ListCount + 1)), _
Me.ListBox_Suche.ListIndex + 2, False)) = "x" Then
bolSuchen = True
Else
bolSuchen = False
End If
End With
If bolSuchen = True Then
Set rng = wks.Cells.Find(what:=sFind, _
lookat:=xlWhole, LookIn:=xlValues)
If Not rng Is Nothing Then
sAddress = rng.Address
Do
Application.Goto rng, True
Application.Goto Reference:=Range("A1"), Scroll:=True
Range(rng.Address).Select
If MsgBox("Soll die Suche fortgesetzt werden ?", _
vbYesNo + vbQuestion, "Frage an " & _
Application.UserName & ":") = vbNo Then
bolSuchenEnde = True
Exit For
End If
Set rng = Cells.FindNext(after:=ActiveCell)
If rng.Address = sAddress Then Exit Do
Loop
End If
End If
Next wks
If bolSuchenEnde = True Then
Unload Me
Else
MsgBox "Es gibt keine neue Fundstelle !", vbYes + vbInformation, _
"Hinweis an " & Application.UserName & ":"
End If
Beenden:
End Sub

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchresultate auf Tabellenblatt auflisten lassen
28.06.2013 09:47:37
Rudi
Hallo,
Private Sub CB_Suchen_Click()
Dim wks As Worksheet
Dim rng As Range
Dim sAddress As String, sFind As String
Dim bolSuchen As Boolean, bolSuchenEnde As Boolean
Dim objFound As Object
Set objFound = CreateObject("Scripting.dictionary")
sFind = Me.tbox_Suchbegriff
If sFind = "" Then Exit Sub
For Each wks In Worksheets
'Prüfen ob Blatt durchsucht werden soll
With wksMatrix
If LCase(Application.WorksheetFunction.VLookup(wks.Name, .Range(.Cells(2, 1), _
.Cells(.Rows.Count, 1).End(xlUp).Offset(0, Me.ListBox_Suche.ListCount + 1)), _
Me.ListBox_Suche.ListIndex + 2, False)) = "x" Then
bolSuchen = True
Else
bolSuchen = False
End If
End With
If bolSuchen = True Then
Set rng = wks.Cells.Find(what:=sFind, _
lookat:=xlWhole, LookIn:=xlValues)
If Not rng Is Nothing Then
sAddress = rng.Address
Do
objFound(objFound.Count) = wks.Name & "!" & rng.Address
Set rng = Cells.FindNext(after:=ActiveCell)
If rng.Address = sAddress Then Exit Do
Loop
End If
End If
Next wks
If objFound.Count Then
With Sheets("Suche_1")
.Cells.Clear
.Cells(1, 1).Resize(objFound.Count) = WorksheetFunction.Transpose(objFound.items)
Else
MsgBox "Nix gefunden!", vbYes + vbInformation, _
"Hinweis an " & Application.UserName & ":"
End If
End Sub

Gruß
Rudi

Anzeige
AW: Suchresultate auf Tabellenblatt auflisten lassen
28.06.2013 10:03:32
Pascal
Hallo Rudi
Vielen Dank für Deinen supertollen Lösungsvorschlag.
Leider erscheint bei dessen Ausführung noch eine Fehlermeldung: Else ohne if ...
dies... obwohl es ein if und auch ein Else gibt.
Fand den Fehler derzeit jedoch noch nicht ... :-(

AW: Suchresultate auf Tabellenblatt auflisten lassen
28.06.2013 10:27:55
Rudi
Hallo,
Vielen Dank für Deinen supertollen Lösungsvorschlag.
woher weißt du das, wenn er fehlerhaft ist? ;-)
Es fehlt ein End With
    If objFound.Count Then
With Sheets("Suche_1")
.Cells.Clear
.Cells(1, 1).Resize(objFound.Count) = WorksheetFunction.Transpose(objFound.items)
End With    '

Gruß
Rudi

Anzeige
AW: Suchresultate auf Tabellenblatt auflisten lassen
28.06.2013 10:34:03
Pascal
Oach! da hätt ich doch auch draufkommen sollen ;-)
Aber ... auch nachdem ich das En With noch eingefügt habe erhalte ich nun einen Laufzeitfehler 91
Objektvariable oder With-Blockvariable nicht festgelegt.
Makro bleibt dann bei der Zeile stehen:
If rng.Address = sAddress Then Exit Do
und dies... obwohl es den Suchbegriff in der Datenbank gibt

AW: Suchresultate auf Tabellenblatt auflisten lassen
28.06.2013 10:54:25
Rudi
Hallo,
nächster Versuch.
         If bolSuchen = True Then
Set rng = wks.Cells.Find(what:=sFind, _
lookat:=xlWhole, LookIn:=xlValues)
If Not rng Is Nothing Then
sAddress = rng.Address
Do
objFound(objFound.Count) = wks.Name & "!" & rng.Address
Set rng = wks.Cells.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  sAddress
End If
End If

Gruß
Rudi

Anzeige
AW: Suchresultate auf Tabellenblatt auflisten lassen
28.06.2013 10:59:19
Pascal
:-(
... leider nächste Fehlermeldung:
Laufzeitfehler 1004 "die VLookup - Eigenschaft des WorksheetFunction-Objektes kann nicht zugeordnet werden"
und Makro bleibt hier stehen:
If LCase(Application.WorksheetFunction.VLookup(wks.Name, .Range(.Cells(2, 1), _
.Cells(.Rows.Count, 1).End(xlUp).Offset(0, Me.ListBox_Suche.ListCount + 1)), _
Me.ListBox_Suche.ListIndex + 2, False)) = "x" Then

lad die Mappe hoch. owT
28.06.2013 11:11:17
Rudi

AW: lad die Mappe hoch. owT
28.06.2013 11:18:00
Pascal
Das ist die aktuelle Beispiels-Mappe:

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


Was mir noch aufgefallen ist...
wenn ich noch ein "on Error resume next" reinmache, so scheints zu funzen.
Aber... es sollten alle Suchresultate dann mit einem Doppelklick drauf angesprungen werden können.
d.h. Wenn ich also z.B. nach dem Begriff "Aber" bei "alle" suche, so wird dieser dann auf dem Suche_1 Tabellenblatt ausgegeben als "tabelle1; A2" Das ist ja korrekt.
nun möchte ich hier drauf einen Doppelklick machen können und direkt von der Tabelle Suche_1 auf die "richtige" Stelle in der Arbeitsmappe springen. (Cursor müsste dann also auf Tabellenblatt 1 in Zelle A2 stehen

Anzeige
AW: lad die Mappe hoch. owT
28.06.2013 11:28:45
Rudi
Hallo,
1. trage Suche_1 auch in SuchMatrix ein.
2. in das Modul von Suche_1:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim arr
If Target.Column = 1 Then
If Target  "" Then
arr = Split(Target, "!")
Application.Goto Sheets(arr(0)).Range(arr(1)), True
End If
End If
End Sub

Gruß
Rudi

AW: lad die Mappe hoch. owT
28.06.2013 11:38:09
Pascal
... es geht langsam in richtiger Richtung :-)
D.h. zwar kommen ohne die Zeile "on Error resume next" zu Beginn des Suchmakros nach wie vor gleiche Fehlermeldung aber ... wenn ich die Zeile "on Error resume next" zu Beginn des Codes von Dir einschalte, dann wird die Suche erfolgreich durchgeführt.
Es werden auch wirklich alle Suchbegriffe richtig gefunden und auf die Suche_1 geschrieben.
doch ... der Code welchen ich nun ins Modul "Such_Modul1" gelegt habe ... bewirkt rein gar nichts. D.h. die Suchresultate lassen sich mit Doppelklick nicht anspringen
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim arr
If Target.Column = 1 Then
If Target  "" Then
arr = Split(Target, "!")
Application.Goto Sheets(arr(0)).Range(arr(1)), True
End If
End If
End Sub

Anzeige
AW: lad die Mappe hoch. owT
28.06.2013 11:43:21
Rudi
Hallo,
zwar kommen ohne die Zeile "on Error resume next" zu Beginn des Suchmakros nach wie vor gleiche Fehlermeldung aber
Bei mir geht's ohne on error.
Mach, was ich geschrieben habe.
doch ... der Code welchen ich nun ins Modul "Such_Modul1" gelegt habe ... bewirkt rein gar nichts.
Wohin? Das ist falsch.
Rechtsklick auf den Reiter Suche_1, Code anzeigen und reinkopieren.
Gruß
Rudi

AW: lad die Mappe hoch. owT
28.06.2013 12:47:26
Pascal
... die Fehlermeldung kommt nun wirklich nicht mehr (auch dann nicht, wenn ich "on Error resume next" weglasse.
doch lassen sich die Fundstellen nach wie vor nicht über Doppelklick anspringen.
(das Suchformular bleibt ja ebenfalls nach erfolgreicher Suche im Vordergrund aktiv)
https://www.herber.de/bbs/user/86109.xls
Was noch wünschenswert wäre.
jezt werden die Suchresultate sauber und korrekt in der Tabelle "Suche_1" aufgelistete. Allerdings nur die Inhalt der Zelle A2
kann ich da irgendwie bewerkstelligen, dass die komplette Zeile (in welcher der Suchbegriff gefunden wurde) nach "Suche_1" übertragen wird und von dort mit einem Doppelklick drauf geöffnet werden kann. (also von Suche_1 zur "Original-Fundstelle" springen)
Danke viel viel viel Male für deine bisherige, unermüdliche, grossartige Hilfe !!!

Anzeige
Inhalt mehrerer Zellen finden und lesen
02.07.2013 08:56:08
Pascal
Guten Tag allerseits
Bereits letzte Woche wurde mir hier im Forum bei meinem Vorhaben sehr geholfen. An dieser Stelle nochmals herzlichen Dank.
Nun hab ich bei meinem Projekt aber ein weiteres Problem / Frage.
In beiliegender Excel-Beispielsdatei gibt’s eine Userform und eine Suchmatrix. Mit Hilfe der Suchmatrix kann festgelegt werden, auf welchem Tabellenblatt eine Suche durchgeführt werden soll. Die eigentliche Suche startet man aber der UserForm.
Der Code hinter der UserForm ist nun folgender:
https://www.herber.de/bbs/user/86159.xls
Public Sub CB_Suchen_Click()
Dim wks As Worksheet
Dim rng As Range
Dim sAddress As String, sFind As String
Dim bolSuchen As Boolean, bolSuchenEnde As Boolean
Dim objFound As Object
Dim Anzahl_Rechts As Long
Dim Zeile As String
Set objFound = CreateObject("Scripting.dictionary")
sFind = Me.tbox_Suchbegriff
If sFind = "" Then Exit Sub
For Each wks In Worksheets
'Prüfen ob Blatt durchsucht werden soll (Selektion gemäss SuchMatrix)
With wksMatrix
If LCase(Application.WorksheetFunction.VLookup(wks.Name, .Range(.Cells(2, 1), _
.Cells(.Rows.Count, 1).End(xlUp).Offset(0, Me.ListBox_Suche.ListCount + 1)), _
Me.ListBox_Suche.ListIndex + 2, False)) = "x" Then
bolSuchen = True
Else
bolSuchen = False
End If
End With
If bolSuchen = True Then
Set rng = wks.Cells.Find(what:=sFind, _
lookat:=xlWhole, LookIn:=xlValues)
If Not rng Is Nothing Then
sAddress = rng.Address
Anzahl_Rechts = InStrRev(sAddress, "$")
Zeile = "A" & Right(sAddress, Anzahl_Rechts) & ":L" & Right(sAddress,  _
Anzahl_Rechts)
Do
objFound(objFound.Count) = wks.Name & "!" & rng.Address
Set rng = wks.Cells.FindNext(rng)
Loop While Not rng Is Nothing And rng.Address  sAddress
End If
End If
Next wks
If objFound.Count Then
With Sheets("Suche_1")
.Cells.Clear
.Cells(1, 1).Resize(objFound.Count) = WorksheetFunction.Transpose(objFound.items)
End With
Else
MsgBox "Nichts gefunden!", vbYes + vbInformation, _
"Hinweis an " & Application.UserName & ":"
End If
End Sub

Die Suchresultate werden sauber und korrekt auf das Tabellenblatt "Suche_1" ausgegeben.
Nun soll aber der obige Code so angepasst werden, dass bei den Suchresultaten nicht bloss der Inhalt der Zelle A1 aufs Tabellenblatt "Suche_1" geschrieben wird, sondern der komplette Zeileninhalt (D.h. die Inhalte der Zellen B, D, F, H, J und L)
So müsste also als Beispiel stehen:
Wenn ich nach der Abkürzung "pne" suche, so müsste dann als Resultat auf dem Tabellenblatt "Suche_1" stehen:
pne Pneu Regal 99 Fach 3 Link Bild 24
Geht das irgendwie ? Ich habe im obigen Code schon mal versucht, mit der Variable "Zeile" die entsprechende Zeilen-Adresse als Range aufzubauen.
Doch leider kam ich nicht weiter.
Wer kann mir bei meinem Vorhaben behilflich sein?
Im voraus herzlichen Dank!

Anzeige
AW: Inhalt mehrerer Zellen finden und lesen
03.07.2013 10:38:45
fcs
Hallo Pascal,
in der Text-Datei findest du den angepassten Code für die Suchen-Schaltfläche.
Für die gefundenen Zellen wird das Ergebnis wieder rückwärts aufgelöst in ein Tabellen- und Range-Objekt und dann die Inhalte aus der entsprechenden Zeile ins Ergebnisblatt eingelesen.
Gruß
Franz
https://www.herber.de/bbs/user/86180.txt

AW: Inhalt mehrerer Zellen finden und lesen
04.07.2013 09:55:52
Pascal
Hallo Franz
Vorab mal herzlichen Dank für den angepassten Code. Bitte entschuldige meine verspätete Antwort. Ich hatte gestern einen Freitag und war nie Online.
Ich werde mir den Code nun gleich mal anschauen und dann hier entsprechend Feedback posten.
Grüsse: Pascal
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige