Solidworks Asm nach Xls exportieren (gibt die Konfigurationsbeschreibung nicht zurück, wenn es aktiv ist)

Ich habe ein Programm, das die in einer Baugruppe enthaltenen Informationen exportiert, um eine Datei .xls

Es funktioniert perfekt, außer dass es die Beschreibung der Konfiguration nicht zurückgibt, wenn es aktiv ist.  


bom-dlb.swp

Haben Sie eine kleine Testbaugruppe mit 2-3 Teilen zur Verfügung, um das Problem richtig zu lokalisieren?

Nicht die gleichen Eigenschaften zu haben, nicht sicher, ob ich es gut verstehe.

Und verursachen Sie auch die SW-Version, wenn Sie auf das Problem hinweisen können (welche Eigenschaft Sie erhalten und welche Sie in Ihrer xls-Datei haben möchten)

Hallo

Wenn ich es richtig verstanden habe, müssen Sie eine Zeile in der folgenden Methode so ändern, dass das Makro nach Informationen auf der Registerkarte "Spezifisch für die Konferenz" sucht.

Public Sub AddElementBOM(swComp As SldWorks.Component2, nLevel As Long)

    Set swcustmng = swextention.CustomPropertyManager(swConf.Name) 'Va cherche dans l'onglet description des propriete personnaliser
   
    Call swcustmng.Get6("Description", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    vBOM(UBound(vBOM)).m_Properties(4) = sPropRVal
End Sub

Statt Swextendion. CustomPropertyManager(""), swextention. CustomPropertyManager(swconf.name)

3 „Gefällt mir“

Beigefügt ist ein Beispiel für die Montage

Normalerweise sollte die Nomenklatur wie folgt aussehen:

ERP-Codebaum       Beschreibung             Menge  
1 1198        RDL NFE 25-514 M3x8 A2 1                
2 2489        RDL NFE 25-514 M6x12 A2 1                

Mit dem VBA-Programm ergibt sich folgendes Ergebnis:

ERP-CODEBAUM    BESCHREIBUNG   MENGE             
-----1        001198        RDL NFE 25-514 MXX A2 2        


exemple.zip

Hallo

Also habe ich gerade zwei Lösungen getestet. Wenn Sie die Eigenschaften durchgehen möchten, funktioniert Ihre Tabelle nicht , da sie die "Beschreibungs "-Eigenschaften in den Dateien nicht ausfüllt (daher die RDL NFE 25-514 MXX A2 als Ergebnis), sodass Sie diese Tabelle ändern müssten, indem Sie den Parameter $PROPRIETE@Description hinzufügen.

Andernfalls können Sie die Beschreibung der Konfiguration direkt abrufen, in diesem Fall müssen Sie den Code wie folgt ändern:

Public Sub AddElementBOM(swComp As SldWorks.Component2, nLevel As Long)
    Dim sCompName As String
    Dim i As Long
    Dim swModel As SldWorks.ModelDoc2
    Dim swcustmng As SldWorks.CustomPropertyManager
    Dim swextention As SldWorks.ModelDocExtension
    Dim sPropVal As String
    Dim sPropRVal As String
    Dim bWasResolve As Boolean
    Dim bLinkto As Boolean
    Dim swConf As SldWorks.Configuration
    Dim sDescription As String
    
    sCompName = swComp.Name2
    sCompName = GetRealNameComp(sCompName)
    Debug.Print sCompName
    'Recherche element de tableau correspondant a sCompName si existe increement la compteur
    For i = 1 To UBound(vBOM)
        If vBOM(i).m_CompName = sCompName Then
            vBOM(i).m_Count = vBOM(i).m_Count + 1
            Exit Sub
        End If
    Next i
    'Il n'existe pas je crée l'element
    ReDim Preserve vBOM(UBound(vBOM) + 1)
    vBOM(UBound(vBOM)).m_CompName = sCompName
    vBOM(UBound(vBOM)).m_Count = 1
    vBOM(UBound(vBOM)).m_FileName = swComp.GetPathName
    vBOM(UBound(vBOM)).m_Level = nLevel
    vBOM(UBound(vBOM)).m_RefConf = swComp.ReferencedConfiguration
    
    Set swModel = swComp.GetModelDoc2
    If nLevel = 0 Then
        Set swConf = swModel.GetActiveConfiguration
    Else
        Set swConf = swModel.GetConfigurationByName(swComp.ReferencedConfiguration)
    End If
    
    vBOM(UBound(vBOM)).m_RealName = BOMPartNumber(swConf, swModel) 'La variable vBOM (Nom du fichier) = "BOMPartNumber" (Nom de la configuration)
    Set swextention = swModel.Extension
    Set swcustmng = swextention.CustomPropertyManager(swComp.ReferencedConfiguration)
    'N° Proto
    'Indice MAJEUR
    'Libelle 02
    'Matiere
    Call swcustmng.Get6("N° Proto", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    vBOM(UBound(vBOM)).m_Properties(0) = sPropRVal
    Call swcustmng.Get6("Indice MAJEUR", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    vBOM(UBound(vBOM)).m_Properties(1) = sPropRVal
    Call swcustmng.Get6("Libelle 02", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    vBOM(UBound(vBOM)).m_Properties(2) = sPropRVal
    Call swcustmng.Get6("Matiere", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    vBOM(UBound(vBOM)).m_Properties(3) = sPropRVal
    
    'Set swcustmng = swextention.CustomPropertyManager("") 'Va cherche dans l'onglet description des propriete personnaliser
   
    'Call swcustmng.Get6("Description", True, sPropVal, sPropRVal, bWasResolve, bLinkto)
    sDescription = swConf.Description
    vBOM(UBound(vBOM)).m_Properties(4) = sDescription
End Sub

 

Zur Vereinfachung habe ich sDescription und die Wiederherstellung der Beschreibung der aktiven Konfiguration hinzugefügt.

Cyril-f. Vielen Dank für Ihre Antwort.

Ich habe einen Test gemacht. Wir kommen der Wahrheit immer näher.

Das Ergebnis sieht mit der Änderung zum direkten Abrufen der Konfigurationsbeschreibung wie folgt aus: 

ERP-CODEBAUM    BESCHREIBUNG   MENGE             
-0        Beispiel         Standard 1                 
--1        001198        RDL NFE 25-514 M3x8 A2 2        


Aber es gibt immer noch ein Problem. Es sollten zwei Linien vorhanden sein. 

 ERP-Codebaum        Beschreibung            Menge
        1 1198        RDL NFE 25-514 M3x8 A2          1
        2 2489        RDL NFE 25-514 M6x12 A2         1

Hallo

Das Problem ergibt sich also aus dem Teil des Codes unten im Modul AddElementBOM(swComp As SldWorks.Component2, nLevel As Long):

    For i = 1 To UBound(vBOM)
        If vBOM(i).m_CompName = sCompName Then
            vBOM(i).m_Count = vBOM(i).m_Count + 1
            Exit Sub
        End If
    Next i

 

Das Makro erkennt nicht, dass es eine andere Datei gibt, da es sich auf den Namen der Komponente verlässt, der identisch ist, so dass es davon ausgeht, dass die Komponente bereits existiert und nur eine Menge hinzufügt.

Ich habe es so modifiziert, es funktioniert bei Komponenten mit Schrauben-/Unterlegscheibenkonfiguration... Auf der anderen Seite funktioniert dies bei einer Datei mit einer Konfiguration, die in der Menge 2 sein könnte (z. B. offene/geschlossene Konfiguration), nicht.

    For i = 1 To UBound(vBOM)
        If vBOM(i).m_CompName = sCompName And swComp.ReferencedConfiguration = vBOM(i).m_RefConf Then
            vBOM(i).m_Count = vBOM(i).m_Count + 1
            Exit Sub
        End If
    Next i

 

Es wird daher wahrscheinlich notwendig sein, Kontrollkriterien hinzuzufügen oder auf den Solidworks-Nomenklaturen zu basieren und dann nach Excel zu exportieren.

1 „Gefällt mir“

Danke für Ihre Hilfe. Ich denke, die richtige Option ist in der Tat, mit den Solidworks-Stücklisten zu beginnen und sie dann nach Excel zu exportieren.