AnsweredAssumed Answered

Parts Missing in Assemblies in PDF

Question asked by John Huntington on Jan 2, 2015
Latest reply on Jan 2, 2015 by Michael Dekoning

Recently just purchased EPDM 2014 and we are in the process of setting up the work flow.  Everything was going smooth until I tested the fist project.  During the automated PDF creation in one of the sub assemblies on the drawing view a part goes missing, its almost like it's suppressed and the dimensions to it are dangling.  This seems to happen to at least one view on any multiple sheet drawings we make when we try to use their PDF creator.

 

However save as PDF manually works and when I use the macro I have been using for years (which also does a save as with parameters) it works as well.  Here is the code EPDM is using

 

'Enterprise PDM 2014 - Default Convert Task Script
'SPR Updates: 
'2014 PR1 - SPRs 682792, 538578, 651998 - Enable swApp.Visible and IgnoreHiddenComponents options
'2014 SP4 - SPR 765910 - Add swSaveAsOptions_UpdateInactiveViews save option
'-----------------------------------------------
Dim swApp As Object
Dim swModel As SldWorks.ModelDoc2
Dim swDrawing As SldWorks.DrawingDoc
Dim swAssembly As SldWorks.AssemblyDoc
Dim swExtension As SldWorks.ModelDocExtension
Dim swConfMgr As SldWorks.ConfigurationManager
Dim swPDFExport As SldWorks.ExportPdfData
Dim swDocSpecification As SldWorks.DocumentSpecification
Dim FileSystemObj as Object
Dim errors As Long
Dim warnings As Long


#If VBA7 Then
    Private Declare PtrSafe Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" (ByVal hwnd As Long, ByVal pszPath As String, ByVal psa As Any) As Long
    Private Declare PtrSafe Function PathIsRelative Lib "shlwapi.dll" Alias "PathIsRelativeA" (ByVal pszPath As String) As Long
#Else
    Private Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" (ByVal hwnd As Long, ByVal pszPath As String, ByVal psa As Any) As Long
    Private Declare Function PathIsRelative Lib "shlwapi.dll" Alias "PathIsRelativeA" (ByVal pszPath As String) As Long
#End If


Function PathAppend(path, more) As String
    If Not Right(path, 1) = "\" Then
        path = path & "\"
    End If
    If Left(more, 1) = "\" Then
        more = Mid(more, 2)
    End If
    PathAppend = path & more
End Function


Sub Log(message)
    Dim errorLogFolder As String
    Dim errorLogPath As String
    ' Determine error log output path
    errorLogFolder = "[ErrorLogPath]"
    
    ' Trim \ from the start
    If Left(errorLogFolder, 1) = "\" Then
        errorLogFolder = Mid(errorLogFolder, 2)
    End If


    ' Build full root
    If PathIsRelative( errorLogFolder ) = 1 Then
        errorLogPath = PathAppend("<VaultPath>", errorLogFolder)
    Else
        errorLogPath = errorLogFolder
    End If
    
    ' Create directory if not exists
    SHCreateDirectoryEx ByVal 0&, errorLogPath, ByVal 0&
    errorLogPath = PathAppend(errorLogPath, "<TaskInstanceGuid>.log")


    ' Write error to output file
    Open errorLogPath For Append As #1
    Print #1, message
    Close #1
End Sub


Sub CreatePath(path)
    ' Create directory if not exists
    If SHCreateDirectoryEx(ByVal 0&, path, ByVal 0&) = 0 Then
        ' Create temp file
        Open path & "~$holder" For Append As #1
        Close #1
    End If
End Sub


Sub KillHolder(path)
    On Error Goto Ignore
   If FileSystemObj.FileExists(path & "~$holder") Then
      Kill path & "~$holder"
   End If
Ignore:
End Sub


Function GetExtension(docType, fileFormat)
    first = InStr(1, fileFormat, "(")
    last = InStr(first, fileFormat, ")")
    extensions = Mid(fileFormat, first + 1, last - first - 1)
    
    If InStr(1, extensions, ";") > 0 Then
        Dim all As Variant
        all = Split(extensions, ";")
       
        If UBound(all) >= docType - 1 Then
            ext = all(docType - 1)
        Else
            ext = "*." ' Nothing
        End If
    Else
        ext = extensions
    End If
    
    GetExtension = Mid(Trim(ext), 2)
