Eksport Solidworks Asm do Xls (nie zwraca opisu konfiguracji, gdy jest aktywny)

Mam program, który wyeksportuje informacje zawarte w złożeniu, aby plik był .xls

Działa doskonale z wyjątkiem tego, że nie zwraca opisu konfiguracji, gdy jest aktywna.  


bom-dlb.swp

Czy masz mały zespół testowy z 2-3 częściami do dostarczenia, aby prawidłowo zlokalizować problem?

Nie mając tych samych właściwości, nie jestem pewien, czy dobrze to zrozumiesz.

A także stwórz wersję oprogramowania, jeśli możesz wskazać problem (którą właściwość otrzymujesz i którą chcesz mieć w swoim pliku xls)

Witam

Jeśli dobrze zrozumiałem, musisz zmodyfikować linię w poniższej metodzie, aby makro poszło szukać informacji w zakładce "specyficzne dla konferencji".

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

Zamiast swextention. CustomPropertyManager(""), swextention. CustomPropertyManager(swconf.name)

3 polubienia

W załączeniu znajduje się przykład montażu

Normalnie nomenklatura powinna wyglądać następująco:

Ilość opisu              drzewa     kodów ERP  
1 1198        RDL NFE 25-514 M3x8 A2 1                
2 2489        RDL NFE 25-514 M6x12 A2 1                

Z programem VBA daje to taki wynik:

ILOŚĆ     OPIS            DRZEWA    KODÓW ERP
-----1        001198        RDL NFE 25-514 MXX A2 2        


exemple.zip

Witam

Przetestowałem więc tylko dwa rozwiązania. Jeśli chcesz przejrzeć właściwości, Twoja tabela nie  działa , ponieważ nie wypełnia właściwości "Description" w plikach (stąd RDL NFE 25-514 MXX A2 w rezultacie), więc musisz zmodyfikować tę tabelę, dodając parametr $PROPRIETE@Description .

W przeciwnym razie możesz uzyskać opis konfiguracji bezpośrednio, w takim przypadku musisz zmienić kod w następujący sposób:

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

 

Dla uproszczenia dodałem sDescription oraz odzyskiwanie opisu aktywnej konfiguracji.

Cyryl-f. Dziękuję za odpowiedź.

Zrobiłem test . Jesteśmy coraz bliżej prawdy.

Wynik jest następujący z modyfikacją w celu bezpośredniego pobrania opisu konfiguracji: 

ILOŚĆ     OPIS            DRZEWA    KODÓW ERP
-0        Przykład         Domyślne 1                 
--1        001198        RDL NFE 25-514 M3x8 A2 2        


Ale nadal jest problem. Powinny być dwie linie. 

 Ilość opisu            drzewa    kodów ERP    
        1 1198        RDL NFE 25-514 M3x8 A2          1
        2 2489        RDL NFE 25-514 M6x12 A2         1

Witam

Tak więc problem wynika z poniższej części kodu w 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

 

Makro nie widzi, że istnieje inny plik, ponieważ opiera się na nazwie komponentu, która jest identyczna, więc uznaje, że składnik już istnieje i dodaje tylko ilość.

Zmodyfikowałem go w ten sposób, działa na komponentach z konfiguracją typu śruba/podkładka... Z drugiej strony, na pliku z konfiguracją, która może być w ilości 2 (na przykład konfiguracja otwarta/zamknięta) to nie zadziała.

    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

 

W związku z tym prawdopodobnie konieczne będzie dodanie kryteriów kontrolnych lub oparcie ich na nomenklaturach Solidworks, a następnie wyeksportowanie ich do Excela.

1 polubienie

Dziękuję za pomoc. Myślę, że właściwą opcją jest rozpoczęcie od zestawień materiałowych Solidworks, a następnie wyeksportowanie ich do programu Excel.