代码完成后,Adobe进程没有关闭

时间:2020-07-02 13:30:28

标签: excel vba pdf bookmarks

我在合并pdf文件后添加了书签。该脚本可以完成此任务,但是由于一种变体,此后Adobe进程不会关闭。 变体名称为“ BMA”。如果将其删除,则该过程将按设计关闭。 我制作了一个脚本来关闭所有进程,但是我想要一个更可靠的解决方案。请帮忙。

Option Explicit

Sub testrun()
Dim aInfo(6) As String
'True = bookmark
'False = child bookmark
aInfo(0) = "True,Index,0"
aInfo(1) = "True,Document_1,1"
aInfo(2) = "False,Attatchment_1,2"
aInfo(3) = "True,Document_2,3"
aInfo(4) = "False,Attatchment_1,4"
aInfo(5) = "False,Attatchment_2,5"
Call NewFixPDF("C:\Temp\Test.pdf", aInfo)
End Sub

Private Sub NewFixPDF(sFile As String, aInfo() As String)

Dim AcroApp As Acrobat.CAcroApp
Dim PDDoc As Acrobat.CAcroPDDoc

Dim jso As Object
Dim BMR As Object, oBMR As Object, oBMA As Object
Dim BMA As Variant

Set AcroApp = CreateObject("AcroExch.App")
Set PDDoc = CreateObject("AcroExch.PDDoc")

Dim a As Integer, b As Integer, i As Integer
Dim aBookmark() As String

Dim bHead As Boolean
Dim sName As String
Dim iPage As Integer

If PDDoc.Open(sFile) = False Then
    MsgBox "Can't open file", vbCritical
    GoTo Exit_Sub
End If

Set jso = PDDoc.GetJSObject
jso.bookmarkRoot.Remove
Set BMR = jso.bookmarkRoot
Set oBMR = jso.bookmarkRoot

For i = 0 To UBound(aInfo) - 1

    aBookmark = Split(aInfo(i), ",")
    bHead = aBookmark(0)
    sName = aBookmark(1)
    iPage = aBookmark(2)
    
    If bHead Then
        If InStr(sName, "-") > 0 Then sName = Mid(sName, 3 + Len(sName) - InStr(StrReverse(sName), "-"))
        BMR.createchild sName, "this.pageNum = " & iPage, a
        BMA = BMR.Children
        Set oBMA = BMA(a)
        a = a + 1
        b = 0
    Else
        oBMA.createchild sName, "this.pageNum = " & iPage, b
        b = b + 1
    End If
Next i

If PDDoc.Save(PDSaveFull, sFile) = False Then
    MsgBox "Can't add bookmarks", vbCritical
End If

Exit_Sub:
Set BMR = Nothing
Set oBMR = Nothing
Set oBMA = Nothing

PDDoc.Close
AcroApp.Exit
Set AcroApp = Nothing
Set PDDoc = Nothing

Debug.Print "Done"

End Sub

0 个答案:

没有答案
相关问题