End Function


Sub SetConversionOptions(ext)
    ' PDF options
    If LCase(ext) = ".pdf" Then
        swApp.SetUserPreferenceToggle swPDFExportInColor, [PdfInColor]
        swApp.SetUserPreferenceToggle swPDFExportEmbedFonts, [PdfEmbedFonts]
        swApp.SetUserPreferenceToggle swPDFExportHighQuality, [PdfHighQuality]
        swApp.SetUserPreferenceToggle swPDFExportPrintHeaderFooter, [PdfPrintHeaderFooter]
        swApp.SetUserPreferenceToggle swPDFExportUseCurrentPrintLineWeights, [PdfUsePrinterLineWeights]
    ' IGES
    ElseIf LCase(ext) = ".igs" Then
        swApp.SetUserPreferenceToggle swIGESExportSolidAndSurface, [IgesExportSolidSurface]
        swApp.SetUserPreferenceIntegerValue swIGESRepresentation, [IgesRepresentation]
        swApp.SetUserPreferenceToggle swIGESExportAsWireframe, [IgesExportWireframe]
        swApp.SetUserPreferenceIntegerValue swIGESCurveRepresentation, [IgesCurveRepresentation]
        swApp.SetUserPreferenceIntegerValue swIGESSystem, [IgesSystem]
        swApp.SetUserPreferenceToggle swIGESExportFreeCurves, [IgesExportFreeCurves]
        swApp.SetUserPreferenceToggle swIGESExportSketchEntities, [IgesExportSketchEntities]
        swApp.SetUserPreferenceToggle swIGESHighTrimCurveAccuracy, [IgesHighCurveAccuracy]
        swApp.SetUserPreferenceToggle swIGESComponentsIntoOneFile, [IgesComponentsIntoOneFile]
        swApp.SetUserPreferenceToggle swIGESFlattenAssemHierarchy, [IgesFlattenAssemblyHierarchy]
    ' ACIS
    ElseIf LCase(ext) = ".sat" Then
        swApp.SetUserPreferenceIntegerValue swAcisOutputGeometryPreference, [AcisGeometry]
        swApp.SetUserPreferenceIntegerValue swOutputVersion, [AcisVersion]
        swApp.SetUserPreferenceIntegerValue swAcisOutputUnits, [AcisOutputAsUnit]
    ' STEP
    ElseIf LCase(ext) = ".step" Then
        swApp.SetUserPreferenceIntegerValue swAcisOutputGeometryPreference, [StepGeometry]
        swApp.SetUserPreferenceIntegerValue swStepAP, [StepVersion]
    ' Parasolid
    ElseIf LCase(ext) = ".x_t" Or LCase(ext) = ".x_b" Then
        swApp.SetUserPreferenceIntegerValue swParasolidOutputVersion, [ParasolidVersion]
        swApp.SetUserPreferenceToggle swXTAssemSaveFormat, [ParasolidFlattenHierarchy]
    ' VRML
    ElseIf LCase(ext) = ".wrl" Then
        swApp.SetUserPreferenceIntegerValue swExportVrmlUnits, [VrmlOutputAsUnit]
        swApp.SetUserPreferenceToggle swExportVrmlAllComponentsInSingleFile, [VrmlSaveAssemblyAsOneFile]
    ' STL
    ElseIf LCase(ext) = ".stl" Then
        swApp.SetUserPreferenceToggle swSTLBinaryFormat, [StlOutputAs]
        swApp.SetUserPreferenceIntegerValue swExportStlUnits, [StlOutputAsUnit]
        swApp.SetUserPreferenceIntegerValue swSTLQuality, [StlQuality]
        swApp.SetUserPreferenceToggle swSTLDontTranslateToPositive, [StlDontTranslatePositive]
        swApp.SetUserPreferenceToggle swSTLComponentsIntoOneFile, [StlComponentsIntoOneFile]
        swApp.SetUserPreferenceToggle swSTLCheckForInterference, [StlCheckForInterferences]
    ' TIF or PSD
    ElseIf LCase(ext) = ".tif" Or LCase(ext) = ".psd" Then
        swApp.SetUserPreferenceIntegerValue swTiffImageType, [TifImageType]
        swApp.SetUserPreferenceIntegerValue swTiffCompressionScheme, [TifCompressionScheme]
    ' eDrawings
    ElseIf LCase(ext) = ".eprt" Or LCase(ext) = ".easm" Or LCase(ext) = ".edrw" Then
        swApp.SetUserPreferenceToggle swEDrawingsOkayToMeasure, [EdrwOkayToMeasure]
        swApp.SetUserPreferenceToggle swEDrawingsExportSTLOkay, [EdrwAllowExportOfSTL]
        swApp.SetUserPreferenceToggle swEDrawingsSaveShadedDataInDrawings, [EdrwSaveShadedData]
        swApp.SetUserPreferenceToggle swEDrawingsSaveBOM, [EdrwSaveBOM]
        swApp.SetUserPreferenceToggle swEDrawingsSaveAnimationOkay, [EdrwSaveMotionStudies]
        swApp.SetUserPreferenceToggle swEDrawingsSaveAnimationToAllConfigs, [EdrwSaveMotionStudiesToAllConfs]
        swApp.SetUserPreferenceToggle swEDrawingsSaveAnimationRecalculate, [EdrwRecalcMotionStudies]
    End If
