Die Dateien des Schöpfungsbaums aus der Nomenklatur abrufen?

Hallo

Ich denke gerade über ein System nach, um die Nomenklatur einer Maschine zu überprüfen. Der Maschinenbaum ist in Teilmengen strukturiert, die in "function"-Ordnern im Erstellungsbaum gruppiert sind.

Im Idealfall möchte ich in der Lage sein, die Stückliste der Maschine nach Excel zu exportieren und dabei die Gruppierungen in den Montageordnern zu berücksichtigen. Ich habe keinen Weg gefunden, es direkt zu tun, vielleicht wäre es möglich, es über VBA zu tun? Was denkst du?

Vielen Dank im Voraus!

Hallo. Mit dem folgenden Makro wird die Baumstruktur einschließlich der Ordner exportiert, wie z. B.:

TopLevelAsm1 > Asm3-1 > Teil4-1
TopLevelAsm1 > Ordner1 > Asm2-1
TopLevelAsm1 > Ordner1 > Asm2-1 > Teil1-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 „Gefällt mir“

Hallo

Vielen Dank!

Ich wollte das testen, aber ich habe einen Fehler 91 in der folgenden Zeile:

                swCompModel.ShowConfiguration2 swComp.ReferencedConfiguration

Objektvariable oder Blockvariable mit nicht definierter

Die Datei wird erstellt, aber sie enthält nur eine Zeile

Haben Sie eine Idee, was der Ursprung des Problems ist? Vielen Dank im Voraus!

Diese Zeile ist nicht unbedingt erforderlich, wenn die Teile nur eine Konfiguration haben (oder in der Konfiguration gespeichert sind, die in der Baugruppe verwendet wird). Damit Sie es entfernen können.

Es sollte jedoch kein Fehler verursacht werden. Überprüft, ob die Komponente gültig ist mit:

            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

Wenn Sie mir die Baugruppe mit dem Teil schicken können, das das Problem verursacht, werde ich mich darum kümmern.

1 „Gefällt mir“

Ich habe den gleichen Fehler (91) in der Leitung 

               Set swCompModel = swComp.GetModelDoc2

 

Durch das Verschieben der Zeilen dieses Blocks wird meine Datei erzeugt.

Dieser Block wird zum Verarbeiten von Baugruppen verwendet. Wenn die Baugruppe nicht über Unterbaugruppen verfügt, können Sie sie deaktiviert lassen oder Folgendes verwenden:

            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

Sonst:

Was sagt das "unmittelbare" Fenster? (Menüansicht > Sofort)

Ich kann nicht wirklich mehr helfen, ohne die Dateien zu haben.

 

Ich habe das "unmittelbare" Fenster nicht gefunden... Ist dies das Ausführungsfenster von VBA?

Nach dem, was ich gesehen habe, tritt der Fehler beim ersten Teil der ersten Teilmenge im ersten Ordner des Baums auf ("Comp-Problem mit: 23495-4364-2")

Der Ordner und die Teilmenge werden in der Datei angezeigt , das Teil jedoch nicht.

Dieses Fenster:

Nochmals: "Ich kann nicht wirklich mehr helfen, ohne die Dateien zu haben."

Leider kann ich meine Assembly aus Datenschutzgründen nicht so versenden, wie sie ist. Ich denke, ich werde einige Tests mit einer Testassembly machen, wenn ich nicht rauskomme, schicke ich Ihnen das zur Vertiefung.

Vielen Dank auf jeden Fall für Ihre Hilfe!

Ich brauche das Design der Teile nicht.

Erstellen Sie eine Kopie der Baugruppe, öffnen Sie jedes Teil, löschen Sie die Funktionen, und speichern Sie.

Siehe angehängte Datei. Übrigens können Sie mit dieser Assembly überprüfen, ob sie funktioniert.


asm.zip

Hallo

Das zu Beginn der Diskussion angegebene Makro funktioniert sehr gut, Sie müssen nur alle Komponenten auf gelöst setzen, bevor Sie es starten, sonst kommt es zu Fehlern, da die leichtgewichtigen Komponenten nicht zugänglich sind, daher die Fehlermeldung "Objektvariable oder Blockvariable mit nicht definiert".

Herzliche Grüße

2 „Gefällt mir“

Vielen Dank, d.roger.

Ursprünglicher Code geändert und enthält nun Folgendes:

swComp.SetSuppression2 swComponentSuppressionState_e.swComponentFullyResolved

Nachher: Set swComp = ...

1 „Gefällt mir“

Danke d.roger und JeromeP!

Leider bekomme ich beim Ausführen des Makros immer eine Fehlermeldung, entweder nach dem Übergeben aller zu lösenden Teile oder beim Hinzufügen der Zeile (es stürzt auf der betreffenden Zeile ab).

Das heißt, es funktioniert zunächst, weil ich noch ein Dutzend Zeilen in der TSV-Datei habe.

Ich werde mit Teilen "von Grund auf" testen, um zu sehen, ob ich die gleichen Probleme habe, ich halte Sie auf dem Laufenden!

Haben Sie das gleiche Problem mit der Baugruppe, die als Anhang 3 Nachrichten angehängt wurde?

Ja, die Ausführung bleibt in der folgenden Zeile hängen:

                swComp.SetSuppression2 swComponentSuppressionState_e.swComponentFullyResolved

 

Im Debugmodus sehe ich, dass der Wert von swComponentSuppressionState_e.swComponentFullyResolved 2 ist. 

Ich habe gerade einen Test mit leeren Teilen gemacht, das Makro wird ordnungsgemäß ausgeführt.

Glauben Sie, dass dieses Problem mit einer Konfiguration der Teile oder mit der Verwendung des PDM zusammenhängen könnte ?

Ja, es kommt wahrscheinlich vom PDM, um zu testen, holen Sie sich die neueste Version für alle Ihre Dateien, um sie in Ihren lokalen Cache zu legen ...

Die Makros, die für die Arbeit mit dem PDM erstellt wurden, sind überhaupt nicht auf die gleiche Weise erstellt, Sie müssen sich auf die Epdm-APIs verlassen, um eine Verbindung zum Tresor herzustellen, die Datei in den lokalen Cache zu bringen usw. Es ist nicht mehr ganz derselbe Job...

1 „Gefällt mir“

Der Wert 2 für swComponentSuppressionState_e.swComponentFullyResolved ist normal.

Das Problem mit SetSuppression2 kann auch am PDM liegen. Sie können swComp.SetSuppression2 swComponentSuppressionState_e.swComponentResolved ausprobieren

Ich habe für alle Dateien die neueste Version abgerufen (und die JeromeP-Codezeile geändert), es wird gut exportiert, aber es stürzt in der 1. Teilmenge des Baums ab.