пробуйте:
Sub ChangeForegroundColor()
Dim ColorIndexes
ColorIndexes = Array(0, 16711680, 16776960, 65280, 16711935, _
255, 65535, 16777215, 8388608, 8421376, _
32768, 8388736, 128, 32896, 8421504, 12632256)
With Selection.Find
.ClearFormatting
.Text = ""
.Highlight = True
.Replacement.Text = ""
.Forward = True
.Format = True
While .Execute
Select Case Selection.Range.HighlightColorIndex
Case wdBlack: Selection.Font.Color = wdColorBlack
Case wdBlue: Selection.Font.Color = wdColorBlue
Case wdTurquoise: Selection.Font.Color = wdColorTurquoise
Case wdBrightGreen: Selection.Font.Color = wdColorBrightGreen
Case wdPink: Selection.Font.Color = wdColorPink
Case wdRed: Selection.Font.Color = wdColorRed
Case wdYellow: Selection.Font.Color = wdColorYellow
Case wdWhite: Selection.Font.Color = wdColorWhite
Case wdDarkBlue: Selection.Font.Color = wdColorDarkBlue
Case wdTeal: Selection.Font.Color = wdColorTeal
Case wdGreen: Selection.Font.Color = wdColorGreen
Case wdViolet: Selection.Font.Color = wdColorViolet
Case wdDarkRed: Selection.Font.Color = wdColorDarkRed
Case wdDarkYellow: Selection.Font.Color = wdColorDarkYellow
Case wdGray50: Selection.Font.Color = wdColorGray50
Case wdGray25: Selection.Font.Color = wdColorGray25
End Select
' Selection.Font.ColorIndex = ColorIndexes(Selection.Range.HighlightColorIndex+1)
Selection.Range.HighlightColorIndex = wdNoHighlight
Selection.Collapse wdCollapseEnd
Wend
End With
End Sub
Я хотел избежать оператора Select Case, создав массив соответствий цвета выделения и цвета шрифта. Но на строчку
Selection.Font.ColorIndex = ColorIndexes(Selection.Range.HighlightColorIndex+1)
Выдаёт ошибку, что значение выходит за рамки диапазона. Странно, почему константу нельзя заменить её значением?
Лучше день потерять — потом за пять минут долететь!