AnsweredAssumed Answered

VBA - Get component in assembly with broken or out of context references

Question asked by Cad Admin on Oct 11, 2018

I see by 2018 SOLIDWORKS API Help - Get External References (VBA) that i can retrieve the information for the feature level.

I just need to Traverse through and assembly and return the names of the component that have broken or out of context references.

 

i see by 2018 SOLIDWORKS API Help - swExternalReferenceStatus_e Enumeration im looking to only report on files with 0 or 4. but I'm my macro I'm getting a debug line for any line with a referencecount greater than 0...so basically any model with an external reference.

 

This is a pretty muddy macro(there are some unneeded things still around)...so

 

Option Explicit

 

Sub TraverseComponent(swComp As SldWorks.Component2, nLevel As Long)

   

    Dim swApp                   As SldWorks.SldWorks

    Dim swModel                 As SldWorks.ModelDoc2

    Dim swModDocExt             As SldWorks.ModelDocExtension

    Dim swSelMgr                As SldWorks.SelectionMgr

    Dim swFeat                  As SldWorks.Feature

    Dim vModelPathName          As Variant

    Dim vComponentPathName      As Variant

    Dim vFeature                As Variant

    Dim vDataType               As Variant

    Dim vStatus                 As Variant

    Dim vRefEntity              As Variant

    Dim vFeatComp               As Variant

    Dim nConfigOpt              As Long

    Dim sConfigName             As String

    Dim nRefCount               As Long

    Dim nSelType                As Long

    Dim i                       As Long

    Dim j                       As Long

    Dim swConfigMgr             As SldWorks.ConfigurationManager

    Dim vChildUComp             As Variant

    Dim swChildUComp            As SldWorks.Component2

    Dim swCompUConfig           As SldWorks.Configuration

    Dim sPadStr                 As String

    Dim CheckPromote            As Integer

    Dim CheckResults            As String

 

    Set swApp = CreateObject("SldWorks.Application")

    Set swModel = swApp.ActiveDoc

    Set swSelMgr = swModel.SelectionManager

 

    Set swModDocExt = swModel.Extension

    nSelType = swSelMgr.GetSelectedObjectType3(1, -1)

   

    For j = 0 To nLevel - 1

        sPadStr = sPadStr + "  "

    Next j

       

    vChildUComp = swComp.GetChildren

       

    For j = 0 To UBound(vChildUComp)

        Set swChildUComp = vChildUComp(j)

       

        TraverseComponent swChildUComp, nLevel + 1

            nRefCount = swChildUComp.ListExternalFileReferencesCount

           

            swChildUComp.ListExternalFileReferences2 vModelPathName, vComponentPathName, vFeature, vDataType, vStatus, vRefEntity, vFeatComp, nConfigOpt, sConfigName

 

        Set swModel = swChildUComp.GetModelDoc2

       

        If nRefCount > 0 Then

       

            Debug.Print "Model name: " + swChildUComp.GetPathName

           

            For i = 0 To nRefCount - 1

                If Str(vStatus(i)) = 0 Then

                    Debug.Print "    Out of Context Model path + name     : " + vModelPathName(i)

                    Debug.Print "    Out of Context Feature               : " + vFeature(i)

                    Debug.Print "    Out of Context Data type             : " + vDataType(i)

                    Debug.Print "    Out of Context Status                : " + Str(vStatus(i)) & " (Broken)"

                    Debug.Print "    Out of Context Reference entity      : " + vRefEntity(i)

                    Debug.Print " "

                End If

       

                If Str(vStatus(i)) = 4 Then

                    Debug.Print "    Out of Context Model path + name     : " + vModelPathName(i)

                    Debug.Print "    Out of Context Feature               : " + vFeature(i)

                    Debug.Print "    Out of Context Data type             : " + vDataType(i)

                    Debug.Print "    Out of Context Status                : " + Str(vStatus(i)) & " (Out of Context)"

                    Debug.Print "    Out of Context Reference entity      : " + vRefEntity(i)

                    Debug.Print " "

                End If

            Next i

        End If

    Next j

End Sub

 

Sub main()

 

    Dim swApp                   As SldWorks.SldWorks

    Dim swModel                 As SldWorks.ModelDoc2

    Dim swAssy                  As SldWorks.AssemblyDoc

    Dim swConf                  As SldWorks.Configuration

    Dim swRootComp              As SldWorks.Component2

    Dim bRet                    As Boolean

    Dim Filename                As String

    Dim errors                  As Long

    Dim warnings                As Long

 

    Set swApp = Application.SldWorks

    Set swModel = swApp.ActiveDoc

   

    If swModel Is Nothing Then

        MsgBox "Please open an Assembly file", vbExclamation, "No File Loaded"

        End

    End If

 

    If swModel.GetType = 1 Then '1 = part, 2 = assembly, 3 = drawing

        MsgBox "File is a Part, Please open an Assembly", vbExclamation, "File Mismatch"

        End

    End If

   

    If swModel.GetType = 3 Then '1 = part, 2 = assembly, 3 = drawing

        MsgBox "File is a Drawing, Please open an Assembly", vbExclamation, "File Mismatch"

        End

    End If

 

    Set swConf = swModel.GetActiveConfiguration

    Set swRootComp = swConf.GetRootComponent3(True)

   

    TraverseComponent swRootComp, 1

 

End Sub

Outcomes