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
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.
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)
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
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.
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.