De bestanden van de creatieboom uit de nomenclatuur halen?

Hallo

Ik denk momenteel aan een systeem om de nomenclatuur van een machine te controleren. De machineboom is gestructureerd in subsets, gegroepeerd in "functie"-mappen in de creatieboom.

Het liefst zou ik de stuklijst van de machine naar Excel willen kunnen exporteren, met respect voor de groeperingen in assemblagemappen. Ik heb geen manier gevonden om het direct te doen, misschien zou het mogelijk zijn om het via VBA te doen? Wat denk je?

Bij voorbaat dank!

Hallo. De onderstaande macro exporteert de boomstructuur, inclusief de mappen zoals:

TopLevelAsm1 > Asm3-1 > deel 4-1
TopLevelAsm1 > Folder1 > Asm2-1
TopLevelAsm1 > Folder1 > Asm2-1 > Part1-1

Option Explicit
Dim FilePath As String
Sub main()
    FilePath = "C:\Temp\myBOM.TSV"
    If Dir(FilePath) <> "" Then Kill FilePath
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    TraverseAssyFeatures swModel, Mid(swModel.GetPathName, InStrRev(swModel.GetPathName, "\") + 1, InStrRev(swModel.GetPathName, ".") - InStrRev(swModel.GetPathName, "\") - 1)
End Sub

Sub TraverseAssyFeatures(ByVal swModel As SldWorks.ModelDoc2, ByRef Rep As String)
    Dim swComp As SldWorks.Component2
    Dim swCompModel As SldWorks.ModelDoc2
    Dim swFeat As SldWorks.Feature
    Dim swEntity As SldWorks.Entity
    Set swFeat = swModel.FirstFeature
    While Not swFeat Is Nothing
        Set swEntity = swFeat
        If swEntity.GetType = swSelectType_e.swSelFTRFOLDER Then
            If InStr(swFeat.Name, "EndTag") = 0 Then
                Rep = Rep & " > " & swFeat.Name
            Else
                Rep = Left(Rep, InStrRev(Rep, " > ") - 1)
            End If
        End If

        If swEntity.GetType = swSelectType_e.swSelCOMPONENTS Then
            WriteIntoFile Rep & " > " & swFeat.Name

            If swModel.GetType = swDocumentTypes_e.swDocASSEMBLY Then
                Set swComp = swFeat.GetSpecificFeature2
                swComp.SetSuppression2 swComponentSuppressionState_e.swComponentFullyResolved
                Set swCompModel = swComp.GetModelDoc2
                swCompModel.ShowConfiguration2 swComp.ReferencedConfiguration
                TraverseAssyFeatures swCompModel, Rep & " > " & swFeat.Name
            End If
        End If
        Set swFeat = swFeat.GetNextFeature
    Wend
End Sub

Sub WriteIntoFile(logSTR As String)
    Dim My_fileNum As Integer
    My_fileNum = FreeFile
    Open FilePath For Append As #My_fileNum
    Print #My_fileNum, logSTR
    Close #My_fileNum
End Sub

 

4 likes

Hallo

Hartelijk dank!

Ik wilde dit testen, maar ik heb een fout 91 op de volgende regel:

                swCompModel.ShowConfiguration2 swComp.ReferencedConfiguration

objectvariabele of blokvariabele met niet gedefinieerd

Het bestand is gemaakt, maar er staat maar één regel in

Heeft u enig idee waar het probleem vandaan komt? Bij voorbaat dank!

Deze regel is niet per se nodig als de onderdelen slechts één configuratie hebben (of worden opgeslagen in de configuratie die in de assemblage wordt gebruikt). Je kunt het dus verwijderen.

Het mag echter geen fout veroorzaken. Controleert of het onderdeel geldig is met:

            If swModel.GetType = swDocumentTypes_e.swDocASSEMBLY Then
                Set swComp = swFeat.GetSpecificFeature2
                If swComp is Nothing then Debug.print "Problème comp avec: " & swFeat.Name
                Set swCompModel = swComp.GetModelDoc2
                If swCompModel is Nothing then Debug.print "Problème modèle avec: " & swFeat.Name

                If Not swCompModel is Nothing then
                    'Debug.Print "Config Name: " & swComp.ReferencedConfiguration
                    'swCompModel.ShowConfiguration2 swComp.ReferencedConfiguration
                    TraverseAssyFeatures swCompModel, Rep & " > " & swFeat.Name
                End If
            End If

Als je me de montage kunt sturen met het onderdeel dat het probleem veroorzaakt, zal ik ernaar kijken.

1 like

Ik heb dezelfde fout (91) op de lijn 

               Set swCompModel = swComp.GetModelDoc2

 

Door het rangeren van de lijnen van dit blok wordt mijn bestand gegenereerd.

Dit blok wordt gebruikt om subassemblages te verwerken. Als de assembly geen subassemblages heeft, kunt u deze uitgeschakeld laten of het volgende gebruiken:

            If swModel.GetType = swDocumentTypes_e.swDocASSEMBLY Then
                Set swComp = swFeat.GetSpecificFeature2
                If swComp is Nothing then Debug.print "Problème comp avec: " & swFeat.Name
                If Not swComp is Nothing then
                Set swCompModel = swComp.GetModelDoc2
                If swCompModel is Nothing then Debug.print "Problème modèle avec: " & swFeat.Name

                If Not swCompModel is Nothing then
                    'Debug.Print "Config Name: " & swComp.ReferencedConfiguration
                    'swCompModel.ShowConfiguration2 swComp.ReferencedConfiguration
                    TraverseAssyFeatures swCompModel, Rep & " > " & swFeat.Name
                End If
                End If
            End If

Anders:

Wat zegt het "onmiddellijke" venster? (Menuweergave > Onmiddellijk)

Ik kan niet echt meer helpen zonder de bestanden te hebben.

 

Ik heb het "onmiddellijke" venster niet gevonden... Is dit het uitvoeringsvenster van VBA?

Van wat ik heb gezien, treedt de fout op in het eerste deel van de eerste subset in de eerste map van de boom ("Comp-probleem met: 23495-4364-2")

De map en subset verschijnen in het bestand, maar het deel niet.

Dit venster:

Nogmaals: "Ik kan niet echt meer helpen zonder de bestanden te hebben."

Sorry, ik kan mijn montage om privacyredenen niet verzenden zoals hij is. Ik denk dat ik wat tests ga doen met een testmontage, als ik er niet uit kom stuur ik je dit om te verdiepen.

Bedankt voor je hulp in ieder geval!

Ik heb het ontwerp van de onderdelen niet nodig.

Maak een kopie van de montage, open elk van de onderdelen, wis de functies, sla op.

Zie bijgevoegd bestand. Overigens kun je met deze montage controleren of het werkt.


asm.zip

Hallo

De macro die aan het begin van de discussie wordt gegeven, werkt erg goed, je hoeft alleen maar alle componenten in te stellen om opgelost te zijn voordat je het start, anders bugs omdat de lichtgewicht componenten niet toegankelijk zijn, vandaar de foutmelding "objectvariabele of blokvariabele met niet gedefinieerd".

Vriendelijke groeten

2 likes

Dank je wel d.roger.

De oorspronkelijke code is gewijzigd om het volgende op te nemen:

swComp.SetSuppression2 swComponentSuppressionState_e.swComponentFullyResolved

Na: Stel swComp = ...

1 like

Bedankt d.roger en JeromeP!

Helaas krijg ik altijd een foutmelding bij het uitvoeren van de macro, hetzij na het passeren van alle op te lossen onderdelen, hetzij met de toevoeging van de regel (deze crasht op de betreffende regel).

Dat gezegd hebbende, werkt het in eerste instantie omdat ik nog een dozijn regels in het TSV-bestand heb.

Ik ga testen met onderdelen "from scratch" om te zien of ik dezelfde problemen heb, ik hou jullie op de hoogte!

Heeft u hetzelfde probleem met de assemblage die 3 berichten eerder als bijlage is bijgevoegd?

Ja, de uitvoering is vastgelopen op de volgende regel:

                swComp.SetSuppression2 swComponentSuppressionState_e.swComponentFullyResolved

 

In de foutopsporingsmodus zie ik dat de waarde van swComponentSuppressionState_e.swComponentFullyResolved 2 is. 

Ik heb net een test gedaan met lege delen, de macro voert correct uit.

Denkt u dat dit probleem te maken kan hebben met een configuratie van de onderdelen of met het gebruik van de PDM?

Ja, het komt waarschijnlijk van de PDM, om te testen doe een get latest versie op al uw bestanden om ze in uw lokale cache te zetten ...

De macro's die gemaakt zijn om met de PDM te werken, zijn helemaal niet op dezelfde manier gebouwd, je moet vertrouwen op de Epdm-API's om verbinding te maken met de kluis, het bestand in de lokale cache te krijgen, enz ... Het is niet helemaal hetzelfde werk meer...

1 like

De waarde van 2 voor swComponentSuppressionState_e.swComponentFullyResolved is normaal.

Het probleem met SetSuppression2 kan ook bij de PDM liggen. U kunt swComp.SetSuppression2 swComponentSuppressionState_e.swComponentResolved proberen

Ik heb "de nieuwste versie" op alle bestanden (en de JeromeP-coderegel gewijzigd), het exporteert goed, maar het crasht op de 1e subset van de boom.