Проблемы с преобразованием .mht в .pdf файлы и очисткой памяти - PullRequest
0 голосов
/ 27 июня 2019

В настоящее время я использую VBA для циклического просмотра некоторых файлов Outlook в формате MSG и преобразования их в файлы формата PDF с помощью промежуточного преобразования .mht. Код будет вставлен ниже. В настоящее время я получаю правильную конверсию примерно в 40% случаев. Правильное преобразование означает, что соответствующая папка после запуска этого макроса будет иметь правильную версию файла .msg в формате .pdf и .mht.

Однако, в другие 60% случаев преобразование застревает в Word, переходящем из .mht в .pdf. Все просто зависает, и мне нужно завершить процесс Word.exe. Это проблема № 1. Возможно, это связано с тем, что всякий раз, когда этот VBA успешно преобразует файл из .msg в .mht в .pdf, я также остаюсь с призраком (ами) предыдущих преобразованных файлов .mht, даже если их нет в папка. Это файлы с очень ограниченной информацией в шрифте типа пишущей машинки, имена файлов которых начинаются с "~ $ NAME CUTOFF HERE". Я пытался установить для моего объекта значение Nothing до и после запуска моего кода, чтобы попытаться освободить память, но она все еще попадала в ловушку. Фото ниже также, чтобы помочь объяснить. У кого-нибудь есть мысли о том, что происходит?

Преобразование из .msg в .mht каждый раз работает как чудо.

Обратите внимание, я размещаю только соответствующий код. Все остальное выше этого выражения ElseIf преобразует различные другие типы файлов в .pdf (а именно .doc *, .xls * и .ppt *).

Ранее я использовал этот вариант, но хотел. ускорить процесс и б. не быть обязанным необходимости нажимать «сохранить» каждый раз. ссылка здесь.

Изображение Ghost Files - самый последний запуск приведенного ниже кода с этим одним файлом MSG

'Above this is irrelevant other If statement
      ElseIf (oFile) Like ("*.msg") Then

                Dim newName4 As String
                newName4 = Replace(oFile.path, ".msg", ".pdf")
                newName4 = Replace(newName4, ".msg", ".pdf")
                Dim strHTML As String

                Dim objOL As Object
                Dim Msg As Object
                Dim Dms2 As Object
                Set objOL = CreateObject("Outlook.Application")
                Set Msg = objOL.Session.OpenSharedItem(oFile.path)

                strHTML = Left(oFile.path, InStrRev(oFile.path, Chr(46))) & "mht"

                With Msg
                    .SaveAs strHTML, olMHTML
                    .Close olDiscard
                End With

            ElseIf (oFile) Like ("*.mht") Then

                Dim newName5 As String
                newName5 = Replace(oFile.path, ".mht", ".pdf")
                newName5 = Replace(newName5, ".mht", ".pdf")

                Dim wrdApp As Word.Application
                Dim wrdDoc As Word.Document

                Set wrdDoc = Nothing
                Set wrdApp = Nothing

                Set wrdApp = CreateObject("Word.Application")
                Dim x As Integer
                x = 1
                wrdApp.Documents.Open Filename:=oFile.path, Visible:=False
                'Set wrdDoc = wrdApp.Documents.Item(x)

                wrdApp.Documents.Item(x).ExportAsFixedFormat OutputFileName:=newName5 _
                        , ExportFormat:= _
                        wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
                        wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=0, To:=0, _
                        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
                        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
                        BitmapMissingFonts:=True, UseISO19005_1:=False

                wrdApp.Documents.Item(x).Close
                wrdApp.Quit

                Set wrdDoc = Nothing
                Set wrdApp = Nothing

            End If

        Next oFile

1 Ответ

0 голосов
/ 28 июня 2019

Ответил на мой вопрос!

            ElseIf (oFile) Like ("*.msg") Then

                Dim newName4 As String
                newName4 = Replace(oFile.path, ".msg", ".pdf")
                newName4 = Replace(newName4, ".msg", ".pdf")
                Dim strHTML As String

                Dim objOL As Object
                Dim Msg As Object
                Dim Dms2 As Object
                Set objOL = CreateObject("Outlook.Application")
                Set Msg = objOL.Session.OpenSharedItem(oFile.path)

                strHTML = Left(oFile.path, InStrRev(oFile.path, Chr(46))) & "mht"

                With Msg
                    .SaveAs strHTML, olMHTML
                    .Close olDiscard
                End With

                On Error GoTo WordAppQuit
                Dim newName5 As String
                newName5 = Replace(strHTML, ".mht", ".pdf")
                newName5 = Replace(newName5, ".mht", ".pdf")
                Dim wrdApp As Word.Application
                Dim wrdDoc As Word.Document
                Set wrdDoc = Nothing
                Set wrdApp = Nothing

                Set wrdApp = CreateObject("Word.Application")
                Dim x As Integer
                x = 1
                wrdApp.Documents.Open Filename:=(strHTML)
                'Set wrdDoc = wrdApp.Documents.Item(x)

                wrdApp.Documents.Item(x).ExportAsFixedFormat OutputFileName:=newName5 _
                        , ExportFormat:= _
                        wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
                        wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=0, To:=0, _
                        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
                        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
                        BitmapMissingFonts:=True, UseISO19005_1:=False
WordAppQuit:
                wrdApp.Documents.Item(x).Close
                wrdApp.Quit

                Set wrdDoc = Nothing
                Set wrdApp = Nothing

                newName5 = ""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...