3

I'm currently working on a macro that creates a PDF from a SolidWorks file and then, if the Solidworks File is an assembly, it would merge the pdf with its BOM.

The problem is that I've coded the merge part of the macro, but I keep getting a "False" result on the merge line of my code and I can't find why...

Once it will be debugged, this will become a Function that will get 2 file paths to merge.

Can you help me make the macro actually merge the two files? I can't find anything about why it can return a false results.

So thank you for your help!

Here's my actual code:

Sub CombinePDFs() '(ByVal NewAsmPdf As String, ByVal OldAsmPdf As String)

' The function will combine the PDFs keeping the BOM of the older file merged (The one which is replaced)

Dim Adobe As AcroPDDoc
Dim PDF1    As Object
Dim PDF2    As Object
Dim PageNF  As Long
Dim PageOF  As Long

Dim b As Byte
Dim NewAsmPdf   As String
Dim OldAsmPdf   As String

NewAsmPdf = "Path.PDF"
OldAsmPdf = "Path_BOM.PDF"

' Defines the two PDFs to be merged
Set PDF1 = CreateObject("AcroExch.PDDoc")
PDF1.Open (NewAsmPdf)
Set PDF2 = CreateObject("AcroExch.PDDoc")
PDF2.Open (OldAsmPdf)

'Get the pages to be keep
PageNF = PDF1.GetNumPages
PageOF = PDF2.GetNumPages - PageNF

'Insert PDF2 BOM in PDF1
If PDF1.InsertPages(PageNF, PDF2, PageNF + 1, PageOF, 0) Then 'Here is my problem : Keep having false (No merge)
Kill (OldAsmPdf)
Else
MsgBox ("Could not merge the Old and New file")
End If

End Sub

SOLVED!

I found out that VBA counts from 0 (So page 1 is actually the page 0) so the false was returned due to impossible values in attributes.

Here's the code of the function that I've done:

Function CombinePDFs(ByVal NewAsmPdf As String, ByVal OldAsmPdf As String)


' The function will combine the 2 PDFs and replace the OldFile by the NewFile

    Dim PDF1    As Object
    Dim PDF2    As Object

    Dim PageNF  As Long
    Dim PageOF  As Long

    Dim NewAsmPdf   As String
    Dim OldAsmPdf   As String

    ' Defines the two PDFs to be merged
    Set PDF1 = CreateObject("AcroExch.PDDoc")
    PDF1.Open (NewAsmPdf)
    Set PDF2 = CreateObject("AcroExch.PDDoc")
    PDF2.Open (OldAsmPdf)

    'Get the pages to be keep
    PageNF = PDF1.GetNumPages
    PageOF = PDF2.GetNumPages


    ' Insert PDF2 BOM in PDF1
    If PDF1.InsertPages(PageNF - 1, PDF2, PageNF, PageOF-1, 0)

        If Not PDF1.Save(PDSaveFill, NewAsmPdf) Then
            MsgBox ("Not saved")
        End If

        ' Delete "_BOM.PDF" file
        PDF2.Close
        Kill (OldAsmPdf)

    Else
        MsgBox ("Could not merge the Old and New file")
    End If

    ' Clear memory
    Set PDF1 = Nothing
    Set PDF2 = Nothing

    End Function

Have fun!

Mark Szymczyk
  • 17,064
  • 3
  • 51
  • 61

0 Answers0