Вы можете использовать событие 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, но это выходит за рамки этого ответа.