在Word 2010中使用VBA更改表格中的列宽
我刚刚开始使用VBA,使用我的Word 2010旧副本。我想调整三列表格中两列的大小,并格式化文本在列中。通过Word的宏录制生成此代码:在Word 2010中使用VBA更改表格中的列宽
Selection.ConvertToTable Separator:=wdSeparateByCommas, NumColumns:=3, _
NumRows:=14, AutoFitBehavior:=wdAutoFitContent
With Selection.Tables(1)
.Style = "Table Grid"
.ApplyStyleHeadingRows = True
.ApplyStyleLastRow = False
.ApplyStyleFirstColumn = True
.ApplyStyleLastColumn = False
End With
Selection.Cells.VerticalAlignment = wdCellAlignVerticalCenter
现在我想前两列为1.3英寸宽,第三列是5.1英寸宽。然后我想更改第三列中文本的格式以增加字体大小。当我调整列的大小时,宏录制器似乎没有记录。有关如何编辑此代码的任何建议?
控制表很复杂。 Word以它认为合适的方式完成了大部分工作,但如果您使用VBA,则必须采取控制措施。真的不可取,你应该通过调用Selection对象来让你的生活更加悲惨。例如,尝试使对象成为表格本身。
Dim Tbl As Table
Set Tbl = ActiveDocument.Tables.Add(Range:=Selection.Range, _
NumRows:=14, _
NumColumns:=3, _
DefaultTableBehavior:=wdWord8TableBehavior, _
AutoFitBehavior:=wdAutoFitFixed)
' wdWord8TableBehavior = doesn't change table size to match content
表格将被插入到选择之后。运行此代码之前,您可能想要折叠选择范围。但是现在你已经有了一个表格对象,你可以在没有选择任何东西的情况下将其格式化为你的内容。有几十个属性。其中您将要确定的其中之一是Tbl.PreferredWidth = InchesToPoints(7.7)
Word不会自动将此属性设置为列的总宽度。
你的表有3列,你可以地址Tbl.Columns(1)
到3.您可以设置宽度为每列,像Tbl.Columns(3).Width = InchesToPoints(5.1)
同样,你可以解决每个行作为Tbl.Rows(1)
以上。单独的单元格按行和列编号寻址,例如,Tbl.Cell(1, 3)
这是第一行中的第三个单元格。避免合并单元格,因为这会阻止VBA将其计数。
单元格中的文本包含在其范围内,例如,Tbl.Cell(1, 3).Range.Text
。你可以读写这个属性。请记住,Word会在每个单元格范围的末尾保留段落结束标记。当你写一个单元格时,Word会为你添加它,即使你想自己添加它。但是,当你读一个单元格的文本,你需要删除的最后一个字符,例如,
Dim Rng As Range
Set Rng = Tbl.Cell(1, 3).Range
With Rng
.End = .End - 1
Fun = .Text
End With
这里Fun
是包含的单元格的内容的实际文本部分变量(作为字符串)。
您可以将单元格中的段落作为范围的一部分进行寻址,例如Tbl.Cell(1, 3).Range.Paragraphs(1)
。我总是避免将多于一段的段落放入任何单元格中。但是,您可以将更多段落作为(2)等。您可以将所有段落的格式应用于每个单元格中的每个段落,并且每个段落中的所有文本都可以使用所有格式的Word可用于文本。