如何在发布者中设置所选单元格的背景颜色
How can I set the background colour of the selected cell in publisher
我正在尝试创建一个宏,使用 Publisher 中的 VBA 将单元格中文本的字体颜色设置为白色并将单元格背景设置为黑色。
到目前为止,我已经设法设置了要更改的字体颜色,但我真的很难处理背景 - 我找不到要更改的正确值。
这是我目前的情况:
Sub set_to_clue()
Selection.TextRange.Font.Color.RGB = RGB(255, 255, 255)
Selection.TextRange.Font.Fill.BackColor.RGB = RGB(0, 0, 0)
End Sub
进度
通过一些进一步的试验和错误,我已经弄清楚如何让单元格背景发生变化,但是目前我只能通过为 CellRange
指定一个项目编号来做到这一点。这意味着更改颜色的单元格是硬编码的,而不是选定的单元格。如何计算货品编号?
Sub set_to_clue()
Selection.TextRange.Font.Color.RGB = RGB(255, 255, 255)
Selection.TableCellRange.Item(10).Fill.ForeColor.RGB = RGB(0, 255, 0)
End Sub
我现在有一个工作版本,但我确信这不是实现目标的正确或最优雅的方法。
它目前也仅在单元格本身完全突出显示而不是其中的文本或光标位于单元格中时才有效。稍后我可能会努力改进它。
Publisher 2016 中的工作代码:
Sub invert_square()
For Each square In Selection.TableCellRange
If square.Selected = True Then
square.Fill.ForeColor.RGB = RGB(0, 0, 0)
square.TextRange.Font.Color.RGB = RGB(255, 255, 255)
Exit For
End If
Next
End Sub
如果 table 作为一个整体被 selected(select离子类型 pbSelectionShape 和形状类型pbTable) 如果 selection 的类型为 pbSelectionText.
,则为整个单元格
后一种功能的诀窍在于 .ContainingObject 指的是整个 Shape,并且每个 Table Shape 都包含一个 Story 对象。 TextRange 对象的 .Start 和 .End 属性指的是它在 Story 对象中的位置。通过比较这两个属性,我们能够确定 selected 文本属于哪个单元格(在 Publisher 中不可能同时 select 几个不同单元格中的一点文本)。
在我想出这种方法之前,我尝试调用 .Parent 直到 TypeName() 等于 "Cell",但这行不通,因为 Selection.TextRange 的 .Parent 是 Selection(并且不是我所希望的文档本身中的 Parent)
Option Explicit
Sub InvertSquare()
ActiveDocument.BeginCustomUndoAction "Invert square"
Dim oCell As Cell
Dim oShape As Shape
If selection.Type = pbSelectionTableCells Then
Debug.Print "Table cells"
For Each oCell In selection.TableCellRange
SetInvertedColors oCell
Next oCell
ElseIf selection.Type = pbSelectionText Then
Debug.Print "Text"
Dim selText As TextRange
Dim x As Variant
Set selText = selection.TextRange
Set x = selText.ContainingObject
If TypeName(x) = "Shape" Then
If x.Type = pbTable Then
For Each oCell In x.Table.Cells
If oCell.HasText Then
If oCell.TextRange.Start <= selText.Start Then
If oCell.TextRange.End >= selText.End Then
SetInvertedColors oCell
Exit For
End If
End If
End If
Next oCell
End If
End If
ElseIf selection.Type = pbSelectionShape Then
Debug.Print "ShapeRange"
Dim oShapes As ShapeRange
Set oShapes = selection.ShapeRange
For Each oShape In oShapes
If oShape.Type = pbTable Then
For Each oCell In selection.TableCellRange
SetInvertedColors oCell
Next oCell
Exit For
End If
Next oShape
Debug.Print "Shape"
End If
ActiveDocument.BeginCustomUndoAction "Invert square"
End Sub
Sub SetInvertedColors(oCell As Cell)
Debug.Print oCell.TextRange.Text
oCell.TextRange.Font.Color = RGB(255, 255, 255)
''oCell.Fill.ForeColor.RGB = RGB(0, 0, 0) ''Out of memory error for whatever reason
End Sub
出于某种原因,当我尝试在 Publisher 中设置 .ForeColor.RGB 时出现内存不足错误,但这对我来说也发生在您的代码中,所以我希望它适用于无论如何,如果你取消注释倒数第二行。
我正在尝试创建一个宏,使用 Publisher 中的 VBA 将单元格中文本的字体颜色设置为白色并将单元格背景设置为黑色。
到目前为止,我已经设法设置了要更改的字体颜色,但我真的很难处理背景 - 我找不到要更改的正确值。
这是我目前的情况:
Sub set_to_clue()
Selection.TextRange.Font.Color.RGB = RGB(255, 255, 255)
Selection.TextRange.Font.Fill.BackColor.RGB = RGB(0, 0, 0)
End Sub
进度
通过一些进一步的试验和错误,我已经弄清楚如何让单元格背景发生变化,但是目前我只能通过为 CellRange
指定一个项目编号来做到这一点。这意味着更改颜色的单元格是硬编码的,而不是选定的单元格。如何计算货品编号?
Sub set_to_clue()
Selection.TextRange.Font.Color.RGB = RGB(255, 255, 255)
Selection.TableCellRange.Item(10).Fill.ForeColor.RGB = RGB(0, 255, 0)
End Sub
我现在有一个工作版本,但我确信这不是实现目标的正确或最优雅的方法。
它目前也仅在单元格本身完全突出显示而不是其中的文本或光标位于单元格中时才有效。稍后我可能会努力改进它。
Publisher 2016 中的工作代码:
Sub invert_square()
For Each square In Selection.TableCellRange
If square.Selected = True Then
square.Fill.ForeColor.RGB = RGB(0, 0, 0)
square.TextRange.Font.Color.RGB = RGB(255, 255, 255)
Exit For
End If
Next
End Sub
如果 table 作为一个整体被 selected(select离子类型 pbSelectionShape 和形状类型pbTable) 如果 selection 的类型为 pbSelectionText.
,则为整个单元格后一种功能的诀窍在于 .ContainingObject 指的是整个 Shape,并且每个 Table Shape 都包含一个 Story 对象。 TextRange 对象的 .Start 和 .End 属性指的是它在 Story 对象中的位置。通过比较这两个属性,我们能够确定 selected 文本属于哪个单元格(在 Publisher 中不可能同时 select 几个不同单元格中的一点文本)。
在我想出这种方法之前,我尝试调用 .Parent 直到 TypeName() 等于 "Cell",但这行不通,因为 Selection.TextRange 的 .Parent 是 Selection(并且不是我所希望的文档本身中的 Parent)
Option Explicit
Sub InvertSquare()
ActiveDocument.BeginCustomUndoAction "Invert square"
Dim oCell As Cell
Dim oShape As Shape
If selection.Type = pbSelectionTableCells Then
Debug.Print "Table cells"
For Each oCell In selection.TableCellRange
SetInvertedColors oCell
Next oCell
ElseIf selection.Type = pbSelectionText Then
Debug.Print "Text"
Dim selText As TextRange
Dim x As Variant
Set selText = selection.TextRange
Set x = selText.ContainingObject
If TypeName(x) = "Shape" Then
If x.Type = pbTable Then
For Each oCell In x.Table.Cells
If oCell.HasText Then
If oCell.TextRange.Start <= selText.Start Then
If oCell.TextRange.End >= selText.End Then
SetInvertedColors oCell
Exit For
End If
End If
End If
Next oCell
End If
End If
ElseIf selection.Type = pbSelectionShape Then
Debug.Print "ShapeRange"
Dim oShapes As ShapeRange
Set oShapes = selection.ShapeRange
For Each oShape In oShapes
If oShape.Type = pbTable Then
For Each oCell In selection.TableCellRange
SetInvertedColors oCell
Next oCell
Exit For
End If
Next oShape
Debug.Print "Shape"
End If
ActiveDocument.BeginCustomUndoAction "Invert square"
End Sub
Sub SetInvertedColors(oCell As Cell)
Debug.Print oCell.TextRange.Text
oCell.TextRange.Font.Color = RGB(255, 255, 255)
''oCell.Fill.ForeColor.RGB = RGB(0, 0, 0) ''Out of memory error for whatever reason
End Sub
出于某种原因,当我尝试在 Publisher 中设置 .ForeColor.RGB 时出现内存不足错误,但这对我来说也发生在您的代码中,所以我希望它适用于无论如何,如果你取消注释倒数第二行。