【问题标题】:Using VBA in Word 2010 to change column widths in a table在 Word 2010 中使用 VBA 更改表格中的列宽
【发布时间】:2017-06-27 13:42:25
【问题描述】:

我刚开始使用 VBA,使用的是 Word 2010 的旧副本。我想调整三列表中的两列的大小并格式化列中的文本。此代码由 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 英寸。然后我想更改第三列中文本的格式以增加字体大小。当我调整列大小时,宏记录器似乎没有记录。有关如何编辑此代码的任何建议?

【问题讨论】:

    标签: vba ms-word


    【解决方案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)。我总是避免在任何单元格中输入超过 1 段。但是,您可以将更多段落设置为 (2) 等。您可以将所有可用的段落格式应用于每个单元格中的每个段落,并且每个段落中的所有文本都可以使用 Word 可用于文本的所有格式。

    【讨论】:

      猜你喜欢
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多