每页上的Word-VBA循环可导出PDF

时间:2018-08-17 06:57:23

标签: vba ms-word word-vba

我在每个页面上都有两个表。我做了一个宏,可以复制table(1)中的字符串,然后将文件导出为pdf。这很好。现在,我希望此宏在每个页面上运行。但是,当我运行代码时,它只是将第一页导出为PDF。 我的代码是:

Sub string_String_Pending()
 Dim oTbl As Table
 Dim i As Integer

 Dim a
 a = ActiveDocument.BuiltInDocumentProperties("Number of Pages")
 For i = 1 To a

   ActiveDocument.ExportAsFixedFormat 
   OutputFileName:=Left(ActiveDocument.Tables(1).Rows(1).Cells(3).Range.Text, _
   Len(ActiveDocument.Tables(1).Rows(1).Cells(3).Range.Text) - 2) & " - " & 
   Left(ActiveDocument.Tables(1).Rows(4).Cells(3).Range.Text, _
   Len(ActiveDocument.Tables(1).Rows(4).Cells(3).Range.Text) - 2) & ".pdf", 
   ExportFormat:=wdExportFormatPDF, Range:=wdExportCurrentPage

   Next i
End Sub 

1 个答案:

答案 0 :(得分:0)

请注意保存为PDF的方法中的以下代码:

Range:=wdExportCurrentPage

问题代码的问题是它永远不会移到其他页面。

有多种方法可以完成此操作,但是最简单的方法是模仿用户按F5(“转到”)并选择转到特定页面。我在For循环的末尾添加了该代码。还有Debug.Print条语句将在立即窗口中显示页码(在VBA编辑器中为Ctrl + G)-您可以将其注释掉或删除。

我还添加了一行代码以确保代码从第一页开始,这在进行基于选择的操作时是必需的;我将ia的声明更改为数据类型Long,建议将其用于“计数器”。

Sub string_String_Pending()
 Dim oTbl As Table
 Dim i As Long
 Dim a As Long

 a = ActiveDocument.BuiltInDocumentProperties("Number of Pages")
 Selection.HomeKey Word.WdUnits.wdStory

 For i = 1 To a

    ActiveDocument.ExportAsFixedFormat _
    OutputFileName:=Left(ActiveDocument.Tables(1).Rows(1).Cells(3).Range.Text, _
    Len(ActiveDocument.Tables(1).Rows(1).Cells(3).Range.Text) - 2) & " - " & _
    Left(ActiveDocument.Tables(1).Rows(4).Cells(3).Range.Text, _
    Len(ActiveDocument.Tables(1).Rows(4).Cells(3).Range.Text) - 2) & ".pdf", _
    ExportFormat:=wdExportFormatPDF, Range:=wdExportCurrentPage
    Debug.Print Selection.Information(wdActiveEndAdjustedPageNumber)

    Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=i+1
   Next i
   Debug.Print Selection.Information(wdActiveEndAdjustedPageNumber)
End Sub