Estou tentando criar uma macro VBA no Microsoft Word que irá:
Comece com uma seleção de texto que sirva como uma "chave de cores". Cada linha na seleção tem uma cor e uma sequência de texto exclusivas.
Armazene a cor da fonte e o texto de cada linha na seleção.
Procure no restante do documento por parágrafos com cores de fonte que correspondam a qualquer cor na seleção "chave de cores".
Adicione o texto correspondente da legenda de cores antes de qualquer parágrafo que compartilhe a mesma cor de fonte.
A saída esperada deveria ser assim, se as três linhas fossem selecionadas e a macro fosse executada.
Código, eu tentei
Sub ApplyColorKeyPrefixes()
Dim doc As Document
Dim selectedRange As Range
Dim colorKeyColors As Collection
Dim colorKeyPrefixes As Collection
Dim para As Paragraph
Dim line As Range
Dim colorCode As Long
Dim prefixText As String
Dim i As Long
' Initialize document and collections for color key
Set doc = ActiveDocument
Set colorKeyColors = New Collection
Set colorKeyPrefixes = New Collection
Set selectedRange = Selection.Range
For i = 1 To selectedRange.Paragraphs.Count
Set line = selectedRange.Paragraphs(i).Range
line.End = line.End - 1 ' Exclude paragraph mark
' Store the color and corresponding text
colorCode = line.Font.Color
prefixText = Trim(line.Text)
On Error Resume Next
colorKeyColors.Add colorCode, CStr(colorCode)
colorKeyPrefixes.Add prefixText, CStr(colorCode)
On Error GoTo 0
Next i
'oop through all paragraphs in the document (after selection) to find matches
For Each para In doc.Paragraphs
' Skip paragraphs in the initial selection
If para.Range.Start >= selectedRange.End Then
Set line = para.Range.Words(1) ' use first text of selection to determine color
colorCode = line.Font.Color
' Check if color match in parag
On Error Resume Next
prefixText = colorKeyPrefixes(CStr(colorCode))
On Error GoTo 0
If prefixText <> "" Then
para.Range.InsertBefore prefixText & ": "
' Retain color for the og text and the prefix text
para.Range.Words(1).Font.Color = colorCode
para.Range.Font.Color = colorCode
End If
End If
Next para
Set colorKeyColors = Nothing
Set colorKeyPrefixes = Nothing
End Sub
O Problema O código está atualmente aplicando prefixos a todos os parágrafos, não apenas aos que têm cores de fonte correspondentes. Suspeito que pode haver um problema com a forma como estou verificando as correspondências de cores de fonte em colorKeyPrefixes, mas não tenho certeza de onde está o problema.
Como posso modificar a macro para que ela acrescente o texto do prefixo somente aos parágrafos que tenham a mesma cor de fonte de uma das linhas na "chave de cores" selecionada?
Notas Adicionais Cada linha na seleção tem a garantia de ter apenas uma cor. A chave de cores pode conter até 12 cores diferentes. Estou usando a primeira palavra de cada parágrafo para verificar a cor (assumindo que a cor se aplica ao parágrafo inteiro).