确定Word文档是否刚刚插入了软分页符

时间:2018-03-22 13:47:33

标签: vba excel-vba word-vba excel

我有一个Excel VBA程序,可以在Word中生成数百个潜在的报告。它将一个大表(最多100行)从Excel导出到Word,然后在下一节之前插入硬分页符。然后它继续到报告的下一部分,粘贴另一个表。问题是有时表长度恰到好处,因此Word会插入一个软分页符。然后Excel VBA代码添加硬分页符,结果是报表中间的空白页。

我想插入某种IF语句,其中Excel VBA确定是否刚刚发生软分页符,并且只有在没有软分页符时才插入硬分页符。这可能吗?

以下是相关代码:

For Each cell In ThisWorkbook.Names("TemplateTextRange").RefersToRange.Cells

If cell.Value <> False Then
  If UCase(Right(cell.Value, 8)) = "TBLPASTE" Then

        strTableName = Left(cell.Value, Len(cell.Value) - 10)
        DoEvents
        ThisWorkbook.Names(strTableName).RefersToRange.Copy
        DoEvents
        wrdApp.Selection.Paste
        Application.CutCopyMode = False
        DoEvents
        wrdApp.Selection.TypeParagraph

  ElseIf cell.Value = "<insert page break>" Then

      wrdApp.Selection.InsertBreak Type:=wdPageBreak

  Else
    wrdApp.Selection.EndKey Unit:=wdStory
    DoEvents
    cell.Copy
    DoEvents
    wrdApp.Selection.PasteAndFormat (wdPasteDefault)
    Application.CutCopyMode = False
    DoEvents
    wrdApp.Selection.TypeParagraph
  End If
End If

Next cell

它正在做的是从Excel工作表中读取一组指令。潜在的模板可能如下所示:

单元格1:错误

单元格2:一堆文本(显示为书面文字)

单元格3:SummaryValuesTable,TBLPASTE(告诉程序将SummaryValuesTable范围内的值粘贴为表格)

单元格4:更多文字

单元格5:插入分页符&gt; (告诉程序插入硬分页符)

单元格6:更多文字

Cell7:AnotherTable,TBLPASTE

2 个答案:

答案 0 :(得分:0)

我使用Information(wdVerticalPositionRelativeToPage)属性来确定页面上的位置。

由于标题较大,当光标位于页面顶部时,值为&lt; 290。

所以这个IF语句放在.InsertBreak命令之前:

If wrdApp.Selection.Information(wdVerticalPositionRelativeToPage) > 290 Then
        wrdApp.Selection.InsertBreak Type:=wdPageBreak
End If

我希望290不是那么硬编码,但它适用于我的目的。 我想更多动态代码,当您知道自己位于页面顶部时,可以检索光标位置。将其保存为变量,然后使用它代替290。

答案 1 :(得分:0)

尝试使用PageBreakBefore属性,除非您确实需要可见的硬分页符。我的意思是,而不是wrdApp.Selection.InsertBreak Type:=wdPageBreak使用wrdApp.Selection.ParagraphFormat.PageBreakBefore = true