2016-08-17 3 views
1

Я пытаюсь создать макрос, который устанавливает цвет шрифта текста в ячейке на белый, а цвет ячейки - в черный, используя VBA в Publisher.Как установить цвет фона выбранной ячейки в издателе

До сих пор мне удалось настроить цвет шрифта для изменения, но я действительно борюсь с фоном - я не могу найти нужное значение для изменения.

Вот что я до сих пор:

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 

ответ

0

У меня теперь есть рабочая версия, хотя я уверен, что это не правильный или самый элегантный способ достижения цели.

Он также работает только тогда, когда сама ячейка целиком выделена, а не только текст внутри нее или только курсор, находящийся в ячейке. Я могу работать, чтобы улучшить это позже.

Рабочий код в 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 
0

Это расширяет свой код так, что он работает для всей таблицы, если таблица в целом выбран (выбор типа pbSelectionShape и тип формы pbTable) и для всей ячейка, если выбор имеет тип pbSelectionText.

Фокус для последней функциональности заключается в том, что объект .ContainingObject относится ко всей форме и что каждая форма таблицы состоит из одного объекта Story. Свойства .Start и .End объекта TextRange относятся к его позиции внутри объекта Story. Сравнивая эти два свойства, мы можем определить, к какой ячейке принадлежит выбранный текст (в Publisher невозможно одновременно выбрать немного текста в нескольких разных ячейках).

Прежде чем я понял этот подход, я попытался вызвать .Parent, пока TypeName() не станет равным «Cell», но это не сработает, потому что .Parent для Selection.TextRange - это 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 

по какой-то причине, я получить из ошибки памяти при попытке установить .ForeColor.RGB в Publisher, но это происходит с вашим кодом для меня тоже, так что я Я надеюсь, что это сработает для вас, если вы раскомментируете вторую последнюю строку.

Смежные вопросы