【问题标题】:Word Macro for removing color from only certain table cells用于仅从某些表格单元格中删除颜色的 Word 宏
【发布时间】:2013-02-19 16:18:24
【问题描述】:

我正在使用以下宏来遍历 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

编辑:虽然我仍然看不出是什么使这些表格失去了边界,但我发现以某种方式拆分表格会导致它们不会失去边界。我已经尽力将其隔离,但没有运气,因为似乎只有某种事物的组合会导致边界的丧失。但是,至少我有一些有用的东西。如果任何人都可以提供一个宏来按照最初的要求遍历单个单元格,那么放在后袋中可能不是一个坏选择。

【问题讨论】:

  • 我想你忘了End IfNext 之前。请更正您的代码
  • 不,有 End If 语句。
  • @Siddharth Rout 已纠正您的错误,请点击 'edited 后面的链接查看更改:)
  • 啊...谢谢你们俩。

标签: vba foreach ms-word


【解决方案1】:

你必须使用.Shading来移除背景。

我将针对一个文档进行演示。请根据您的代码进行调整。

假设您的文档如下所示

试试这个代码

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

这是您的文档在代码运行后的样子

【讨论】:

  • 一个很好的建议,但这仍然会删除我的一些表格边框。再说一次,不知道为什么会这样。
  • 你能分享你正在使用的代码吗?还要亲自检查这些受影响的桌子是否事先有边框。您可以通过手动删除背景来做到这一点;)
  • 您可以将受影响的文档上传到 www.wikisend.com 并在此处分享链接吗?
  • 很遗憾,不,因为这些是相当机密的文件。我可能可以使用相同的表格但使用不同的文本在不同的文档中重新创建效果并上传。当我能够做到这一点时,我会通知你。
  • 好吧,我已经创建了文件,但是 Wikisend 出于某种原因不同意我的 PC。我尝试在两台不同的计算机上注册两个不同的帐户,但它不允许我上传文件,并且似乎忘记了如果我尝试返回该页面,尽管告诉我帐户已创建,我只是创建了该帐户。您是否有其他文件共享网站的帐户,或者您有其他推荐的网站吗?
【解决方案2】:

终于想出了一个宏来遍历单元格。出于某种原因,在我尝试这个之前,我无法让每个循环的嵌套工作。所有带阴影的单元格都是相同的灰色阴影,所以我只是比较了每个单元格,只有当它是灰色时才更改它。这不是最有效的方法,但由于这些文档相当小,因此可以正常工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-12
    • 2019-02-19
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 2018-11-16
    • 2022-08-20
    • 1970-01-01
    相关资源
    最近更新 更多