调整Word文档中所有表格的列宽

Adjusting the width of columns of all tables in a Word document

在我的 Word 文档中,我有 300 多个 table,我想更改 table 样式并调整列宽。我在 VBA 宏中使用了以下代码。它适用于样式但不适用于列宽。请帮我看看问题出在哪里。

Sub Makro1()
'
' Makro1 Makro
'
'
    Selection.Find.ClearFormatting
    With Selection.Find
        .Text = "Variable"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.MoveRight Unit:=wdCharacter, Count:=4, Extend:=wdExtend
    Selection.Tables(1).Style = "eo_tabelle_2"
    With Tables(1).Spacing
     .Item(1) = 5.5 'adjusts width of text box 1 in cm
     .Item(2) = 8.5 'adjusts width of text box 2 in cm
     .Item(3) = 7.5 'adjusts width of text box 3 in cm
     .Item(4) = 1.1 'adjusts width of text box 4 in cm
End With
End Sub

据我所知,word 文件中的所有 table 都是 Tables 集合的一部分,我们可以使用索引访问单个 table 项目。假设您不知道 table 的数量,下面是适合我的代码。

For Each tbl In Doc.Tables
      tbl.Columns(3).Width = 40
Next

我将从字面上解释您的问题:您只想处理文档中的所有 table,并且您的代码使用 Find 只是为了找到 table...

以下示例展示了如何直接使用 Word 中的基础对象,而不是依赖于宏录制器为您提供的当前选择。

所以,一开始我们就为Document和一个Table声明了对象变量。具有焦点的当前文档被分配给第一个。然后,使用 For Each...Next 我们可以遍历该文档中的每个 Table 对象并对每个对象执行相同的操作。

在本例中,指定了样式并设置了列宽。请注意,为了给出以厘米为单位的列宽,有必要使用 built-in 转换函数 CentimetersToPoints,因为 Word 以点为单位测量列宽。

Sub FormatTables
  Dim doc as Document
  Dim tbl as Table

  Set doc = ActiveDocument
  For Each tbl in doc.Tables
    tbl.Style = "eo_tabelle_2"
    tbl.Columns(1).Width = CentimetersToPoints(5.5)
    tbl.Columns(2).Width = CentimetersToPoints(8.5)
    tbl.Columns(3).Width = CentimetersToPoints(7.5)
    tbl.Columns(4).Width = CentimetersToPoints(1.1)
  Next
End Sub