Vba 设置单元格格式的宏

Vba 设置单元格格式的宏,vba,ms-word,Vba,Ms Word,我想制作一个宏来自动格式化表格的单元格。(在Word 2013中) 将所需操作记录为宏将导致以下代码: With Selection.Cells(1) .TopPadding = CentimetersToPoints(0) .BottomPadding = CentimetersToPoints(0) .LeftPadding = CentimetersToPoints(0.19) .RightPadding = Cent

我想制作一个宏来自动格式化表格的单元格。(在Word 2013中)

将所需操作记录为宏将导致以下代码:

    With Selection.Cells(1)
        .TopPadding = CentimetersToPoints(0)
        .BottomPadding = CentimetersToPoints(0)
        .LeftPadding = CentimetersToPoints(0.19)
        .RightPadding = CentimetersToPoints(0.19)
        .WordWrap = True
        .FitText = False
    End With
再次运行它仅将更改应用于第一个单元格(查看代码后这并不奇怪)

我试着围绕它编写适当的循环:

For Each c in Selection.Cells
    ....
Next c
但是它的性能非常慢,即使我切换
屏幕更新


有没有更好的方法来使用宏执行此操作?

由于我无法选择VBA中的所有单元格,解决方法是创建一个临时文档,将表格复制到其中,在那里格式化并将其复制回。

关于我们谈论的速度有多慢?在一个中等文档(150-200页)中,对于一个包含200个单元格的表格,需要20-40秒,手动执行同样的操作会立即完成。是否仅修改表中的某些单元格?如果大多数单元格都需要相同的填充,那么改变整个表格的单元格填充值(通过Selection.Tables(1).TopPadding等)然后重新填充需要填充的单个单元格,并将wordwrap/fittext应用于所有单元格是否有意义?在这里,最后一个过程似乎相对较快,但可能我的测试数据太简单了。否则,我唯一能提高速度的方法就是将整个表复制到一个新文档中,修改其中的布局,然后再复制回来,这取决于您真正感兴趣的属性。可以为整个表设置单元格填充。WordWrap和FitText显然只适用于
单元格
对象,不能应用于整个表格或通过对象模型选择的单元格。我怀疑速度慢的原因是Word必须为每次更改重新计算页面布局。。。在执行代码并设置
选项之前,您可以尝试切换到NormalView。Pagination=false
。这值得一点解释。这与我在问题中发布的代码完全相同。“在它周围循环…但它的性能非常慢,即使我切换屏幕更新。”
Sub NimitTest02()
  Dim oTbl As Table
  Dim oCell As Cell
  Dim i As Integer
  Set oTbl = ActiveDocument.Tables(1)
For i = 1 To ActiveDocument.Tables(1).Columns.Count
  For Each oRow In oTbl.Rows
    Set oCell = oRow.Cells(i)
        oCell.Select
    With Selection.Cells(1)
        .TopPadding = CentimetersToPoints(0)
        .BottomPadding = CentimetersToPoints(0)
        .LeftPadding = CentimetersToPoints(0.19)
        .RightPadding = CentimetersToPoints(0.19)
        .WordWrap = True
       .FitText = False
    End With
  Next
Next
End Sub