1

次のマクロを使用して、Word 文書を反復処理し、最初の表を除くすべての表から色を削除します。

これらのドキュメントに差し込みフィールドを自動入力するアプリケーションのフォーム保護の問題により、フォーム フィールドでは絶対に機能しないドキュメントがあります。したがって、次善の策は、まだ塗りつぶす必要があるものをシェーディングでマークし、ドキュメントを印刷する前にシェーディングを削除することでした. ただし、このコードがドキュメントを反復処理すると、特定のテーブルの境界線の一部が削除されます。

私は間違いなくこれを望んでいません。シェーディングを削除したいだけです。なぜこれを行っているのかわからないので、誰かがそれについて何か洞察を持っているなら、それは最も役に立ちます。そうでない場合は、このマクロを調整して、白以外の背景色のセルのみを変更できれば、それも機能します。

ネストされたループのいくつかのバリエーションを試しましたが、そのように実行することはできませんでした。

Sub decolordocument()
    Dim tbl As Table
    Dim first As Boolean

    first = True

    For Each tbl In ActiveDocument.Tables
        If first Then
            first = False
        Else
            tbl.Shading.BackgroundPatternColor = wdColorWhite
        End If
    Next

    MsgBox "Shaded cells in tables have been updated."
End Sub

私もこのコードを試してみましたが、境界線が削除されたのと同じ効果が得られました:

Sub decolordocument()

    Dim tbl As Table
    Dim tblCount As Long
    Dim i As Long
    Dim first As Boolean

    tblCount = ActiveDocument.Tables.Count

    For i = 2 To tblCount
        With ActiveDocument.Tables(i).Shading
            .BackgroundPatternColor = wdColorWhite
        End With
    Next
    MsgBox "Shaded cells in tables have been updated."

End Sub

編集:これらのテーブルの境界線が失われる具体的な原因はまだわかりませんが、特定の方法でテーブルを分割すると、境界線が失われないことがわかりました。特定の組み合わせのみが国境の喪失を引き起こすように思われるため、これを特定するために最善を尽くしましたが、うまくいきませんでした。しかし、少なくとも私はうまくいくものを持っています。最初に要求されたように、個々のセルを反復処理するマクロを誰かが提供できる場合、それはおそらく後ろポケットに入れておくのに悪い選択肢ではないでしょう.

4

2 に答える 2

1

.Shading背景を削除するにはを使用する必要があります。

私はそれを1つの文書のためにデモします。コードに従って調整してください。

ドキュメントが次のようになっているとしましょう

ここに画像の説明を入力してください

このコードを試してください

Option Explicit

Sub Sample()
    Dim tblCount As Long
    Dim i As Long

    '~~> Get the Tables Count
    tblCount = ActiveDocument.Tables.Count

    '~~> If number of tables is less than 2 then exit sub
    If tblCount < 2 Then Exit Sub

    '~~> Start with 2nd table and loop
    For i = 2 To tblCount
        '~~> Remove background
        With ActiveDocument.Tables(i).Shading
            .Texture = wdTextureNone
            .ForegroundPatternColor = wdColorAutomatic
            .BackgroundPatternColor = wdColorAutomatic
        End With
    Next
End Sub

これは、コードが実行された後のドキュメントの外観です。

ここに画像の説明を入力してください

于 2013-02-19T16:37:33.997 に答える
0

最後に、セルを反復処理するマクロを見つけました。なんらかの理由で、これを試すまで、ネストされた for each ループを機能させることができませんでした。影付きのセルはすべて同じグレーの色合いなので、各セルを比較して、グレーの場合のみ変更しました。最も効率的な方法ではありませんが、これらのドキュメントはかなり小さいため、これでうまくいきます。

Sub decolordocument()

Dim tbl As Table
Dim tblCount As Long
Dim cll As Word.Cell
Dim i As Long

tblCount = ActiveDocument.Tables.Count

For i = 2 To tblCount
    For Each cll In ActiveDocument.Tables(i).Range.Cells
        If cll.Shading.BackgroundPatternColor = RGB(217, 217, 217) Then
            cll.Shading.BackgroundPatternColor = wdColorWhite
        End If
    Next
Next
MsgBox "Color in shaded cells has been removed."

End Sub
于 2013-03-05T16:31:01.447 に答える