Зациклить все страницы и получить первую строку с текстом

Я хотел бы использовать VBA для зацикливания страниц моего документа MS Word и печати каждой страницы в формате PDF отдельно. Имя каждого файла PDF должно быть первой строкой с текстом на каждой странице. Я пытаюсь что-то вроде:

Sub printSepPdf()

        Dim pages As Page
        Dim p As Paragraph
        
    
    
        For Each pages In ActiveDocument
            ActiveDocument.ExportAsFixedFormat OutputFileName:=p.Range.Sentences(1) & ".pdf", ExportFormat:=wdExportFormatPDF, _
            OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, Range:= _
            wdExportFromTo, From:=1, To:=1, Item:=wdExportDocumentContent, _
            IncludeDocProps:=False, KeepIRM:=False, CreateBookmarks:= _
            wdExportCreateHeadingBookmarks, DocStructureTags:=True, _
            BitmapMissingFonts:=False, UseISO19005_1:=False
    
    Next pages
    
     
    End Sub

person Gordobobo    schedule 02.08.2020    source источник
comment
Если это документ, сгенерированный слиянием, см. раздел Разделить объединенный вывод на отдельные документы или, что еще лучше, Отправить вывод слияния в отдельные файлы в Советах по слиянию и Ветка хитростей на странице msofficeforums.com/mail-merge. /21803-mailmerge-tips-tricks.html   -  person macropod    schedule 03.08.2020


Ответы (1)


Есть несколько проблем с вашим кодом ... ActiveDocument на самом деле не имеет прямой ссылки на страницы ... вы нигде не устанавливаете абзац p ... номера страниц жестко закодированы в экспорте.

Попробуйте следующее. Он перебирает каждую страницу документа (отмечая, что документ должен быть в режиме PrintLayout), затем получает первое предложение, уменьшает его на 1, чтобы удалить символ конца абзаца, и создает имя файла PDF. Затем он сохраняет всю страницу в формате PDF.

Sub printSepPdf()

    Dim PageCounter As Long
    Dim PageFirstSentence As Range
    Dim PDFName As String
    
    For PageCounter = 1 To ActiveDocument.Windows(1).Panes(1).pages.Count
        Set PageFirstSentence = ActiveDocument.Range.GoTo(wdGoToPage, wdGoToAbsolute, PageCounter)
        PageFirstSentence.Expand (wdSentence)
        PageFirstSentence.SetRange PageFirstSentence.Start, PageFirstSentence.End - 1
        PDFName = PageFirstSentence & ".pdf"
        
        ActiveDocument.ExportAsFixedFormat OutputFileName:=PDFName, _
        ExportFormat:=wdExportFormatPDF, _
        OpenAfterExport:=False, _
        OptimizeFor:=wdExportOptimizeForPrint, _
        Range:=wdExportFromTo, _
        From:=PageCounter, _
        To:=PageCounter, _
        Item:=wdExportDocumentContent, _
        IncludeDocProps:=False, _
        KeepIRM:=False, _
        CreateBookmarks:= _
        wdExportCreateHeadingBookmarks, _
        DocStructureTags:=True, _
        BitmapMissingFonts:=False, _
        UseISO19005_1:=False
        
    Next

End Sub
person TechnoDabbler    schedule 03.08.2020