Registriert seit: 30.10.2014
	
 Version(en): 2013
	 
 
	
	
		Hallo VBA Experten,
  ich bräuchte mal Rat, oder besser gesagt etwas VBA Code. Ich habe in meiner Zelle Strings stehen, die ab einer bestimmten Stelle rot eingefärbt sind. Ich brauche nun  VBA Code der mir ausgibt, ab welcher Stelle die Rotfärbung eintritt und ab wann diese  in der betreffenden Zelle wieder aufhört.
  Danke im voraus!
	 
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 10.04.2014
	
 Version(en): 97-2019 (32) + 365 (64)
	 
 
	
	
		Hallöchen, probiere es mal damit. Eventuell musst Du den Zahlencode 255 anpassen, falls Du oder Dein Excel ein anderes rot hast als ich   Code: Sub ColorPosition() Dim iChar As Integer, strPos As String With ActiveCell   Do While iChar < Len(.Value)     iChar = iChar + 1     If .Characters(Start:=iChar, Length:=1).Font.Color = 255 Then       If iChar > 1 And .Characters(Start:=iChar - 1, Length:=1).Font.Color <> 255 Then         strPos = strPos & "S" & iChar & ","       ElseIf iChar = 1 Then         strPos = strPos & iChar & ","       End If     Else       If iChar > 1 Then         If .Characters(Start:=iChar - 1, Length:=1).Font.Color = 255 Then strPos = strPos & "E" & iChar & ","       End If     End If   Loop End With End Sub
  
	 
	
	
.      \\\|///      Hoffe, geholfen zu haben.        ( ô ô )      Grüße, André aus G in T     ooO-(_)-Ooo    (Excel 97-2019+365)
 
	
	
 
 
	
	
	
		
	Registriert seit: 27.07.2014
	
 Version(en): 2013
	 
 
	
	
		Hallo André, das Thema interessiert mich auch. Probiere mit: Code: Sub Testfärben() ActiveCell.Characters(Start:=6, Length:=7).Font.Color = 255 End Sub
 Deinen Code aus und es passiert nichts. Sonja
	  
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 27.07.2014
	
 Version(en): 2013
	 
 
	
		
		
		30.10.2014, 19:03 
(Dieser Beitrag wurde zuletzt bearbeitet: 30.10.2014, 19:14 von schauan.)
		
	 
	
		Hab mich mal selbst dran gesetzt: Code: Sub ColorPosition() 'Erzeugt eine Zeichenkette mit den Start- und Endpositionen einer Einfaerbung 'Variablendeklarationen Dim iChar As Integer, strPos As String 'Mit der aktiven Zelle With ActiveCell   'Schleife solange Zaehler kleiner als Laenge der Zeichenkette ist   Do While iChar < Len(.Value)     'Zaehler hochsetzen     iChar = iChar + 1     'Wenn die Farbe des Zeichens 255 ist, dann     If .Characters(Start:=iChar, Length:=1).Font.Color = 255 Then       'Wenn es min. das 2. Zeichen ist und die Farbe das vorigen Zeichens nicht 255, dann       If iChar > 1 And .Characters(Start:=iChar - 1, Length:=1).Font.Color <> 255 Then         'Startposition uebernehmen         strPos = strPos & "S" & iChar & ","       'Oder wenn es das erste Zeichen ist, dann       ElseIf iChar = 1 Then         'Startposition uebernehmen         strPos = strPos & iChar & ","       'Ende Wenn es min. das 2. Zeichen ist und die Farbe das vorigen Zeichens nicht 255, dann       End If     'Oder Wenn die Farbe des Zeichens nicht 255 ist, dann     Else       'Wenn es nicht das erste Zeichen ist, dann       If iChar > 1 Then         'Wenn die Farbe des vorhergehenden Zeichens 255 ist, dann Endposition setzen         If .Characters(Start:=iChar - 1, Length:=1).Font.Color = 255 Then strPos = strPos & "E" & iChar & ","       End If     'Ende Wenn die Farbe des Zeichens 255 ist, dann     End If   'Ende Schleife solange Zaehler kleiner als Laenge der Zeichenkette ist   Loop 'Ende Mit der aktiven Zelle End With 'Ausgabe der Start- und Endpositionen MsgBox strPos End Sub
 Den code kann man sicherlich noch eleganter lösen.
	  
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 10.04.2014
	
 Version(en): 97-2019 (32) + 365 (64)
	 
 
	
		
		
		30.10.2014, 19:06 
(Dieser Beitrag wurde zuletzt bearbeitet: 30.10.2014, 19:06 von schauan.)
		
	 
	
		Hallo Sonja, ergänze bitte vor End Sub  MsgBox strPos ich hab ganz verpasst, den code wie von mir gewohnt zu kommentieren und hole das gleich nach. In der Zeichenkette stehen die jeweiligen Anfangs- und Endpositionen, immer mit S und E gekennzeichnet. Könnten ja auch mehrere rote Teile sein   
	 
	
	
.      \\\|///      Hoffe, geholfen zu haben.        ( ô ô )      Grüße, André aus G in T     ooO-(_)-Ooo    (Excel 97-2019+365)
 
	
	
 
 
	
	
	
		
	Registriert seit: 27.07.2014
	
 Version(en): 2013
	 
 
	
	
		Hallo André, habe zu diesem Thema, mal diesen Code geschrieben: Code: Sub Position() Dim i As Integer, a As Integer Range("a1").Select
  'Position: For i = 1 To Len(ActiveCell.Value) If ActiveCell.Characters(i, 1).Font.Color = 255 Then     For a = i To Len(ActiveCell.Value)     If Not ActiveCell.Characters(a, 1).Font.Color = 255 Then GoTo X     Next a End If Next i X: Debug.Print "Position: " & i & " Länge = " & a - i
  End Sub
 Er funktioniert und ist schön kurz. Oder gibt es dazu irgendwelche Einwände?
	  
	
	
	
	
 
 
	
	
	
		
	Registriert seit: 10.04.2014
	
 Version(en): 97-2019 (32) + 365 (64)
	 
 
	
	
		Hallo Sonja,
  ja, geht auch. Damit wird nur das erste Auftreten einer Färbung ermittelt - reicht bestimmt meistens.  Bei mir werden alle ausgegeben, und die Längen müssten noch berechnet werden.
	 
	
	
.      \\\|///      Hoffe, geholfen zu haben.        ( ô ô )      Grüße, André aus G in T     ooO-(_)-Ooo    (Excel 97-2019+365)
 
	
	
 
	  
	Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
	  • Nonexperta
 
 
 
	
	
	
		
	Registriert seit: 30.10.2014
	
 Version(en): 2013
	 
 
	
	
		Hallo Sonja und André,
  leider war ich ortsabwesend, deshalb kann ich mich erst jetzt bei  euch bedanken. Nachträglich aber nicht weniger herzlich  für eure Mühe und Einsatz.
	 
	
	
	
	
 
 
	 
 |