2016-06-10 118 views
1

我想制作一个宏来自动格式化表格的单元格。 (在字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 

但它的性能是非常缓慢的,即使我转的Screenupdating

有没有更好的方法来处理宏?

+0

大概我们说话有多慢? –

+1

对于200个单元格的表格,在一个介质文档(150-200页)中,需要20-40秒,手动完成相同操作。 –

+0

你只是在修改表格中的一些单元吗?如果大多数单元格需要具有相同的填充,那么更改整个表格的单元格填充值(通过Selection.Tables(1).TopPadding等)是有意义的,然后重新填充需要它的单个单元格,并将wordwrap/fittext应用于所有单元格?在这里,最后的过程似乎相对较快,但也许我的测试数据太简单了。否则,我可以做的唯一速度改进是显着的,但不是巨大的,通过将整个表格复制到一个新文档,修改布局,然后复制回来。 – 2016-06-11 16:09:14

回答

0

因为我无法选择VBA中的所有单元格,所以解决方法是创建一个临时文档,以便将表格复制到该表格中并在其中格式化并将其复制回来。

-1
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 
+2

它值得一点解释 –

+0

这只是我已经在问题中发布的相同的代码。 “环绕它......但是,即使我切换Screenupdating,它的表现也很慢。” –