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

时间:2018-02-21 14:05:20

标签: ms-word word-vba tabular

在我的Word文档中,我有超过300个表格,我想更改表格样式并调整列“#39;宽度。我在我的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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我将按字面解释您的问题:您只想处理文档中的所有表格,并且您的代码仅使用Find来查找表格...

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

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

在这种情况下,指定样式并设置列宽。请注意,为了给出以厘米为单位的列宽,必须使用内置转换函数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