Использование макроса для создания условного форматирования в Word согласно Excel - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть документ Excel с условным форматированием, который меняет цвет фона ячейки, в зависимости от конкретного выбранного [выпадающего] текста. Например, Да, цвет фона ячейки меняется на Зеленый, Нет на Красный, Неизвестен на Желтый и Не применим к Серому.

Все легко.

Затем мне нужно отправить документ в документ Word, чтобы заполнить документ Word таблицей Excel - документ Word также содержит другой текст, не относящийся к Excel.

Поскольку условное форматирование ячеек не встречается, я использовал недооцененный код в макросе, чтобы изменить цвет фона в Word. Он запускается, но, кажется, после первого цикла, кажется, сбой с ошибкой - Runtime error 5907 - there is no table at this location.

строка в коде r.Cells(1).Shading.BackgroundPatternColorIndex = backgroundColor выделена желтым цветом.

Мой уровень кодирования является базовым, поэтому я не знаю, что происходит не так.

Если кто-нибудь сможет предложить простое решение, я был бы признателен.

Спасибо

Dim r As Range

Sub UBC()
    color "No", wdRed
    color "Yes", wdGreen
    color "Unknown", wdYellow
    color "Not Applicable", wdGray50
End Sub

Function color(text As String, backgroundColor As WdColorIndex)
    Set r = ActiveDocument.Range

    With r.Find
       Do While .Execute(FindText:=text, MatchWholeWord:=True, Forward:=True) = True
    r.Cells(1).Shading.BackgroundPatternColorIndex = backgroundColor
       Loop
    End With
End Function

1 Ответ

0 голосов
/ 06 сентября 2018

Возможно (вероятно), что Word находит комбинацию символов вне ячейки таблицы. Безопаснее всего проверить, является ли найденный термин на самом деле в таблице. (Примечание: я также поместил объявление переменной Dim r внутри функции ...)

Sub UBC()
    color "No", wdRed
    color "Yes", wdGreen
    color "Unknown", wdYellow
    color "Not Applicable", wdGray50
End Sub

Function color(text As String, backgroundColor As WdColorIndex)
    Dim r As Word.Range

    Set r = ActiveDocument.content

    With r.Find
       Do While .Execute(findText:=text, MatchWholeWord:=True, Forward:=True) = True
          If r.Tables.Count > 0 Then
            r.Cells(1).Shading.BackgroundPatternColorIndex = backgroundColor
          End If
       Loop
    End With
End Function
...