AnsweredAssumed Answered

batch saving of pdf's results in GDI handle depletion

Question asked by Paul Conder on Jun 18, 2015
Latest reply on Jun 19, 2015 by Paul Conder



RE: SW version = SW 2015 workgroup pdm

the macro below runs a batch save of all the drawings in a particular directory and saves in another directory.


unfortunately, running the macro results in a 'hanging' of SW after some 400 files.

the reason for that is depletion of the number of GDI handles/objects.

under normal circumstances, SW is using 1000 to 1500 GDI handles.

while the macro is running, the number of handles steadily creeps up to approx 9000 after some 400 files; SW becomes sluggish and finally hangs; requiring a restart.


this depletion of resources has been addressed in a blog:

under the name:  System resources running low ? (a.k.a. GDI handle depletion)

according to the blog however, the issue should have been resolved in a SW 2011 update.


there is of course a second possibility:  a  coding error in the macro, which I haven't been able to detect.


could someone with similar experiences help me out here ?
many thanks,




Option Explicit

Sub main()

Dim swApp           As SldWorks.SldWorks

Dim swModel         As SldWorks.ModelDoc2

Dim swExportPDFData As SldWorks.ExportPdfData

Dim boolstatus      As Boolean

Dim longstatus      As Long

Dim longwarnings    As Long

Dim Part            As Object

Dim sFileName       As String

Dim sModelName      As String

Dim sPartName       As String

Dim nErrors         As Long

Dim nWarnings       As Long

Const PathSrc       As String = "Z:\solidworks\drawings\"

Const PathTgt       As String = "Z:\hotfolder\pdf\"

Const PathJpg       As String = "Z:\hotfolder\Thumbnails\"


On Error Resume Next

Set swApp = Application.SldWorks

sFileName = Dir(PathSrc & "*.slddrw")

swExportPDFData.ViewPdfAfterSaving = False

Do Until sFileName = ""

    Set swModel = swApp.OpenDoc6(PathSrc & sFileName, swDocDRAWING, swOpenDocOptions_Silent, "", longstatus, longwarnings)

    Set swModel = swApp.ActiveDoc

    sModelName = Mid(swModel.GetPathName, InStrRev(swModel.GetPathName, "\") + 1)

    sModelName = PathTgt & Left(sModelName, InStrRev(sModelName, ".") - 1) & ".PDF"

    Set swExportPDFData = swApp.GetExportFileData(1)



    swModel.Extension.SaveAs(sModelName, swSaveAsCurrentVersion, swSaveAsOptions_Silent, swExportPDFData, nErrors, nWarnings)

    If Not swModel Is Nothing Then

        swApp.CloseDoc swModel.GetTitle

    End If

    Set swModel = Nothing

    sFileName   = Dir


End Sub