Thema: Suchfunktion unter Excel


Seite durchsuchen:
Home


zurück zur Übersicht

Diskussionsgruppe: Tabellenkalkulation

Hallo zusammen!

Ich möchte gerne eine Freitextsuche in Excel erstellen.
Ein Makro, welches FAST alle meine Wünsche habe ich schon (gefunden).
Das einzige, was mir daran fehlt ist, dass nur in dem jeweils geöffnenten Tabellenblatt gesucht wird.
Schön wäre es, wenn die Suche über alle Blätter der Arbeitsmappe laufen würde!
Da ich von VBA aber nur rudimentäre Ahnung habe wende ich mich an Euch!
Vielleicht kann ja jemand das Makro entsprechend anpassen?
(Das Makro ist NICHT von mir!!)

Sub Suchen_Click()
Dim strSuche As String, erg As Range, firstAddress As String, gefunden() As String
Dim index1 As Integer, index2 As Integer, text As String, schalter As Integer
schalter = 4
text = "Die nächste Übereinstimmung anzeigen?"
Do
strSuche = InputBox("Mindestens die 3 ersten Buchstaben des Suchbegriffes oder kompletten Suchbegriff eingeben. Groß-/Kleinschreibung ist egal.", "Suchen")
If strSuche = "" Or Len(strSuche) = 0 Then Exit Sub
Loop Until Len(strSuche) > 2
Set erg = Range("A4:IV65536").Find(what:=strSuche, lookat:=xlPart, LookIn:=xlValues, MatchCase:=False)
If erg Is Nothing Then
Beep
MsgBox "Suchbegriff wurde nicht gefunden! Es ist aber nicht 100% sicher, dass der gesuchte Begriff sich nicht in der Tabelle befindet. Überprüfen Sie daher bitte nochmal die Schreibweise und geben den Suchbegriff erneut ein, oder suchen Sie den Begriff manuell in der Tabelle."
Else
firstAddress = erg.Address
Do
index1 = index1 + 1
ReDim Preserve gefunden(1 To index1)
gefunden(index1) = erg.Address
Set erg = Range("A4:IV65536").FindNext(erg)
Loop While Not erg Is Nothing And erg.Address <> firstAddress
Do
index2 = index2 + 1
If index2 = index1 Then
text = ""
schalter = 0
End If
Range(gefunden(index2)).Select
ActiveWindow.ScrollRow = Selection.Row
ActiveWindow.ScrollColumn = Selection.Column
If MsgBox(CStr(index2) & ". von " & CStr(index1) & " gefundenen Übereinstimmungen des Suchbegriffes." & vbNewLine & text, schalter, "Anzeige") = 7 Then Exit Do
If index2 = index1 Then Exit Do
Loop
End If
End Sub

Von: sickboy Datum: 23.05.2007, 09:01

alle Antworten zu dieser Frage




Antwort 1 von Beverly vom 23.05.2007, 09:28
Hi,

ohne jetzt weiter auf deinen Code eingehen zu wollen, versuche es so

