У меня есть макрос, который изменяет цвет фона таблицы в Word в зависимости от текста в той же ячейке - аналогично правилам условного форматирования Excel.
Однако я хочу ограничить это определенным столбцом - столбец 2 в таблице из многих строк, но двух столбцов: столбец 1 - это вопрос, а столбец 2 - это место, где пользователь вводит ответ из раскрывающегося списка - и в зависимости от ответа ячейка меняет цвет.
Мой код ниже; но это применяется к обоим столбцам.
Кто-нибудь знает, как перекодировать, так что это применимо только к столбцу 2 таблицы. Я использую MS Word 2016.
Спасибо
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
Вы можете использовать событие Exit ContentControl. Когда пользователь выходит из ячейки, она форматируется на основе того, что было выбрано. Этот код входит в модуль ThisDocument.
Private Sub Document_ContentControlOnExit(ByVal ContentControl As ContentControl, Cancel As Boolean)
Select Case ContentControl.Range.Text
Case "Yes"
ContentControl.Range.Cells(1).Shading.BackgroundPatternColorIndex = wdGreen
Case "No"
ContentControl.Range.Cells(1).Shading.BackgroundPatternColorIndex = wdRed
Case "Unknown"
ContentControl.Range.Cells(1).Shading.BackgroundPatternColorIndex = wdYellow
Case "Not Applicable"
ContentControl.Range.Cells(1).Shading.BackgroundPatternColorIndex = wdGray50
End Select
End Sub
Если вы используете устаревшие раскрывающиеся списки в качестве полей формы, вы можете поместить эту подпрограмму как макрос выхода. Вам нужно будет заполнить макрос для всех опций.
Public Sub LegacyDropDownExit()
ThisDocument.Unprotect
Select Case Selection.FormFields(1).Result
Case "Yes"
Selection.Cells(1).Range.Shading.BackgroundPatternColorIndex = wdGreen
Case "No"
Selection.Cells(1).Range.Shading.BackgroundPatternColorIndex = wdRed
End Select
ThisDocument.Protect wdAllowOnlyFormFields, True
End Sub
Если вы используете элементы управления ActiveX, вы можете сделать что-то вроде этого
Private Sub ComboBox1_Change()
ChangeCellBg Me.ComboBox1.Value, 1
End Sub
Private Sub ComboBox2_Change()
ChangeCellBg Me.ComboBox2.Value, 2
End Sub
Private Sub ComboBox3_Change()
ChangeCellBg Me.ComboBox3.Value, 3
End Sub
Private Sub ChangeCellBg(ByVal sValue As String, ByVal lRow As Long)
Select Case sValue
Case "Yes"
Me.Tables(1).Cell(lRow, 2).Range.Shading.BackgroundPatternColorIndex = wdGreen
Case "No"
Me.Tables(1).Cell(lRow, 2).Range.Shading.BackgroundPatternColorIndex = wdRed
End Select
End Sub
Вы также можете создать модуль класса, чтобы вам не приходилось создавать все эти события Change, но это выходит за рамки этого ответа.
Я не вижу ссылки на элементы управления содержимым в этом вопросе ...?
Вот почему я спросил, какой выпадающий Добрый используется. OP относится к раскрывающемуся списку, но не говорит, какой именно.
Ближе к концу параграфа 2 написано: «... где пользователь вводит ответ из раскрывающегося списка ...»
Основываясь на Ответ, который был дан вам вчера ...
После того, как If
проверит, находится ли найденный диапазон в таблице, можно условно проверить, в каком столбце находится ячейка диапазона:
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
If r.Cells(1).ColumnIndex = 2 Then
r.Cells(1).Shading.BackgroundPatternColorIndex = backgroundColor
End If
End If
Loop
End With
End Function
Какой тип раскрывающегося списка используется?