Открыть, обновить sh и преобразовать весь документ Word в PDF в папке - PullRequest
0 голосов
/ 27 мая 2020

Я здесь новичок, но нашел ниже, чтобы открыть docx, refre sh (связанная таблица из Excel) и сохранить несколько документов Word в папке, которая работает нормально. Однако я хочу добавить еще одну процедуру для создания формата PDF перед выходом из документа. Так что у меня будут файлы в формате docx и pdf в одной папке.

Я много ищу, но все равно не могу найти ответ. Спасибо, если вы можете помочь…

Dim MyFolder As String
Dim MyFile As String
Dim objWord As Object
Dim objDoc As Object

Set objWord = CreateObject("Word.Application")
objWord.Visible = True
MyFolder = "D:\PPM for Dashboard"
MyFile = Dir(MyFolder & "\*.docx")

    Do While MyFile <> ""
        Set objDoc = objWord.Documents.Open(FileName:=MyFolder & "\" & MyFile)
        objDoc.Save
        MyFile = Dir
    Loop

objWord.Quit
Set objWord = Nothing

1 Ответ

3 голосов
/ 27 мая 2020

Метод сохранения текстового документа в формате PDF: ExportAsFixedFormat. Он имеет множество параметров, см. документацию в Microsoft, но в основном вам просто нужно указать имя файла. Если вы опустите 2-й параметр (ExportFormat), word проверит расширение имени файла, чтобы решить, однако, не повредит сказать word, что вы хотите (используйте константу wdExportFormatPDF)

следующая процедура сохраняет открытое слово do c как PDF в той же папке и с тем же именем (предполагается, что сам документ уже сохранен, иначе у него нет допустимого имени файла).

Sub saveAsPDF(wordDoc As Word.Document)
    Dim fName As String, p As Integer
    fName = wordDoc.FullName
    p = InStrRev(fName, ".")
    fName = Left(fName, p) & "pdf"
    wordDoc.ExportAsFixedFormat fName, wdExportFormatPDF
End Sub

В существующем l oop вам просто нужно добавить вызов этой процедуры:

Do While MyFile <> ""
    Set objDoc = objWord.Documents.Open(FileName:=MyFolder & "\" & MyFile)
    objDoc.Save
    saveAsPDF objDoc
    objDoc.Close
    MyFile = Dir
Loop

Update : в приведенном выше коде используется раннее связывание, поэтому ссылка на Библиотека объектов Word необходима. Чтобы использовать позднее связывание (как это делает OP), измените процедуру на:

Sub saveAsPDF(wordDoc As Object)
    Const wdExportFormatPDF = 17

    Dim fName As String, p As Integer
    fName = wordDoc.FullName
    p = InStrRev(fName, ".")
    fName = Left(fName, p) & "pdf"
    wordDoc.ExportAsFixedFormat fName, wdExportFormatPDF
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...