在我的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
答案 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