如何在发布者中设置所选单元格的背景颜色

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 时出现内存不足错误,但这对我来说也发生在您的代码中,所以我希望它适用于无论如何,如果你取消注释倒数第二行。