2017-11-14 22 views
1

Ich bin zu VBA neu, also kämpfe ich mit, was scheint eine ziemlich einfache Aufgabe zu sein.Ändern Sie Textfarbe in der Zelle, die auf Text in der gleichen Zelle basiert - Wort VBA

Ich habe ein paar Zeilen Text in jeder Zelle in einem Word-Dokument. Jede Zelle enthält eine Kategorie wie "Wissenschaft" oder "Gesundheit" oder eine von mehreren anderen. Momentan benutze ich nur ein spezielles Zeichen wie "*" oder "@" für Testzwecke.

Ich brauche die Textfarbe des gesamten Textes in der Zelle, um zu ändern, welche Kategorie in der Zelle ist. So würde der txt z.B. grün für "Wissenschaft" und rot für "Gesundheit".

Es scheint, dass das Ausführen eines Makros der schnellste Weg ist, diese Änderungen vorzunehmen (es wird über 200 solcher Zellen in meinem endgültigen Dokument geben und das manuelle Einfärben ist so eine Verschwendung von Zeit). Im Grunde kämpfe ich damit, zuerst die Farbe des gesamten Textes in der Zelle zu ändern, und zweitens, wie man die Makrosuche erneut durchführt, wenn das erste Kriterium nicht erfüllt ist. Ich möchte 1 Makro, das die Färbung für das gesamte Dokument vervollständigen könnte, anstatt mehrere Makros für jede Farbe, die ich brauche.

Wenn Sie mir einige Beispiele von VBA geben könnten, mit denen ich arbeiten könnte, wäre das sehr hilfreich. Ich kämpfe sehr und jede Hilfe, die du geben kannst, wird mir und meinem Team so viel Zeit sparen.

+1

gesetzt Did Sie versuchen, ein Makro aufzuzeichnen? Es wird Ihnen den Code geben. – braX

+0

Ich kann ein Makro aufzeichnen, das nach einem bestimmten Text suchen und dann die Farbe dieses Textes ändern kann, aber ich muss die Farbe des gesamten Textes in dieser Zelle ändern, nicht nur den angegebenen Text. Das ist der Teil, mit dem ich kämpfe. – PMC11

Antwort

1

Dies sollte relativ gut funktionieren, es sei denn, Ihr Dokument ist riesig oder Ihre Keyword-Liste ist riesig oder beides.

Sub ColorCells() 

    Dim tbl As Table 
    Dim rw As Row 
    Dim cll As Cell 
    Dim i As Long 
    Dim Keywords As Variant, Colors As Variant 

    'if you have more than one table, you have to look through them 
    Set tbl = ThisDocument.Tables(1) 

    'Make two arrays - one with keywords and the second with colors 
    'where the colors are in the same position in their array as the 
    'keywords are in theirs 
    Keywords = Array("Science", "Health") 
    Colors = Array(wdBlue, wdDarkRed) 

    'Loop through every row in the table 
    For Each rw In tbl.Rows 
     'Loop through every cell in the row 
     For Each cll In rw.Cells 
      'Loop through every keyword in your array 
      For i = LBound(Keywords) To UBound(Keywords) 
       'if the keyword exist, change the color and stop checking 
       'further keywords 
       If InStr(1, cll.Range.Text, Keywords(i)) > 0 Then 
        cll.Range.Font.ColorIndex = Colors(i) 
        Exit For 
       End If 
      Next i 
     Next cll 
    Next rw 

End Sub 

Wenn Sie benutzerdefinierte Farben verwenden, anstatt in diejenigen von gebaut, ändern Sie die Farben Array Zuordnungslinie zu

Colors = Array(RGB(192, 192, 192), RGB(188, 25, 67)) 

und die Linie, wo Sie die Farbe

cll.Range.Font.TextColor.RGB = Colors(i) 
+0

Vielen Dank für einen Blick darauf! Wenn ich das Makro laufen bekomme ich einen Laufzeitfehler für die folgende Zeile ein: Set tbl = ThisDocument.Tables (1) Sie diesen Abschnitt ein wenig mehr erklären konnte bitte? Ich habe mehrere Tabellen in meinem Dokument, wenn das hilft. – PMC11

+0

@ PMC11 Ändern Sie "ThisDocument" in "ActiveDocument". Die Verwendung von 'ThisDocument' gibt einen Laufzeitfehler zurück 5941 – dwirony

+0

@dwirony Excellent, vielen Dank, dass jetzt funktioniert. Ich sehe, dass ich die Zahl ändern kann, so dass das Makro innerhalb dieser bestimmten Tabelle funktioniert. – PMC11

Verwandte Themen