233 Aufrufe
Gefragt in Tabellenkalkulation von oskar92 Einsteiger_in (51 Punkte)
Bearbeitet von oskar92
Hallo Helfer, ist es richtig den Code eines Makros hier "einfach so" reinzukopieren? Kann man hier auch Beispieldateien hochladen?

Das folgende Makro macht (fast) alles was es soll. Per Inputbox wird ein Begriff abgefragt, wenn in der Tabelle vorhanden, dann Farbcode Abfrage, dann werden alle Fundstellen eingefärbt, (danach ggf. Farbe entfernt). Wenn KEINE Eingabe erfolgt, dann Exit Sub. Soweit o.k.

ABER wenn Suchbegriff nicht gefunden wird, dann soll das Makro NICHT beendet werden, sondern es soll erneut die InputBox erscheinen. Für diesen "Rücksprung" im Makro bin ich zu blöd.

Sub Finden_faerben() 'Update by Extendoffice 20190813, ergänzt von woher55 8/2021
Dim i As Byte
Dim ColInd As Byte
Dim xRg As Range
Dim xFRg As Range
Dim xStrAddress As String
Dim xVrt As Variant
ColInd = 7          'Voreinstellung
For i = 1 To 99 Step 1
xVrt = Application.InputBox(prompt:="Suche nach:")            'ab dieser Zeile soll das Makro wiederholt ausgeführt werden,bis in der Inputbox keine Eingabe mehr erfolgt
If xVrt = "" Then Exit Sub
Set xFRg = ActiveSheet.Cells.Find(what:=xVrt)
If xFRg Is Nothing Then
MsgBox prompt:="nicht vorhanden"
Exit Sub    'hier soll aber NICHT abgebrochen, sondern erneut die InputBox aufgerufen, werden.
End If
ColInd = Application.InputBox(prompt:="welcher FarbIndex? hellgrün 4; gelb 6; magenta 7; türkis 8; hellgrau 15; dunkelgrau16", Default:=ColInd)
xStrAddress = xFRg.Address
Set xRg = xFRg
Do
Set xFRg = ActiveSheet.Cells.FindNext(After:=xFRg)
Set xRg = Application.Union(xRg, xFRg)
Loop Until xFRg.Address = xStrAddress
If xRg.Count > 0 Then
xRg.Interior.ColorIndex = ColInd
xRsp = MsgBox(prompt:="Farben wiederlöschen?", Buttons:=vbQuestion + vbOKCancel)
If xRsp = vbOK Then xRg.Interior.ColorIndex = xlNone
End If
Next i
End Sub

Schönen Abend noch, viele Grüße Oskar

Ich hatte gerade ein dickes Brett vorm Kopf.

Habe die Antwort gerade selbst in einer anderen Frage gesehen: GoTo - Start:

Gute Nacht

2 Antworten

0 Punkte
Beantwortet von flupo Profi (17.7k Punkte)
Ich würde das nicht mit einer For-Schleife machen. Da ist Do...Loop besser geeignet.

https://docs.microsoft.com/de-de/office/vba/language/reference/user-interface-help/doloop-statement

Gruß Flupo
0 Punkte
Beantwortet von oskar92 Einsteiger_in (51 Punkte)
Die "For i = 1......", Next Schleife war auch unsinnig.

Stattdessen dort "Start" und nach " MsgBox......": Goto Start und am Ende noch mal: GoTo Start.:

Viele Grüße Wolfgang
...