Herbers Excel-Forum - das Archiv

Suchergebnisse

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: Suchergebnisse
von: Dunrell

Geschrieben am: 15.12.2006 13:50:48
Hallo,
habe schon versucht, etwas in alten Beiträgen zu finden. Leider ohne Erfolg.
Hier die Frage:
Die Zelle, in der ein Suchbegriff gefunden wird, soll farbig unterlegt werden.
Beispiel: Suche nach "Hallo". Gefunden in Zelle C743. Zelle wird farbig unterlegt, um sie hervorzuheben. Bei Weitersuchen wird Markierung wieder aufgehoben und die neue Zelle wird farbig unterlegt und so weiter...
Mit welchem Makro erreiche ich das?
Dafür reichen meine VBA-Kenntnisse nämlich leider nicht. ;)
Danke für die Hilfe.
Ciao
Bild

Betrifft: AW: Suchergebnisse
von: EtoPHG
Geschrieben am: 15.12.2006 14:01:45
Hallo Dunrell,
Woher kommt den Dein Suchbegriff.
Wenn er in einer Zelle stehen würde, brauchst Du kein Makro dazu, sondern kannst es mit Bedingter Formatierung machen.
Gruss Hansueli
Bild

Betrifft: AW: Suchergebnisse
von: Dunrell

Geschrieben am: 15.12.2006 14:14:45
Hallo Hansueli,
es wird in einer bestimmten Tabelle mit sehr vielen Einträgen gesucht. Irgendein Suchwort. Die Zelle, in der das Wort gefunden wird, soll farbig markiert werden. Ist das Wort noch mal vorhanden, beginnt das Spiel von vorne. Aber eben so, daß die zuvor markierte Zelle wieder "entfärbt" wird.
So stelle ich mir das zumindest vor...
;-)
Ciao
Bild

Betrifft: AW: Suchergebnisse
von: Heiko S.

Geschrieben am: 15.12.2006 14:12:44
Hallo Dunrell,
z.B. damit:
Sub findenT()
Dim rngC As Range
Dim strFind As String, strOld As String
Dim lngOldColor As Long
strFind = InputBox("Bitte geben Sie den Suchbegriff ein !", " Suchbegriff", "Suchbegriff")
If strFind = "" Then Exit Sub
With ActiveSheet.UsedRange
Set rngC = .Find(strFind, LookIn:=xlValues)
If Not rngC Is Nothing Then
strOld = rngC.Address
Do
lngOldColor = rngC.Interior.ColorIndex
rngC.Interior.ColorIndex = 3
If MsgBox(" Weitersuchen ?", vbYesNo + vbQuestion) = vbNo Then
rngC.Interior.ColorIndex = lngOldColor
Exit Sub
End If
rngC.Interior.ColorIndex = lngOldColor
Set rngC = .FindNext(rngC)
Loop While Not rngC Is Nothing And rngC.Address <> strOld
End If
End With
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Bild

Betrifft: AW: Suchergebnisse
von: Dunrell
Geschrieben am: 15.12.2006 14:53:16
Hey Heiko,
soweit sehr gut. Allerdings soll die Markierung, wenn man "Nein" gesagt hat, bestehen bleiben. Also die letzte gefundene Übereinstimmung soll markiert bleiben.
Schon mal vielen Dank bis hier her!
;-)
Ciao
Bild

Betrifft: AW: Suchergebnisse
von: Heiko S.

Geschrieben am: 15.12.2006 14:58:31
Hallo,
VBA GUT ?!
Sub findenT()
Dim rngC As Range
Dim strFind As String, strOld As String
Dim lngOldColor As Long
strFind = InputBox("Bitte geben Sie den Suchbegriff ein !", " Suchbegriff", "Suchbegriff")
If strFind = "" Then Exit Sub
With ActiveSheet.UsedRange
Set rngC = .Find(strFind, LookIn:=xlValues)
If Not rngC Is Nothing Then
strOld = rngC.Address
Do
lngOldColor = rngC.Interior.ColorIndex
rngC.Interior.ColorIndex = 3
If MsgBox(" Weitersuchen ?", vbYesNo + vbQuestion) = vbNo Then
Exit Sub
End If
rngC.Interior.ColorIndex = lngOldColor
Set rngC = .FindNext(rngC)
Loop While Not rngC Is Nothing And rngC.Address <> strOld
End If
End With
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Bild

Betrifft: AW: Suchergebnisse
von: Dunrell
Geschrieben am: 15.12.2006 15:07:18
Hallo,
ich kann mich erinnern geschrieben zu haben, das meine VBA-Kenntnisse nicht alles umfassen.
Okay. So geht es. Danke dir.
;-)
Ciao
Bild

Betrifft: AW: Suchergebnisse
von: Dunrell

