我有一个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
等
答案 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