Sub Suchen_Click()
Dim strSuche As String, erg As Range, firstAddress As String, gefunden() As String
Dim index1 As Integer, index2 As Integer, text As String, schalter As Integer
schalter = 4
text = "Die nächste Übereinstimmung anzeigen?"
With ActiveSheet
Do
strSuche = InputBox("Mindestens die 3 ersten Buchstaben des Suchbegriffes oder kompletten Suchbegriff eingeben. Groß-/Kleinschreibung ist egal.", "Suchen")
If strSuche = "" Or Len(strSuche) = 0 Then Exit Sub
Loop Until Len(strSuche) > 2
Set erg = .Range("A4:IV65536").Find(what:=strSuche, lookat:=xlPart, LookIn:=xlValues, MatchCase:=False)
If erg Is Nothing Then
Beep
MsgBox "Suchbegriff wurde nicht gefunden! Es ist aber nicht 100% sicher, dass der gesuchte Begriff sich nicht in der Tabelle befindet. Überprüfen Sie daher bitte nochmal die Schreibweise und geben den Suchbegriff erneut ein, oder suchen Sie den Begriff manuell in der Tabelle."
Else
firstAddress = erg.Address
Do
index1 = index1 + 1
ReDim Preserve gefunden(1 To index1)
gefunden(index1) = erg.Address
Set erg = .Range("A4:IV65536").FindNext(erg)
Loop While Not erg Is Nothing And erg.Address <> firstAddress
Do
index2 = index2 + 1
If index2 = index1 Then
text = ""
schalter = 0
End If
.Range(gefunden(index2)).Select
ActiveWindow.ScrollRow = Selection.Row
ActiveWindow.ScrollColumn = Selection.Column
If MsgBox(CStr(index2) & ". von " & CStr(index1) & " gefundenen Übereinstimmungen des Suchbegriffes." & vbNewLine & text, schalter, "Anzeige") = 7 Then Exit Do
If index2 = index1 Then Exit Do
Loop
End If
End With
End Sub


Bis später,
Karin

Antwort 2 von sickboy vom 23.05.2007, 09:59
Hi Karin!

Danke für die Antwort! Es funktioniert leider nicht.

Wenn ich z.B. vom Tabellenblatt 1 aus die Suche starte wird mir immer direkt angezeigt, dass nichts gefunden wurde.

Antwort 3 von Beverly vom 23.05.2007, 13:17
Hi,

sorry, ich hatte deine Frage falsch verstanden. Mit diesem Code sollte es jetzt funktonieren

Sub Suchen_Click()
Dim strSuche As String, erg As Range, firstAddress As String, gefunden() As String
Dim index1 As Integer, index2 As Integer, text As String, schalter As Integer
Dim wsTabelle As Worksheet
schalter = 4
text = "Die nächste Übereinstimmung anzeigen?"
Do
strSuche = InputBox("Mindestens die 3 ersten Buchstaben des Suchbegriffes oder kompletten Suchbegriff eingeben. Groß-/Kleinschreibung ist egal.", "Suchen")
If strSuche = "" Or Len(strSuche) = 0 Then Exit Sub
Loop Until Len(strSuche) > 2
For Each wsTabelle In ThisWorkbook.Worksheets
Set erg = wsTabelle.Range("A4:IV65536").Find(what:=strSuche, lookat:=xlPart, LookIn:=xlValues, MatchCase:=False)
If erg Is Nothing Then
Beep
MsgBox "Suchbegriff wurde nicht gefunden! Es ist aber nicht 100% sicher, dass der gesuchte Begriff sich nicht in der Tabelle befindet. Überprüfen Sie daher bitte nochmal die Schreibweise und geben den Suchbegriff erneut ein, oder suchen Sie den Begriff manuell in der Tabelle."
Else
firstAddress = erg.Address
Do
index1 = index1 + 1
ReDim Preserve gefunden(2, 1 To index1)
gefunden(1, index1) = wsTabelle.Name
gefunden(2, index1) = erg.Address
Set erg = wsTabelle.Range("A4:IV65536").FindNext(erg)
Loop While Not erg Is Nothing And erg.Address <> firstAddress
End If
Next wsTabelle
Do
index2 = index2 + 1
If index2 = index1 Then
text = ""
schalter = 0
End If
Application.Goto Reference:=Worksheets(gefunden(1, index2)).Range(gefunden(2, index2)), _
scroll:=True
If MsgBox(CStr(index2) & ". von " & CStr(index1) & " gefundenen Übereinstimmungen des Suchbegriffes." & vbNewLine & text, schalter, "Anzeige") = 7 Then Exit Do
If index2 = index1 Then Exit Do
Loop
End Sub


Bis später,
Karin

Antwort 4 von sickboy vom 23.05.2007, 16:11
Hallo!

