Word VBA 用于为 ContentControl 放置在重复内容控件中的 table 单元格提供背景颜色
Word VBA for giving Background Color of table cell where ContentControl placed in Repeating Content Control
我在 Word 中有一个 table 从重复部分内容控件构建的。 CC的重复部分的单元格中有文本内容控件。
我可以根据文字给字体颜色;但我无法更改单元格的阴影,除了最后一行。
在调试会话中,无论我看到正确的行号和列号,Shading.BackgroundPatternColor
都不会改变颜色。令人惊讶的是,它适用于 table.
的最后一行
Dim CC As ContentControl
Dim TableNum As Long, RowNum As Long, ColNum As Long
For Each CC In ActiveDocument.ContentControls
If CC.Tag = "tagPriority" Then
If CC.Range.Text = "Critical" Then
CC.Range.Font.TextColor = wdColorAutomatic
If CC.Range.Information(wdWithInTable) Then
TableNum = Me.Range(0, CC.Range.End).Tables.Count
RowNum = CC.Range.Information(wdStartOfRangeRowNumber)
ColNum = CC.Range.Information(wdStartOfRangeColumnNumber)
ActiveDocument.Tables(TableNum).Cell(RowNum, ColNum).Shading.BackgroundPatternColor = wdColorDarkRed
End If
...
此外,我得到了 the code in Whosebug
的帮助
改变后
TableNum = Me.Range(0, CC.Range.End).Tables.Count
到
TableNum = ActiveDocument.Range(0, CC.Range.End).Tables.Count
它对我有用。如果您的代码位于 ThisDocument
模块的文档事件处理程序中,我将您的代码放在一个标准模块中,所以 YMMV。
当然还有另一种获取table的方法也有效
Dim tbl As Table
Set tbl = CC.Range.Tables(1)
tbl.Cell(RowNum, ColNum).Shading.BackgroundPatternColor = wdColorDarkRed
编辑:
我使用的代码:
Sub AddCellShading()
Dim CC As ContentControl
Dim tbl As Table, RowNum As Long, ColNum As Long
For Each CC In ActiveDocument.ContentControls
If CC.Tag = "tagPriority" Then
If CC.Range.Text = "Critical" Then
CC.Range.Font.TextColor = wdColorAutomatic
If CC.Range.Information(wdWithInTable) Then
Set tbl = CC.Range.Tables(1)
RowNum = CC.Range.Information(wdStartOfRangeRowNumber)
ColNum = CC.Range.Information(wdStartOfRangeColumnNumber)
tbl.Cell(RowNum, ColNum).Shading.BackgroundPatternColor = wdColorDarkRed
End If
End If
End If
Next CC
End Sub
结果:
我在 Word 中有一个 table 从重复部分内容控件构建的。 CC的重复部分的单元格中有文本内容控件。
我可以根据文字给字体颜色;但我无法更改单元格的阴影,除了最后一行。
在调试会话中,无论我看到正确的行号和列号,Shading.BackgroundPatternColor
都不会改变颜色。令人惊讶的是,它适用于 table.
Dim CC As ContentControl
Dim TableNum As Long, RowNum As Long, ColNum As Long
For Each CC In ActiveDocument.ContentControls
If CC.Tag = "tagPriority" Then
If CC.Range.Text = "Critical" Then
CC.Range.Font.TextColor = wdColorAutomatic
If CC.Range.Information(wdWithInTable) Then
TableNum = Me.Range(0, CC.Range.End).Tables.Count
RowNum = CC.Range.Information(wdStartOfRangeRowNumber)
ColNum = CC.Range.Information(wdStartOfRangeColumnNumber)
ActiveDocument.Tables(TableNum).Cell(RowNum, ColNum).Shading.BackgroundPatternColor = wdColorDarkRed
End If
...
此外,我得到了 the code in Whosebug
的帮助改变后
TableNum = Me.Range(0, CC.Range.End).Tables.Count
到
TableNum = ActiveDocument.Range(0, CC.Range.End).Tables.Count
它对我有用。如果您的代码位于 ThisDocument
模块的文档事件处理程序中,我将您的代码放在一个标准模块中,所以 YMMV。
当然还有另一种获取table的方法也有效
Dim tbl As Table
Set tbl = CC.Range.Tables(1)
tbl.Cell(RowNum, ColNum).Shading.BackgroundPatternColor = wdColorDarkRed
编辑: 我使用的代码:
Sub AddCellShading()
Dim CC As ContentControl
Dim tbl As Table, RowNum As Long, ColNum As Long
For Each CC In ActiveDocument.ContentControls
If CC.Tag = "tagPriority" Then
If CC.Range.Text = "Critical" Then
CC.Range.Font.TextColor = wdColorAutomatic
If CC.Range.Information(wdWithInTable) Then
Set tbl = CC.Range.Tables(1)
RowNum = CC.Range.Information(wdStartOfRangeRowNumber)
ColNum = CC.Range.Information(wdStartOfRangeColumnNumber)
tbl.Cell(RowNum, ColNum).Shading.BackgroundPatternColor = wdColorDarkRed
End If
End If
End If
Next CC
End Sub
结果: