Vba 设置单元格格式的宏
我想制作一个宏来自动格式化表格的单元格。(在Word 2013中) 将所需操作记录为宏将导致以下代码: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
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