End Sub


Function GetFullFileName(convFileName, conf, i, itemCount)
    ' Configuration name may include backslash. Remove it since otherwise saving will
    ' fail due a missing directory
    conf = Replace(conf, "\", "")
    conf = Replace(conf, "/", "")
    
    finalFileName = Replace(convFileName, "<Configuration>", conf)
    
    ' If no configuration
    If finalFileName = convFileName And itemCount > 0 Then
        finalFileName = Left(convFileName, InStrRev(convFileName, ".") - 1) & "_" & i & Mid(convFileName, InStrRev(convFileName, "."))
    End If
    
    ' Remove illegal characters from filename
    finalFileName = Replace(finalFileName, "<", "")
    finalFileName = Replace(finalFileName, ">", "")
    finalFileName = Left(finalFileName, 2) + Replace(finalFileName, ":", "", 3) ' Don't start from begin since drive has :
    finalFileName = Replace(finalFileName, "*", "")
    finalFileName = Replace(finalFileName, "?", "")
    finalFileName = Replace(finalFileName, """", "")
    finalFileName = Replace(finalFileName, "|", "")
    
    GetFullFileName = finalFileName
End Function


Sub Convert(docFileName)
    
    ' Constants for some SolidWorks error/warning returns that may be encountered during a convert operation.        
    Const swerr_InvalidFileExtension = 256   ' the file extension differs from the SW document type.
    Const swerr_SaveAsNotSupported = 4096    ' the options selected for this convert aren't supported, output may be incomplete.
    Const swwarn_MissingOLEObjects = 512     ' the document contains OLE objects and must be opened and converted in SolidWorks.


    ' Determine type of SolidWorks file based on file extension
    If LCase(Right(docFileName, 7)) = ".sldprt" Or LCase(Right(docFileName, 4)) = ".prt" Then
        docType = swDocPART
    ElseIf LCase(Right(docFileName, 7)) = ".sldasm" Or LCase(Right(docFileName, 4)) = ".asm" Then
        docType = swDocASSEMBLY
    ElseIf LCase(Right(docFileName, 7)) = ".slddrw" Or LCase(Right(docFileName, 4)) = ".drw" Then
        docType = swDocDRAWING
    Else
        docType = swDocNONE
         If bIsSupportedExtension(Mid(docFileName, InStrRev(docFileName, ".") + 1)) = False Then
             Log "The file extension '" & Mid(docFileName, InStrRev(docFileName, ".") + 1) & "' is not supported."
             Exit Sub
         End If        
    End If
        
    ' Open document
    If docType = swDocNONE Then
        Set swModel = swApp.LoadFile4(docFileName, "", Nothing, errors)
        docType = swModel.GetType
    Else  
        Set swDocSpecification = swApp.GetOpenDocSpec(docFileName)
        swDocSpecification.DocumentType = docType 
        swDocSpecification.ReadOnly = True
        swDocSpecification.Silent = True
        swDocSpecification.ConfigurationName = ""
        swDocSpecification.DisplayState = ""
        swDocSpecification.IgnoreHiddenComponents = True 'SPR 682792, 538578, 651998 
        Set swModel = swApp.OpenDoc7(swDocSpecification)
        errors = swDocSpecification.Error


       ' Set swModel = swApp.OpenDoc6(docFileName, docType, swOpenDocOptions_Silent Or swOpenDocOptions_ReadOnly, "", errors, warnings)
    End If
    
    If errors = swFutureVersion Then
        Log "Document '" & docFileName & "' is future version."
        Exit Sub
    End If


    ' Load failed?
    If swModel Is Nothing Then
        Log "Method call ModelDoc2::OpenDoc7 for document '" & docFileName & "' failed. Error code " & errors & " returned."
        Exit Sub
    End If
    
    If Val(Left(swApp.RevisionNumber, 2)) >= 18 Then
      swApp.Frame.KeepInVisible = True
    End If


    swApp.ActivateDoc2 docFileName, True, errors
    modelPath = swModel.GetPathName()
    If modelPath = "" Then
      modelPath = docFileName
    End If
    modelFileName = Mid(modelPath, InStrRev(modelPath, "\") + 1)
    modelFileName = Left(modelFileName, InStrRev(modelFileName, ".") - 1)
    modelExtension = Mid(modelPath, InStrRev(modelPath, ".") + 1)


    ' Build destination filenames
    convFileName = "[OutputPath]"
    
    Dim convFileName2 As String
    convFileName2 = "[OutputPath2]"
    Dim convFilePath2 As String
    Dim convFileNameTemp2 As String
    
    Dim bSecondOutput As Boolean
    bSecondOutput = False
    If (Len(convFileName2) > 0) Then
        bSecondOutput = True
    End If
        
    ext = GetExtension(docType, "[FileFormat]")
    
    convFileName = Replace(convFileName, "<Filename>", modelFileName)
    convFileName = Replace(convFileName, "<Extension>", modelExtension)


    convFilePath = Left(convFileName, InStrRev(convFileName, "\")) 
    CreatePath convFilePath
    convFileName = convFileName & ext
    
    If bSecondOutput = True Then
        convFileName2 = Replace(convFileName2, "<Filename>", modelFileName)
        convFileName2 = Replace(convFileName2, "<Extension>", modelExtension)


        convFilePath2 = Left(convFileName2, InStrRev(convFileName2, "\")) 
        CreatePath convFilePath2
        convFileName2 = convFileName2 & ext
    End If
    
    ' Set conversion options
    SetConversionOptions ext
    
    Set swExtension = swModel.Extension
    
    If docType = swDocDRAWING Then
        Dim vSheetNames As Variant
        Set swDrawing = swModel
        
        ' All sheets?
        If ([OutputSheets] And 2) = 2 Then
            vSheetNames = swDrawing.GetSheetNames
        ' Last active sheet?
        ElseIf ([OutputSheets] And 4) = 4 Then
            ReDim vSheetNames(0 to 0) As Variant
            vSheetNames(0) = swDrawing.GetCurrentSheet.GetName()
        ' Named sheet
        ElseIf ([OutputSheets] And 8) = 8 Then
            Dim vSheetNamesTemp As Variant
            vSheetNamesTemp = swDrawing.GetSheetNames
            removed = 0
            
            For i = 0 To UBound(vSheetNamesTemp)
                vSheetNamesTemp(i-removed) = vSheetNamesTemp(i)
                sheetName = vSheetNamesTemp(i)
                
                If Not sheetName Like "[NamedSheet]" Then
                    removed = removed + 1
                EndIf
            Next i
            
            If (UBound(vSheetNamesTemp) - removed) >= 0 Then
                ReDim Preserve vSheetNamesTemp(0 To (UBound(vSheetNamesTemp) - removed))
                vSheetNames = vSheetNamesTemp
            End If
        End If


        If Not IsEmpty(vSheetNames) Then
            ' Save sheets one per file
            If ([FileSheets] And 4) = 4 Then
                For i = 0 To UBound(vSheetNames)
                    Dim varSheetName        As Variant
                    swDrawing.ActivateSheet vSheetNames(i)


                    convFileNameTemp = GetFullFileName(convFileName, vSheetNames(i), i, UBound(vSheetNames))


                    If LCase(ext) = ".pdf" Then
                        Set swPDFExport = swApp.GetExportFileData(1)
                        varSheetName = vSheetNames(i)
                        swPDFExport.SetSheets swExportData_ExportSpecifiedSheets, varSheetName
                    ElseIf LCase(ext) = ".edrw" Then
                        swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveActive  
                    End If


                    ' Convert the document
                    Success = swExtension.SaveAs(convFileNameTemp, swSaveAsCurrentVersion, swSaveAsOptions_Silent + swSaveAsOptions_UpdateInactiveViews, swPDFExport, errors, warnings)
                    
                    ' Save failed?
                    If Success = False Then
                        If errors = swerr_InvalidFileExtension Then
                            Log "The file '" & docFileName & "' and sheet '" &  vSheetNames(i) & "' can't be converted to the file extension '" & ext & "'."
                        Else
                            Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp & "' and sheet '" & vSheetNames(i) & "' failed. Error code " & errors & " returned."
                            If (((errors And swerr_SaveAsNotSupported) <> 0) And ((warnings And swwarn_MissingOLEObjects) <> 0)) Then
                                Log "This document contains OLE objects. Such objects can't be converted outside of SolidWorks. Please open the document and perform the conversion from SolidWorks."
                            End If 
                        End if  
                    End If
                    
                    If bSecondOutput = True Then
                        convFileNameTemp2 = GetFullFileName(convFileName2, vSheetNames(i), i, UBound(vSheetNames))
                        Success = swExtension.SaveAs(convFileNameTemp2, swSaveAsCurrentVersion, swSaveAsOptions_Silent + swSaveAsOptions_UpdateInactiveViews, swPDFExport, errors, warnings)
                        ' Save failed?
                        If Success = False Then
                            If errors = swerr_InvalidFileExtension Then
                                Log "The file '" & docFileName & "' and sheet '" &  vSheetNames(i) & "' can't be converted to the file extension '" & ext & "'."
                            Else
                                Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp2 & "' and sheet '" & vSheetNames(i) & "' failed. Error code " & errors & " returned."
                                If (((errors And swerr_SaveAsNotSupported) <> 0) And ((warnings And swwarn_MissingOLEObjects) <> 0)) Then
                                    Log "This document contains OLE objects. Such objects can't be converted outside of SolidWorks. Please open the document and perform the conversion from SolidWorks."
                                End If 
                            End if
                        End If
                    End If
                Next i
            ' Save PDF sheets to one file
            ElseIf ([FileSheets] And 2) = 2 Then
            
                If LCase(ext) = ".pdf" Then
                    Set swPDFExport = swApp.GetExportFileData(swExportPdfData)
                    swPDFExport.SetSheets swExportData_ExportSpecifiedSheets, vSheetNames
                ElseIf LCase(ext) = ".edrw" Then
                    If ([OutputSheets] And 2) = 2 Then ' All sheets?
                        swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveAll
                    ElseIf ([OutputSheets] And 4) = 4 Then ' Last active sheet?
                        swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveActive  
                    ElseIf ([OutputSheets] And 8) = 8 Then ' Named sheet
                        swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveSelected
                        selectedSheets = Join(vSheetNames, vbLf)
                        swApp.SetUserPreferenceStringListValue swEmodelSelectionList, Trim(selectedSheets)
                    End If
                End If
                
                convFileNameTemp = GetFullFileName(convFileName, "All", 0, 0)
                
                ' Convert the document
                Success = swExtension.SaveAs(convFileNameTemp, swSaveAsCurrentVersion, swSaveAsOptions_Silent + swSaveAsOptions_UpdateInactiveViews, swPDFExport, errors, warnings)
                
                ' Save failed?
                If Success = False Then
                    Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp & "' failed. Error code " & errors & " returned."
                End If
                
                If bSecondOutput = True Then
                    convFileNameTemp2 = GetFullFileName(convFileName2, "All", 0, 0)
                    Success = swExtension.SaveAs(convFileNameTemp2, swSaveAsCurrentVersion, swSaveAsOptions_Silent + swSaveAsOptions_UpdateInactiveViews, swPDFExport, errors, warnings)
                    ' Save failed?
                    If Success = False Then
                        Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp2 & "' failed. Error code " & errors & " returned."
                    End If
                End If
            End If
        Else
            Log "Document '" & docFileName & "' didn't contain any sheets named '[NamedSheet]'."
        End If
    Else
        Dim vConfNames As Variant
        Set swConfMgr = swModel.ConfigurationManager
        
        ' All configurations?
        If ([OutputConfs] And 2) = 2 Then
            vConfNames = swModel.GetConfigurationNames
        ' Last active conf?
        ElseIf ([OutputConfs] And 4) = 4 Then
            ReDim vConfNames(0 to 0) As Variant
            vConfNames(0) = swConfMgr.ActiveConfiguration.Name
        ' Named confs
        ElseIf ([OutputConfs] And 8) = 8 Then
            Dim vConfNamesTemp As Variant
            vConfNamesTemp = swModel.GetConfigurationNames
            removed = 0
            
            For i = 0 To UBound(vConfNamesTemp)
                vConfNamesTemp(i-removed) = vConfNamesTemp(i)
                confName = vConfNamesTemp(i)
                
                If Not confName Like "[NamedConf]" Then
                    removed = removed + 1
                EndIf
            Next i
            
            If (UBound(vConfNamesTemp) - removed) >= 0 Then
                ReDim Preserve vConfNamesTemp(0 To (UBound(vConfNamesTemp) - removed))
                vConfNames = vConfNamesTemp
            End If
        End If
        
        If Not IsEmpty(vConfNames) Then
            If ([FileConfs] And 4) = 4 Then
                ' Save configurations
                For i = 0 To UBound(vConfNames)
                    swModel.ShowConfiguration vConfNames(i)


                    convFileNameTemp = GetFullFileName(convFileName, vConfNames(i), i, UBound(vConfNames))


                    ' Convert the document
                    Success = swExtension.SaveAs(convFileNameTemp, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, errors, warnings)
                
                    ' Save failed?
                    If Success = False Then
                        If errors = swerr_InvalidFileExtension Then
                            Log "The file '" & docFileName & "' and configuration '" & vConfNames(i) & "' can't be converted to the file extension '" & ext & "'."
                        Else
                            Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp & "' and configuration '" & vConfNames(i) & "' failed. Error code " & errors & " returned."
                            If (((errors And swerr_SaveAsNotSupported) <> 0) And ((warnings And swwarn_MissingOLEObjects) <> 0)) Then
                                Log "This document contains OLE objects. Such objects can't be converted outside of SolidWorks. Please open the document and perform the conversion from SolidWorks."
                            End If 
                        End If
                    End If
                    
                    If bSecondOutput = True Then
                        convFileNameTemp2 = GetFullFileName(convFileName2, vConfNames(i), i, UBound(vConfNames))
                        Success = swExtension.SaveAs(convFileNameTemp2, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, errors, warnings)
                        ' Save failed?
                        If Success = False Then
                            If errors = swerr_InvalidFileExtension Then
                                Log "The file '" & docFileName & "' and configuration '" & vConfNames(i) & "' can't be converted to the file extension '" & ext & "'."
                            Else
                                Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp2 & "' and configuration '" & vConfNames(i) & "' failed. Error code " & errors & " returned."
                                Log "warnings1 = " & warnings
                                If (((errors And swerr_SaveAsNotSupported) <> 0) And ((warnings And swwarn_MissingOLEObjects) <> 0)) Then
                                    Log "This document contains OLE objects. Such objects can't be converted outside of SolidWorks. Please open the document and perform the conversion from SolidWorks."
                                End If 
                            End If
                        End If
                    End If
                Next i
            ElseIf ([FileConfs] And 2) = 2 Then
                If LCase(ext) = ".eprt" Or LCase(ext) = ".easm" Then
                    If ([OutputConfs] And 2) = 2 Then ' All confs?
                        swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveAll
                    ElseIf ([OutputConfs] And 4) = 4 Then ' Last active conf?
                        swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveActive  
                    ElseIf ([OutputConfs] And 8) = 8 Then ' Named confs
                        swApp.SetUserPreferenceIntegerValue swEdrawingsSaveAsSelectionOption, swEdrawingSaveSelected
                        selectedConfs = Join(vConfNames, vbLf)
                        swApp.SetUserPreferenceStringListValue swEmodelSelectionList, Trim(selectedConfs)
                    End If
                End If
                
                convFileNameTemp = GetFullFileName(convFileName, "All", 0, 0)
                
                ' Convert the document
                Success = swExtension.SaveAs(convFileNameTemp, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, errors, warnings)
                
                ' Save failed?
                If Success = False Then
                    Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp & "' failed. Error code " & errors & " returned."
                End If
                
                If bSecondOutput = True Then
                    convFileNameTemp2 = GetFullFileName(convFileName2, "All", 0, 0)
                    Success = swExtension.SaveAs(convFileNameTemp2, swSaveAsCurrentVersion, swSaveAsOptions_Silent, Nothing, errors, warnings)
                    ' Save failed?
                    If Success = False Then
                        Log "Method call ModelDocExtension::SaveAs for document '" & convFileNameTemp2 & "' failed. Error code " & errors & " returned."
                    End If
                End If
            End If
        Else
            Log "Document '" & docFileName & "' didn't contain any configurations named '[NamedConf]'."
        End If
    End If
    
    KillHolder convFilePath
    KillHolder convFilePath2
    
    ' Process virtual components
    If docType = swDocASSEMBLY Then
        Dim vComponents As Variant
        Set swAssembly = swModel
        
        vComponents = swAssembly.GetComponents(True)
        
        If Not IsEmpty(vComponents) Then
          For i = 0 To UBound(vComponents)
              Dim swComponent As SldWorks.Component2
              Set swComponent = vComponents(i)
              
              If swComponent.IsVirtual Then
                  Convert swComponent.GetPathName()
              End If
          Next i
      End If
    End If


    ' Close document
    swApp.QuitDoc swModel.GetTitle
End Sub


Function bIsSupportedExtension(oExtension) As Boolean
    
    oExtension = LCase( oExtension )
    
    If oExtension = "prt" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "asm" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "drw" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "dxf" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "dwg" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "psd" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "ai" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "lfp" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "sldlfp" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "prtdot" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "asmdot" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "drwdot" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "x_t" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "x_b" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "xmt_txt" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "xmt_bin" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "igs" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "iges" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "step" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "stp" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "sat" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "vda" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "wrl" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "stl" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "cgr" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "wrl" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "xpr" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "xas" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "ipt" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "iam" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "par" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "psm" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "ckd" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "emn" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "brd" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "bdf" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "idb" Then
       bIsSupportedExtension = True
    ElseIf oExtension = "3dm" Then
       bIsSupportedExtension = True
    Else
        bIsSupportedExtension = False
    End If
       
End Function


Sub main()
    
    On Error GoTo Fail:


    Set FileSystemObj = CreateObject("Scripting.FileSystemObject")
    docFileName = "<Filepath>"
    
    ' Get SW interface object
    Set swApp = Application.SldWorks


    swApp.Visible = True


    Convert docFileName
    
    Exit Sub
       
Fail:
    Log "Error while converting file '" & docFileName & "': " & vbCrLf & _
        "An unexpected error occurred while executing the generated script. Script syntax error?" & vbCrLf & _
        "Error number: " & Err.Number & vbCrLf & _
        "Error description: '" & Err.Description & "'" & vbCrLf
        
End Sub

Outcomes