Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1544to1548
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

Suchfunktion

Suchfunktion
03.03.2017 07:27:43
mark
Hallo zusammen,
Ich habe mir aus dem Internet ein Macro runtergeladen, welches eine Suchfunktion über gesamte Arbeitsmappe erzeugt, diese ist recht umfangsreich. Es funktioniert fehlerfrei.
Mir fehlt noch folgendes: bei Suchtreffer sollte Excel diese Zelle farbig (z.B Grün) darstellen und falls mehrere Treffer gibt bei Sprung in die nächste Zelle vorherige löschen, d.h immer nur die aktuelle Zelle ist farbig markiert!
Hier ist der Code:
Public Sub SearchAllTables()
Dim ws As Worksheet
Dim c
Dim firstAddress As String
Dim secAddress
Dim GFound As Boolean
Dim GWeiter As Boolean
GWeiter = False
GFound = False
anf:
SSearch = InputBox("Suchen nach:", "Stichwort-Suche / Suchfunktion", SSearch)
If SSearch = "" Then
End
End If
weiter:
For Each ws In Worksheets
'ws.Select
With ws.Cells
Set c = .Find(SSearch, LookIn:=xlValues, MatchCase:=False)
If Not c Is Nothing Then
GFound = True
ws.Select
c.Select
firstAddress = c.Address
If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbYes Then
Do
Set c = .FindNext(c)
secAddress = c.Address
If c.Address = firstAddress Then
Exit Do
End If
c.Select
If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbNo Then
GWeiter = True
GoTo ende
End If
Loop While Not c Is Nothing And secAddress  firstAddress And c.Address  firstAddress
Else
GWeiter = True
GoTo ende
End If
End If
End With
Next ws
ende:
If GFound = False Then
If MsgBox("Suchwert nicht gefunden! Neue Suche?", vbInformation + vbYesNo) = vbYes Then
GoTo anf:
End If
Else
If GWeiter = False Then
GoTo weiter
End If
End If
End Sub

Danke für euer Hilfe!
Gruss
mark

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Suchfunktion
03.03.2017 10:14:12
Herbert
Hallo Mark,
probiers mal damit:
Sub SearchAllTables()
Dim ws As Worksheet, c, firstAddress$, secAddress, GFound As Boolean, GWeiter As Boolean,  _
SSearch
GWeiter = False
GFound = False
anf:
SSearch = InputBox("Suchen nach:", "Stichwort-Suche / Suchfunktion", SSearch)
If SSearch = "" Then End
weiter:
For Each ws In Worksheets
With ws.Cells
Set c = .Find(SSearch, LookIn:=xlValues, MatchCase:=False)
If Not c Is Nothing Then
GFound = True
ws.Select
c.Select
firstAddress = c.Address
Range(firstAddress).Interior.Color = 65535
If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbYes Then
Do
Set c = .FindNext(c)
secAddress = c.Address
Range(secAddress).Interior.Color = 65535
If c.Address = firstAddress Then Exit Do
Range(firstAddress).Interior.Pattern = xlNone
c.Select
If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbNo Then
GWeiter = True
GoTo ende
End If
Loop While Not c Is Nothing And secAddress  firstAddress And c.Address   _
firstAddress
Else
GWeiter = True
GoTo ende
End If
End If
End With
Next ws
ende:
If GFound = False Then
If MsgBox("Suchwert nicht gefunden! Neue Suche?", vbInformation + vbYesNo) = vbYes Then  _
GoTo anf:
Else
If GWeiter = False Then GoTo weiter
End If
End If
End Sub
Servus
Anzeige
AW: Suchfunktion
03.03.2017 10:32:01
mark
Hallo Herbert
habe es probiert. Code funktioniert einwandfrei.
Unschöner ist, dass markierte(aktive) Trefferzelle mit Farbe gelb bleibt.
Eigentlich sollte bei mehrere Treffer nur aktive Zelle markiert sein.
Wenn ich auf "Weiter suchen / NEIN " klicken sollte die Farbe wieder verschwinden.
Ich hoffe du versteht was ich meine.
Danke und gruss
mark
AW: Suchfunktion
03.03.2017 10:35:34
Herbert
Hallo Mark,
probiers mal damit:
Sub SearchAllTables()
Dim ws As Worksheet, c, firstAddress$, secAddress, GFound As Boolean, GWeiter As Boolean,  _
sSearch$
GWeiter = False
GFound = False
anf:
sSearch = InputBox("Suchen nach:", "Stichwort-Suche / Suchfunktion")
If sSearch = "" Then End
weiter:
For Each ws In Worksheets
With ws.Cells
Set c = .Find(sSearch, LookIn:=xlValues, MatchCase:=False)
If Not c Is Nothing Then
GFound = True
ws.Select
c.Select
firstAddress = c.Address
Range(firstAddress).Interior.Color = 65535
If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbYes Then
Do
Set c = .FindNext(c)
secAddress = c.Address
Range(secAddress).Interior.Color = 65535
If c.Address = firstAddress Then Exit Do
Range(firstAddress).Interior.Pattern = xlNone
c.Select
If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbNo Then
GWeiter = False
GoTo ende
End If
Loop While Not c Is Nothing And secAddress  firstAddress And c.Address   _
firstAddress
Else
GWeiter = True
GoTo ende
End If
End If
End With
Next ws
ende:
If GFound = False Then
If MsgBox("Suchwert nicht gefunden! Neue Suche?", vbInformation + vbYesNo) = vbYes Then  _
GoTo anf:
Else
If GWeiter = True Then GoTo weiter
End If
End Sub
Servus
Anzeige
AW: Suchfunktion
03.03.2017 11:01:13
mark
Hallo Herbert
unverändert.
Ich weiss nicht ob ich dir richtig erklärt habe?
1. Bei einem Treffer ist der Wunsch, dass nur die Trefferzelle gelb markiert ist, wenn ich auf Weiter suchen / NEIN klicke verschwindet die Farbe wieder.
2. Bei mehreren Treffer - Farbe in der vorherige Zelle deaktivieren und bei nächste wieder markieren
3. Sonderwunsch - wenn Excel merken kann, dass die Suchfunktion fertig ist dh. wieder von Anfang an sucht einfach keine Markierungen mehr macht oder ein MsgBox für den User generiert, dass die Suchprozedur ein mal schon gelaufen ist. Sonst ist der User permanent in dem Kreislauf drin.
Gruss
mark
Anzeige
AW: Suchfunktion
03.03.2017 11:33:09
Piet
Hallo Mark,
ohne jetzt den ganzen Thread gelesen zu haben eine Schnell Antwort von mir, basierend auf deinem 1. Code.
Nach c.Select die Zelle faerben, und nach MsgBox die Farbe aufheben. So sollte es klappen. Den Rest selbst zurecht basteln.
mfg Piet
     c.Select
