Exporteer Solidworks Asm naar Xls (retourneert de configuratiebeschrijving niet wanneer deze actief is)

Ik heb een programma dat de informatie in een assembly exporteert om een bestand te maken .xls

Het werkt perfect, behalve dat het de beschrijving van de configuratie niet retourneert wanneer het actief is.  


bom-dlb.swp

Heeft u een kleine testassemblage met 2-3 onderdelen aan te leveren, om het probleem goed te situeren?

Niet dezelfde eigenschappen hebben, niet zeker om het goed te begrijpen.

En ook oorzaak SW-versie als je het probleem kunt aanwijzen (welke eigenschap je krijgt en welke je in je xls-bestand wilt)

Hallo

Als ik het goed begrepen heb, moet je een regel in de onderstaande methode wijzigen, zodat de macro op zoek gaat naar de informatie in het tabblad "specifiek voor de conferentie".

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

In plaats van swextention. CustomPropertyManager(""), swextention. CustomPropertyManager(swconf.name)

3 likes

Bijgevoegd is een voorbeeld van montage

Normaal gesproken zou de nomenclatuur er als volgt uit moeten zien:

ERP   Code Tree     Beschrijving             Aantal  
1 1198        RDL NFE 25-514 M3x8 A2 1                
2 2489        RDL NFE 25-514 M6x12 A2 1                

Met het VBA-programma geeft het dit resultaat:

ERP-CODE TREE    BESCHRIJVING   AANTAL             
-----1        001198        RDL NFE 25-514 MXX A2 2        


exemple.zip

Hallo

Dus ik heb net twee oplossingen getest. Als u de eigenschappen wilt doornemen, werkt uw tabel niet  omdat deze de eigenschappen "Beschrijving" in de bestanden niet invult (vandaar de RDL NFE 25-514 MXX A2 als resultaat), dus u zou deze tabel moeten wijzigen door de parameter $PROPRIETE@Description toe te voegen.

Anders kunt u de beschrijving van de configuratie direct krijgen, in welk geval u de code als volgt moet wijzigen:

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

 

Om het te vereenvoudigen heb ik sDescription en het herstel van de beschrijving van de actieve configuratie toegevoegd.

Cyril-f. Dank u voor uw antwoord.

Ik heb een test gedaan. We komen dichter bij de waarheid.

Het resultaat is als volgt met de aanpassing om de configuratiebeschrijving direct op te halen: 

ERP-CODE TREE    BESCHRIJVING   AANTAL             
-0        Voorbeeld         Standaard 1                 
--1        001198        RDL NFE 25-514 M3x8 A2 2        


Maar er is nog steeds een probleem. Er moeten twee regels zijn. 

 ERP    Code Tree    Beschrijving            Aantal
        1 1198        RDL NFE 25-514 M3x8 A2          1
        2 2489        RDL NFE 25-514 M6x12 A2         1

Hallo

Het probleem komt dus van het deel van de code hieronder in de module 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

 

De macro ziet niet dat er een ander bestand is, omdat het vertrouwt op de naam van het onderdeel dat identiek is, dus het gaat ervan uit dat het onderdeel al bestaat en voegt alleen een hoeveelheid toe.

Ik heb het zo aangepast, het werkt op componenten met een configuratie van het schroef-/ringtype... Aan de andere kant, op een bestand met een configuratie die in hoeveelheid 2 zou kunnen zijn (open/gesloten configuratie bijvoorbeeld) zal dit niet werken.

    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

 

Het zal daarom waarschijnlijk nodig zijn om controlecriteria toe te voegen of om het te baseren op de Solidworks-nomenclaturen en het vervolgens te exporteren naar Excel.

1 like

Dank u voor uw hulp. Ik denk dat de juiste optie inderdaad is om te beginnen met de Solidworks-stuklijsten en deze vervolgens te exporteren naar Excel.