在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可用于文本。