c.Interior.ColorIndex = 4
If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbNo Then
c.Interior.ColorIndex = xlNone
GWeiter = True

AW: Suchfunktion
03.03.2017 12:58:51
Piet
Hallo mark,
ich habe mir deinen eigenen Code noch einmal angesehen, und schicke ihn überarbeitet zurück.
Mir fiel auf das dein Original Code schon in der 1. Tabelle sagt er findet den Suchwert nicht, sofort nach einem neuen Wert fragt, ohne die anderen Tabellen durchsucht zu haben. Das ist m.E. nicht snnvoll! Deshalb habe ich einen "No Find Zaehler" eingebaut, der erst dann einen neuen Suchbegriff anfordert, wenn alle Tabellen durchsucht wurden. Ich denke das ist besser so, oder?
Ich breche den Suchlauf ganz ab, springe aus dem Programm raus, wenn man nicht mehr weitersuchen will. Der Aufwand zuerst mit MsgBox zu sagen "Scuwert nicht gefunden" war mir zu umstaendlich, ich gebe diese Meldung in einer InpuBox aus, und frage gleichzeitig nach einem neuen Suchbegriff. Das erscheint mir einfacher.
Würde mich freuen wenn dein eigener Code jetzt optimaler laeuft.
mfg Piet
Option Explicit      '3.3.2017   Herber Forum  Piet
Public Sub SearchAllTables()
Dim ws As Worksheet
Dim SSearch, c, nfz
Dim firstAddress As String
Dim secAddress
Dim GFound As Boolean
Dim GWeiter As Boolean
GWeiter = False
GFound = False
anf:  nfz = 0   'No Find Zaehler
SSearch = InputBox("Suchen nach:", "Stichwort-Suche / Suchfunktion", SSearch)
If SSearch = "" Then Exit Sub
weiter:
For Each ws In Worksheets
'ws.Select
With ws.Cells
Set c = .Find(SSearch, LookIn:=xlValues, MatchCase:=False)
If Not c Is Nothing Then
GFound = True
ws.Select
c.Select
c.Interior.ColorIndex = 4
firstAddress = c.Address
If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbYes Then
c.Interior.ColorIndex = xlNone
Do
Set c = .FindNext(c)
secAddress = c.Address
If c.Address = firstAddress Then Exit Do
c.Select
c.Interior.ColorIndex = 4
If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbNo Then GoTo clr
c.Interior.ColorIndex = xlNone
Loop While Not c Is Nothing And secAddress  firstAddress And c.Address   _
firstAddress
Else  'nicht weitersuchen!!
clr:        c.Interior.ColorIndex = xlNone
Exit Sub
End If
Else  'Scuhwert No Find
nfz = nfz + 1
GWeiter = True
End If
End With
Next ws
ende:
If GFound = False Or nfz > 0 Then
'If MsgBox("Suchwert nicht gefunden! Neue Suche?", vbInformation + vbYesNo) = vbYes  _
Then GoTo anf
SSearch = InputBox("Suchwert nicht gefunden!!  -  Neue Suche?", "Stichwort-Suche /  _
Suchfunktion")
If SSearch  "" Then GoTo weiter
Else
If GWeiter = False Then GoTo weiter
End If
End Sub

Anzeige
AW: Suchfunktion
03.03.2017 13:59:37
mark
Hall Piet
danke für den überarbeitete Code.
Bei Ausführen kommt diese Fehlermeldung:
Fehler beim kompilieren
Syntaxfehler
Der Teilcodes ist betroffen:
SSearch = InputBox("Suchwert nicht gefunden!! - Neue Suche?", "Stichwort-Suche / _
Suchfunktion")
gruss
mark
AW: Suchfunktion
03.03.2017 16:31:37
Piet
Hallo mark
bei mir funktioniert der Code, aber ich vermute den Fehler hier:
SSearch = InputBox("Suchwert nicht gefunden!! - Neue Suche?", "Stichwort-Suche / _
Suchfunktion")

Nach meinem Wissen darf -kein Zeilenumbruch Zeichen- in einemn Text-String sein! Nimm das "_" mal raus!
Dann sollte es klappen. Wenn du den Umbruch haben willst dann bitte hier, nach dem Text "Neue Suche?":
SSearch = InputBox("Suchwert nicht gefunden!! - Neue Suche?", _
"Stichwort-Suche / Suchfunktion")
mfg Piet
Anzeige
AW: Suchfunktion
05.03.2017 20:11:08
mark
Hallo Piet
jetzt funktioniert einwandfrei!
Vielen Dank
mark

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige