1

我目前正在处理某种文档,其中包含大量表格。正如你现在可能已经猜到的那样,我需要用某种风格来格式化它们。因此,有一个专门为此目的制作的 VBA 宏 - 它创建所需的样式,然后将其应用于文件中的所有表。但是现在,当我处理大型文档时,这似乎是一个问题。所以,让我们看看工作代码,省略部分,创建样式:

Dim oTable As Table
For Each oTable In ActiveDocument.Tables
oTable.Select
Selection.Tables(1).ApplyStyleDirectFormatting ("FooStyle")
Selection.Tables(1).AutoFitBehavior (wdAutoFitFixed)
Selection.Tables(1).ApplyStyleRowBands = True
With Selection.Tables(1).Borders
    .InsideLineStyle = wdLineStyleSingle
    .InsideLineWidth = wdLineWidth025pt
    .OutsideLineStyle = wdLineStyleSingle
    .OutsideLineWidth = wdLineWidth025pt
End With

'Make a list for last row of the table
Selection.Tables(1).Cell(Row:=8, Column:=1).Range.Select
Selection.Range.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries(wdOutlineNumberGallery).ListTemplates(2)
Next

因此,此代码适用于少于 600 页的文档。否则它会停在行

.InsideLineStyle = wdLineStyleSingle

运行时错误 4605 讲述有关内存和磁盘空间的故事。我做了一些研究,发现这个很棒的线程讲述了选择的缺点。然后遵循给定的建议并稍微更改宏的代码,结果如下:

Dim lTbl As Long
For lTbl = 1 To ActiveDocument.Tables.Count
ActiveDocument.Tables(lTbl).ApplyStyleDirectFormatting ("BarStyle")
ActiveDocument.Tables(lTbl).AutoFitBehavior (wdAutoFitFixed)
ActiveDocument.Tables(lTbl).ApplyStyleRowBands = True
With ActiveDocument.Tables(lTbl).Borders
    .InsideLineStyle = wdLineStyleSingle
    .InsideLineWidth = wdLineWidth025pt
    .OutsideLineStyle = wdLineStyleSingle
    .OutsideLineWidth = wdLineWidth025pt
End With

'Make a list for last row of the table
ActiveDocument.Tables(lTbl).Cell(Row:=8, Column:=1).Range.ListFormat.ApplyListTemplate ListTemplate:=ListGalleries(wdOutlineNumberGallery).ListTemplates(2)
Next

是的,令人毛骨悚然的长线。不,没有任何改变。似乎没有更多的选择,但在同一个地方仍然出现同样的错误。因此,我尝试更改出现错误时调试器停止的部分:

For Each oCell In ActiveDocument.Tables(lTbl).Range.Cells
    oCell.Borders.OutsideLineStyle = wdLineStyleSingle
    oCell.Borders.OutsideLineWidth = wdLineWidth025pt
    Next

无济于事-仍然遇到同样的问题。在这一点上,我决定做一些实验并在代码的最后一行(那个 long-a** 行)旁边删除......瞧 - 宏就像一个魅力,没有错误,没有抱怨,什么都没有。出于争论的原因,我尝试对这个宏的第一个版本进行相同的更改,结果是相同的 - 似乎一直是那条线的错。所以像这样离开它不是一个解决方案,因为最后一行的编号列表是必须的。那么,这个宏应该怎么做才不会弹出这个错误呢?

4

1 回答 1

1

这种问题可以通过将任务分成两个循环来解决。第一次迭代将更改表格格式。第二次迭代将ListFormat在预期的地方添加。

当然,结果是我们得到了较慢的子程序,但最终我们得到了我们需要的东西。

于 2013-04-09T13:00:48.120 回答