Geschrieben am: 18.12.2006 19:09:08
Hey Heiko, eine Sache hätte ich noch... Und zwar, da die Tabelle recht lang ist, soll die farbig markierte Zelle dann angezeigt, sprich aktiviert werden. Ich habe es mit dem Vergleich der Variablen versucht (siehe das etwas veränderte Makro von Dir - die Zeile, welche für sich alleine steht):
Range("B4:L219").Select
Selection.Interior.ColorIndex = xlNone
Range("A1").Select
Dim Zelle As Range
Dim SuchenNeu As String, SuchenAlt As String
Dim Farbe As Long
SuchenNeu = InputBox("Suchbegriff", " Suchbegriff", "")
If SuchenNeu = "" Then Exit Sub
Range("B1").Value = SuchenNeu
With ActiveSheet.UsedRange
Set Zelle = .Find(SuchenNeu, LookIn:=xlValues)
If Not Zelle Is Nothing Then
SuchenAlt = Zelle.Address
Do
Farbe = Zelle.Interior.ColorIndex
Zelle.Interior.ColorIndex = 3
If Range("B1").Value = SuchenNeu Then Zelle = ActiveCell
If MsgBox(" Weitersuchen?", vbYesNo + vbQuestion) = vbNo Then
Exit Sub
End If
Zelle.Interior.ColorIndex = Farbe
Set Zelle = .FindNext(Zelle)
Loop While Not Zelle Is Nothing And Zelle.Address <> SuchenAlt
End If
End With
Allerdings wird dann nur die farbig unterlegte Zelle, bzw. der Wert in ihr gelöscht. Eine andere Methode habe ich bis jetzt noch nicht gefunden. Weder Show noch sonstiges zeigt das gewünschte Resultat.
Für eine kleine Anregung wäre ich Dir dankbar.
;-)
Bild

Betrifft: AW: Suchergebnisse
von: Dunrell
Geschrieben am: 18.12.2006 19:11:42
...
Bild

Betrifft: AW: Suchergebnisse
von: Heiko S.
Geschrieben am: 19.12.2006 07:39:34
Hallo Dunrell,
kannst du mal genauer erklären was du möchtest, der Satz ist irgendwie unvollständig.
"Und zwar, da die Tabelle recht lang ist, soll die farbig markierte Zelle dann angezeigt, sprich aktiviert werden"
Wann denn ?!
Gruß Heiko
Bild

Betrifft: AW: Suchergebnisse
von: Dunrell

Geschrieben am: 19.12.2006 20:08:55
Hey Heiko,
sorry, komme erst jetzt wieder dazu, hier reinzuschauen. Die Sache hat sich soweit (dank der Hilfe eines weiteren netten "Äxel-Ekschpärten"!) erledigt.
Ô_Ô
Was ich wollte, war, daß die Zelle, die gefunden wird (der Wert liegt der Variablen SuchenNeu zugrunde) dann auch aktiviert sprich quasi automatisch angeklickt wird. Damit also die betreffende Zelle auch gleich in der Tabelle angezeigt wird. Sollte diese nämlich weiter unten in einem Tabellenteil liegen, der nicht im momentanen Fensterausschnitt zu sehen ist, hätte man immer noch scrollen müssen, um die markierte Zelle zu finden. Das hat sich aber jetzt - wie gesagt - erledigt.
Falls Du aber dennoch etwas behilflich sein möchtest - hier wäre noch `ne Frage. Muß aber nicht unbedingt sein. Geht ja eigentlich jetzt auch so. Am Ende stelle ich dann noch mal den gesamten Code, wie er jetzt aussieht, ein. Dann kannst Du sehen, was ich meine.
Nun aber zu der noch offenen Frage. Wenn die Zelle markiert und als aktiv gekennzeichet (angeklickt) wurde, sehe ich diese ja im Ausschnitt. Was aber muß ich statt einer Zellaktivierung an Code eingeben, das die ganze ZEILE, in der die Zelle sich befindet angeklickt, also aktiviert wird? Sowas hatte ich bis heute noch nicht zu programmieren. Vielleicht weißt Du da ja noch mal Rat.
Ich danke Dir - auch falls jetzt nichts mehr von Dir kommt.
;-)
Ciao
P.S.:
Hier der Code
Private Sub CommandButton1_Click()
ActiveWindow.ScrollRow = 1
Range("A1").Select
Range("B1").Value = ""
Range("B8:L245").Interior.ColorIndex = xlNone
Dim Zelle As Range
Dim SuchenNeu As String, SuchenAlt As String
Dim Farbe As Long
SuchenNeu = InputBox("Suchbegriff", " Suchbegriff", "")
If SuchenNeu = "" Then Exit Sub
Range("B1").Value = SuchenNeu
With ActiveSheet.UsedRange
Set Zelle = .Find(SuchenNeu, LookIn:=xlValues)
If Not Zelle Is Nothing Then
SuchenAlt = Zelle.Address
Do
Farbe = Zelle.Interior.ColorIndex
Zelle.Interior.ColorIndex = 3
If Range("B1").Value = SuchenNeu Then Zelle.Activate
If MsgBox(" Weitersuchen?", vbYesNo + vbQuestion) = vbNo Then
Exit Sub
End If
Zelle.Interior.ColorIndex = Farbe
Set Zelle = .FindNext(Zelle)
Loop While Not Zelle Is Nothing And Zelle.Address <> SuchenAlt
End If
End With
End Sub

 Bild