2017-03-22 2 views
-1

Ich habe Zellen in einem Blatt, das eine Reihe von Text enthalten, sondern haben auch einen bestimmten Text in eckigen Klammern, die wie folgt aussehen:Farbe ändern von Text in Zellen in Klammern

[zuordnen: einen Text hier]

[Select: einen Text hier]

ich brauche ein Makro, das die Farbe irgendeines Textes mit Assign zu grün (einschließlich Assign) beginnen wird sich ändern und einen beliebigen Text mit Wählen Sie zum blauen Start (auch einschließlich Select). Klammern selbst können farblich geändert werden oder nicht, was auch immer am einfachsten ist.

Ich habe mehrere Möglichkeiten versucht, dies zu tun, aber kann nicht mit einer Regex oder ersetzen, wie dies zu tun. Am nächsten kam ich, indem ich den gesamten Text innerhalb von [] Klammern hochstellte, aber keinen Unterschied zwischen Assign oder Select machte.

schätzen die Hilfe

Edit:

Was ich habe, so weit:

Sub test() 
    Dim r As Range 
    Dim m As Object 
    Dim test As Range 
    Dim strInput As String 
    With CreateObject("VBScript.RegExp") 
     .Global = True 
     .IgnoreCase = True 
     .Pattern = "\[(.*?)\]" 
     For Each r In Range("C2:C2") 
      If .test(r.Value) Then 
       For Each m In .Execute(r.Value) 
        r.Value = Replace(r.Value, m.Value, UCase(m.Value)) 
       Next 
      End If 
     Next 
    End With 
End Sub 
+2

Können Sie zeigen, was Sie bisher haben? – Adam

Antwort

1
Range(SomeRange).Characters(start,length).Font.Color = vbGreen 

Start- und Länge zu erhalten, verwenden Instr

start = Instr(1, Range(SomeRange).Value, "[Assign", vbTextCompare) 
length = Instr(start, Range(SomeRange).Value, "]", vbTextCompare) - start + 1 

Wenn start ist Null, dann wird die Zeichenfolge nicht gefunden.

-

UPDATE:

Off Oberseite meines Kopfes, für mehrere Instanzen in der gleichen Zelle:

start = 1 

Do 

    start = Instr(start, Range(SomeRange).Value, "[Assign", vbTextCompare) 

    If start > 0 Then 

     length = Instr(start, Range(SomeRange).Value, "]", vbTextCompare) - start + 1 

     if length > 1 then Range(SomeRange).Characters(start, length).Font.Color = vbGreen 

     start = start + length 

    End If 

Loop While start > 0 
+1

Eine weitere Ebene der Fehlerkontrolle, wenn Sie 'length = Instr (start, ...' für die zweite. Es wird immer noch die Position von Anfang an zurückgeben, nicht von wo * start * ist. – Jeeped

+0

Guter Fang - aktualisierte Antwort – blackworx

+0

Dies scheint zu funktionieren! Was wäre der einfachste Weg, dies in eine Schleife zu setzen? Manchmal habe ich mehrere dieser Klammer Aussagen pro Zelle. (Mein Excel VBA ist wirklich Mist) – Craig