我有一个宏,可以根据同一单元格中的文本更改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
答案 0 :(得分:1)
基于Answer that was given to you yesterday ...
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
答案 1 :(得分:0)
您可以使用ContentControl的Exit事件。当用户移出单元格时,将根据所选内容对其进行格式化。此代码位于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事件,但这超出了此答案的范围。