Diese Version ist deutlich besser...funktioniert aber immer noch nicht so 100%.
Erstmal aber schonmal 1000 DANK für Deine Hilfe! Wirklich wirklich nett!!!

Ich werde vielleicht mal etwas genauer:
Ich habe (bisher) 5 Tabellenblätter in denen gesucht werden soll (kann man die Suche eigentlich von vornherein auch auf diese Blätter beschränken?? Das wäre super!).
Mein "Such-Button" ist auf dem Blatt 1. Ansonsten befinden sich auf dem Blatt ausschließlich weitere Button.
Wenn ich jetzt z.B. nach "Patient" suche sagt mir Excel, zunächst 4 mal, dass nichtsgefunden wurde. Nach der viertten Bestätigung mit OK springt er dann zum "1. von 21gefundenen Einträgen". Ab da klappt es also wunderbar!

Konkrete Fragen wären also:
    1) Kann man die Suche auf einige Tabellenblätter beschränken?

    2) Irgendeine Idee wieso ich erstmal 4 mal gesagt bekomme, dass nicht gefunden wurde?


Antwort 5 von Beverly vom 23.05.2007, 17:59
Hi,

ja, man kann die Suche einschränken, indem man den Tabellennamen im Code festglegt, in denen gesucht werden soll

Sub Suchen_Click()
Dim strSuche As String, erg As Range, firstAddress As String, gefunden() As String
Dim index1 As Integer, index2 As Integer, text As String, schalter As Integer
Dim wsTabelle As Worksheet
schalter = 4
text = "Die nächste Übereinstimmung anzeigen?"
Do
strSuche = InputBox("Mindestens die 3 ersten Buchstaben des Suchbegriffes oder kompletten Suchbegriff eingeben. Groß-/Kleinschreibung ist egal.", "Suchen")
If strSuche = "" Or Len(strSuche) = 0 Then Exit Sub
Loop Until Len(strSuche) > 2
For Each wsTabelle In ThisWorkbook.Worksheets
If wsTabelle.Name = "Tabelle2" Or wsTabelle.Name = "Tabelle4" Or wsTabelle.Name = "Tabelle5" Then
Set erg = wsTabelle.Range("A4:IV65536").Find(what:=strSuche, lookat:=xlPart, LookIn:=xlValues, MatchCase:=False)
If erg Is Nothing Then
Beep
MsgBox wsTabelle.Name & vbCrLf & vbCrLf & "Es ist aber nicht 100% sicher, dass der gesuchte Begriff sich nicht in der Tabelle befindet." & vbCrLf & "Überprüfen Sie daher bitte nochmal die Schreibweise und geben den Suchbegriff erneut ein," & vbCrLf & "oder suchen Sie den Begriff manuell in der Tabelle.", , "Suchbegriff wurde nicht gefunden in:"
Else
firstAddress = erg.Address
Do
index1 = index1 + 1
ReDim Preserve gefunden(2, 1 To index1)
gefunden(1, index1) = wsTabelle.Name
gefunden(2, index1) = erg.Address
Set erg = wsTabelle.Range("A4:IV65536").FindNext(erg)
Loop While Not erg Is Nothing And erg.Address <> firstAddress
End If
End If
Next wsTabelle
Do
index2 = index2 + 1
If index2 = index1 Then
text = ""
schalter = 0
End If
Application.Goto Reference:=Worksheets(gefunden(1, index2)).Range(gefunden(2, index2)), _
scroll:=True
If MsgBox(gefunden(1, index2) & vbCrLf & vbCrLf & CStr(index2) & ". von " & CStr(index1) & " gefundenen Übereinstimmungen des Suchbegriffes." & vbNewLine & text, schalter, "Anzeige") = 7 Then Exit Do
If index2 = index1 Then Exit Do
Loop
End Sub

Die Tabellenamen musst du natürlich anpassen.

Bis später,
Karin

Antwort 6 von sickboy vom 24.05.2007, 08:18
SUPER!!!

