我刚刚使用我的旧版Word 2010开始使用VBA。我想调整三列表中的两个列的大小并格式化列中的文本。此代码由Word的宏录制器生成:
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英寸宽。然后我想更改第三列中文本的格式以增加字体大小。当我调整列的大小时,宏录制器似乎没有记录。有关如何编辑此代码的任何建议吗?
答案 0 :(得分:0)
控制表格相当复杂。 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
是包含单元格内容的实际文本部分的变量(As String)。
您可以将单元格中的段落作为范围的一部分来处理,例如Tbl.Cell(1, 3).Range.Paragraphs(1)
。我总是避免在任何单元格中有超过1个段落。但是,您可以将更多段落作为(2)等处理。您可以将段落中可用的所有格式应用于每个单元格中的每个段落,并且每个段落中的所有文本都可以使用Word可用于文本的所有格式。