2

いくつかのテーブルを含むWord文書があります。テーブル(またはテーブル内のセル)を選択して、テーブル内のすべての行を交互の色で色付けできるようにしたいと思います。これまでに、次のコードを作成しました。

Sub ColorTable()
    '
    ' ColorTable Macro
    ' Alternately colors cells.
    '
    Selection.Collapse Direction:=wdCollapseStart
    If Not Selection.Information(wdWithInTable) Then
          MsgBox "Can only run this within a table"
          Exit Sub
    End If
    Dim RowCount, i, count, ColCount As Integer
    RowCount = ActiveDocument.Tables(1).Rows.count
    i = 0
    ColCount = ActiveDocument.Tables(1).Columns.count
    For i = 1 To RowCount
        For count = 1 To ColCount
            Selection.Shading.BackgroundPatternColor = RGB(184, 204, 228)
            'light
            Selection.MoveRight Unit:=wdCharacter, count:=1
        Next count
        Selection.MoveDown Unit:=wdLine, count:=1
        For count = 1 To ColCount
            Selection.Shading.BackgroundPatternColor = RGB(219, 229, 241)
            'dark
            Selection.MoveRight Unit:=wdCharacter, count:=1
        Next count
    Next i
End Sub

マクロはエラーなしで実行されますが、セルの色を斜めのパターンで変更します。問題は私のforループの中にあると思います。

4

3 に答える 3

2
With tblNew
  For i = 1 To .Rows.Count Step 2
    .Rows(i).Shading.Texture = wdTexture10Percent
       ' or
    .Rows(i).Shading.BackgroundPatternColor = RGB(219, 229, 241)
  Next
End With
于 2017-01-13T19:52:28.800 に答える
1

この問題について何も考えなかった数ヶ月後、私は答えを見つけました。

Sub colorTable()
Dim rowCount As Integer
Dim colCount As Integer
Dim count As Integer
Dim row, col As Integer


Selection.Collapse Direction:=wdCollapseStart
If Not Selection.Information(wdWithInTable) Then
    MsgBox "Can only be run from a table"
    Exit Sub
End If

rowCount = Selection.Tables(1).Rows.count - 1
colCount = Selection.Tables(1).Columns.count
row = 0
col = 0

While row < rowCount
   count = 1
     While col < colCount
        Selection.Shading.BackgroundPatternColor = RGB(182, 204, 228)
        If count < colCount Then
            Selection.MoveRight unit:=wdCell, count:=1
            count = count + 1
        End If
        col = col + 1
    Wend
    col = 0
    If row = rowCount - 1 And rowCount Mod 2 = 1 Then
        Exit Sub
    End If

    'dark
        Selection.MoveRight unit:=wdCell, count:=1
        count = 1
        'For Each oCOl In Selection.Tables(1).Columns
        While col < colCount
            Selection.Shading.BackgroundPatternColor = RGB(219, 229, 241)
            If count < colCount Then
                Selection.MoveRight unit:=wdCell, count:=1
                count = count + 1
            End If
            col = col + 1
        Wend
        row = row + 2
        If row < rowCount Then
            Selection.MoveRight unit:=wdCell, count:=1
        End If
        col = 0
Wend
End Sub

これはおそらく最善の方法ではありません。私はそれをちょっとまとめただけですが、うまくいきます。それが誰かに役立つことを願っています!

于 2014-06-28T18:10:13.400 に答える
0

私はまだそれをテストしていませんが、あなたが主なアイデアを理解していると思います

Sub ColorTable()
    Dim RowCount as Integer,s as String, row as Integer, ColCount As Integer
    RowCount = ActiveDocument.Tables(1).Rows.count
    ColCount = ActiveDocument.Tables(1).Columns.count
    For row = 1 To RowCount
        s=replace(Cell(row,1).Address,"$","")
        s=s & ":" & replace(Cell(row,ColCount).Address,"$","")
        Range(s).Shading.BackgroundPatternColor = iif(row mod 2 =0,RGB(184, 204, 228),RGB(219, 229, 241))
        Next count
    Next row
End Sub
于 2012-07-29T16:32:53.413 に答える