Perfekt! Genauso wie ich es brauche! Ich bin schwer begeistert!!

Fühl Dich virtuell zu nem Kaffee o.ä. eingeladen!!

DANKE!!!!

Antwort 7 von Beverly vom 24.05.2007, 09:02
Hi,

danke für die Einladung. Ich nehme aber lieber ein Eis mit viel Sahne. ;-)))

Freut mich, dass alles deinen Wünschen entsprechend funktionert.

Bis später,
Karin

Antwort 8 von sickboy vom 24.05.2007, 11:30
*grins*

Auch dazu bist Du natürlich herzlich eingeladen!

Antwort 9 von sickboy vom 25.05.2007, 07:50
Tja, ein kleines Problemchen habe ich leider doch noch gefunden!

Wenn ich einen Suchbegriff eingebe, den es nirgenwo gibt (z.B. qkdfalkwef) wird zwar brav das ganze Arbeitsblatt durchsucht, am Ende bekomme ich aber eine Fehlermeldung (Laufzeitfehler 9). Im Code wird folgendes angemarkert:
Sub Suche()
Dim strSuche As String, erg As Range, firstAddress As String, gefunden() As String
Dim index1 As Integer, index2 As Integer, text As String, schalter As Integer
Dim wsTabelle As Worksheet
schalter = 4
text = "Die nächste Übereinstimmung anzeigen?"
Do
strSuche = InputBox("Mindestens die 3 ersten Buchstaben des Suchbegriffes. Groß-/Kleinschreibung wird nicht beachtet.", "Suchen")
If strSuche = "" Or Len(strSuche) = 0 Then Exit Sub
Loop Until Len(strSuche) > 2
For Each wsTabelle In ThisWorkbook.Worksheets
If wsTabelle.Name = "Führung" Or wsTabelle.Name = "Mitarbeiter" Or wsTabelle.Name = "Patienten" Or wsTabelle.Name = "unterstüzende Prozesse" Or wsTabelle.Name = "Qualitätsmessung" Then
Set erg = wsTabelle.Range("A4:IV65536").Find(what:=strSuche, lookat:=xlPart, LookIn:=xlValues, MatchCase:=False)
If erg Is Nothing Then
Beep
MsgBox wsTabelle.Name & vbCrLf & "Überprüfen Sie daher bitte die Schreibweise und geben den Suchbegriff erneut ein," & vbCrLf & "oder suchen Sie den Begriff manuell in der Tabelle.", , "Suchbegriff wurde nicht gefunden in:"
Else
firstAddress = erg.Address
Do
index1 = index1 + 1
ReDim Preserve gefunden(2, 1 To index1)
gefunden(1, index1) = wsTabelle.Name
gefunden(2, index1) = erg.Address
Set erg = wsTabelle.Range("A4:IV65536").FindNext(erg)
Loop While Not erg Is Nothing And erg.Address <> firstAddress
End If
End If
Next wsTabelle
Do
index2 = index2 + 1
If index2 = index1 Then
text = ""
schalter = 0
End If
Application.Goto Reference:=Worksheets(gefunden(1, index2)).Range(gefunden(2, index2)), _
Scroll:=True

If MsgBox(gefunden(1, index2) & vbCrLf & vbCrLf & CStr(index2) & ". von " & CStr(index1) & " gefundenen Übereinstimmungen des Suchbegriffes." & vbNewLine & text, schalter, "Anzeige") = 7 Then Exit Do
If index2 = index1 Then Exit Do
Loop
End Sub

Irgeneine Ahnung wo das Problem liegt? Ansonsten ist alles wirklich super!

Antworten der Gruppe: Tabellenkalkulation
www.supportnet.de







Office 365 stellt vertraute Microsoft Office-Tools für die Zusammenarbeit und Produktivität über die Cloud bereit. So können alle ganz einfach von nahezu überall zusammenarbeiten und auf E-Mails, Webkonferenzen, Dokumente und Kalender zugreifen.