删除大型文档中的空白页

时间:2018-03-19 21:15:20

标签: vba ms-word word-vba

我们使用SAS输出到rtf文件然后一起编译加载,在大多数情况下创建非常大的文档。但是,当将这些输出编译成一个单独的文档时,有时会创建空白页面,我们需要搜索和删除这些页面。

我到目前为止的代码似乎在大多数情况下都有效,但我在某些情况下遇到了内存错误,并且想知道是否有人有改进代码的建议?

以下是代码的开头,我在某些情况下会遇到内存错误:

# list of files to read
frameList <-c("apples", "bananas", "pears")

结束

1 个答案:

答案 0 :(得分:0)

这有点乱,而且更多的是黑客,因为我没有你的数据(因此我不确定Len(rng) < 3是什么,但你可以添加另一个循环来声明你的数组大小一次,而不是为每个循环做这件事。

这可能会导致性能下降或性能提升(因为您不会经常使用ReDim Preserve,我会认为会有所收获。)

Sub BlankPage()

Application.ScreenUpdating = False
Application.Options.Pagination = False
Dim i As Long, Rng As Range, Blank As Integer, Page() As Long

With ActiveDocument
Blank = 0

'Get the array size ONE time only
For i = 1 To .ComputeStatistics(wdStatisticPages)
    If Len(Rng) < 3 Then Blank = Blank + 1
Next
ReDim Page(Blank)   '< -- You ReDim only once -- <
Blank = 0

For i = 1 To .ComputeStatistics(wdStatisticPages)
    Set Rng = .GoTo(What:=wdGoToPage, Name:=i)
    Set Rng = Rng.GoTo(What:=wdGoToBookmark, Name:="\page")
    If Len(Rng) < 3 Then
        blank = blank + 1
        If Blank = 1 Then   '< --  remove the ReDim preserve -- <
            Page(Blank) = Rng.Information(wdActiveEndAdjustedPageNumber)
        Else
            Page(Blank) = ((Rng.Information(wdActiveEndAdjustedPageNumber) - Blank) + 1)
        End If
    End If
Next i

Application.Options.Pagination = True
Application.ScreenUpdating = True