2016-08-17 13 views
1

パブリッシャで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 

答えて

0

私は現在、目標を達成するためには正しいまたは最もエレガントな方法ではないと確信していますが、実際のバージョンがあります。

現在のところ、セル自体がその中のテキストだけではなく、カーソルがセル内に完全に強調表示されている場合にのみ機能します。私は後でこれを改善するように働くかもしれない。出版社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型の場合はcellです。

後者の機能のトリックは、.ContainingObjectがShape全体を参照し、すべてのTable Shapeが1つのStoryオブジェクトで構成されていることです。 TextRangeオブジェクトの.Startおよび.Endプロパティは、Storyオブジェクト内のその位置を参照します。これらの2つの特性を比較することにより、選択したテキストがどのセルに属するかを識別することができます(パブリッシャでは複数の異なるセルのテキストを同時に選択することはできません)。

私がこのアプローチを理解する前に、TypeName()が "Cell"と等しくなるまで.Parentを呼び出そうとしましたが、Selection.TextRangeの.ParentはSelectionであり、何らかの理由で、私が望んでいたとして、文書自体)

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を設定しようとすると、私はメモリ不足エラーを取得しますが、これはあまりにも私のためにあなたのコードで発生しますので、私2番目の最後の行のコメントを外すと、それはあなたのために働くことを望んでいます。

関連する問題