Rozwiązanie, którego używam, jest trochę chwiejne
Jeśli kilka blaszanych ciał będzie rosyjską ruletką, najlepiej: 1 pojedynczy kawałek blachy
Czasami makro nie działa
zwłaszcza, jeśli nazwa części arkusza blachy: Lista części spawanych zostanie zmieniona
generalnie testuję makro bezpośrednio w SW sprawdzam, czy właściwości są skopiowane, w razie potrzeby restartuję kilka razy i liczę, ile razy musiałem uruchomić makro
od czasu integracji uruchamiam tyle razy, ile razy zrobiłem to ręcznie (na innych częściach)
Jest trochę chwiejny, utwórz zestawienie materiałów z właściwościami, a następnie otwórz i ręcznie uruchom makro w kilku częściach, w których znajduje się PB
to makro nie działa dla starszych wersji oprogramowania, można odczytać dziwactwa we właściwościach lutowanych części, zwłaszcza jeśli część zostanie skopiowana i zmieniona nazwa, pojawi się stara nazwa części i nawet jeśli ręcznie wstawisz nową, nie działa
wynika to moim zdaniem z faktu, że w SW nie ma zakodowanej na stałe nazwy (w języku angielskim) i można ją w ten sposób zidentyfikować, w przeciwieństwie do nazw funkcji, które nawet jeśli zostaną przemianowane, zachowują domyślną nazwę w języku angielskim, tak jak ograniczenia ... (makro, nad którym pracowałem, aby zmienić nazwy funkcji pobranych z innych języków)
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swFeat As SldWorks.Feature
Dim swCustPropMgr As SldWorks.CustomPropertyManager
Dim cutListCustPropMgr As SldWorks.CustomPropertyManager
Dim PROP_TOLERIE As Variant
Dim PROP_PERSO As Variant
Dim i As Integer
Sub Copie_01()
'Copie les propriétés de pièces soudées vers propriétés personnalisées
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If (swModel.GetType <> 1) Then '1 = pièce, 2 = assemblage, 3 = plan
MsgBox "Pièce uniquement", vbInformation
Exit Sub
End If
PROP_TOLERIE = Array("Longueur du flanc de tôle", "Largeur du flanc de tôle", "Longueur à découper extérieure", _
"Longueur à découper des boucles intérieures", "Découpes", "Plis")
PROP_PERSO = Array("Long flanc", "Larg flanc", "Long découpe ext.", _
"Long découpe int.", "Découpes", "Plis")
Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
For i = 0 To UBound(PROP_PERSO)
swCustPropMgr.Delete PROP_PERSO(i)
Next i
swCustPropMgr.Delete "Epaisseur"
swCustPropMgr.Add2 "Epaisseur", swCustomInfoType_e.swCustomInfoText, """" & "Epaisseur@" & swModel.GetTitle() & ".SLDPRT" & """"
Set swFeat = swModel.FirstFeature
Do While Not swFeat Is Nothing
Debug.Print swFeat.GetTypeName
If swFeat.GetTypeName = "CutListFolder" Then
Dim swBodyFolder As SldWorks.BodyFolder
Set swBodyFolder = swFeat.GetSpecificFeature2
swBodyFolder.SetAutomaticCutList (True)
swBodyFolder.UpdateCutList
Set cutListCustPropMgr = swFeat.CustomPropertyManager
For i = LBound(PROP_TOLERIE) To UBound(PROP_TOLERIE)
Dim valOut As String
Dim resolvedValOut As String
cutListCustPropMgr.Get4 PROP_TOLERIE(i), True, valOut, resolvedValOut
If valOut <> "" Then
swCustPropMgr.Add2 PROP_PERSO(i), swCustomInfoType_e.swCustomInfoText, valOut
End If
Next i
End If
Set swFeat = swFeat.GetNextFeature
Loop
End Sub