使用 VBA 在 MS Word 中设置条件格式
Conditional Formatting in MS Word using VBA
美好的一天,
我正在尝试使用 VBA 在 Microsoft Word 中使用有效的条件格式,这与 Excel 中已知的格式非常相似。
我目前的解决方案
我在第 4 列的字段中有一个 IF 语句,用于检查第 2 列中的值是否小于或大于第 3 列中的值,结合此 VBA 条件格式:
Sub UBC()
color "No", wdRed
color "Yes", wdBrightGreen
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
If r.Cells(1).ColumnIndex = 4 Then
r.Cells(1).Shading.BackgroundPatternColorIndex = backgroundColor
End If
End If
Loop
End With
End Function
我想要达到的结果
我想删除第 4 列并使用 VBA 检查 IF 语句现在处理的内容。除此之外,我还想使用 RGB 或 HEX 颜色代码而不是 wdColorIndex 库。
有人可以帮我修改当前代码吗?
试试这个
Sub Tester()
Dim tbl As Table, rw As Row, v1, v2
Set tbl = ActiveDocument.Tables(1)
For Each rw In tbl.Rows
v1 = CellValue(rw.Cells(2))
v2 = CellValue(rw.Cells(3))
If IsNumeric(v1) And IsNumeric(v2) Then
v1 = CDbl(v1)
v2 = CDbl(v2)
Debug.Print v1, v2
rw.Cells(2).Shading.BackgroundPatternColor = _
IIf(v1 <= v2, RGB(100, 250, 100), RGB(250, 100, 100))
End If
Next rw
End Sub
Function CellValue(c As Cell)
Dim rv
rv = c.Range.Text
CellValue = Left(rv, Len(rv) - 2) 'remove "end of cell" marker
End Function
美好的一天,
我正在尝试使用 VBA 在 Microsoft Word 中使用有效的条件格式,这与 Excel 中已知的格式非常相似。
我目前的解决方案
我在第 4 列的字段中有一个 IF 语句,用于检查第 2 列中的值是否小于或大于第 3 列中的值,结合此 VBA 条件格式:
Sub UBC()
color "No", wdRed
color "Yes", wdBrightGreen
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
If r.Cells(1).ColumnIndex = 4 Then
r.Cells(1).Shading.BackgroundPatternColorIndex = backgroundColor
End If
End If
Loop
End With
End Function
我想要达到的结果
我想删除第 4 列并使用 VBA 检查 IF 语句现在处理的内容。除此之外,我还想使用 RGB 或 HEX 颜色代码而不是 wdColorIndex 库。
有人可以帮我修改当前代码吗?
试试这个
Sub Tester()
Dim tbl As Table, rw As Row, v1, v2
Set tbl = ActiveDocument.Tables(1)
For Each rw In tbl.Rows
v1 = CellValue(rw.Cells(2))
v2 = CellValue(rw.Cells(3))
If IsNumeric(v1) And IsNumeric(v2) Then
v1 = CDbl(v1)
v2 = CDbl(v2)
Debug.Print v1, v2
rw.Cells(2).Shading.BackgroundPatternColor = _
IIf(v1 <= v2, RGB(100, 250, 100), RGB(250, 100, 100))
End If
Next rw
End Sub
Function CellValue(c As Cell)
Dim rv
rv = c.Range.Text
CellValue = Left(rv, Len(rv) - 2) 'remove "end of cell" marker
End Function