Hi all,
I've gotten as far as I could with my narrow VB knowledge by looking through examples and I'm most of the way there but need some help. Attached is a basic shelf with some custom properties (the macro is attached as well). I want to select a few edge faces in the assembly, run the macro and have it change the face colors but also change "Long F" custom property to "Ding!" for the selected part. It works some of the time but not others which makes me think my loop needs to be corrected. This tool is to assign edgebanding codes to the factory for finishing sides of wood parts. So selecting either 1 face on 1 part or 1 face on 3 parts, they should all change color and each part should get the "Long F" custom property updated. Please help.
Option Explicit
Dim swApp As SldWorks.SldWorks
Sub main()
Dim swModel As SldWorks.ModelDoc2
Dim vComps As Variant
Dim swComp As SldWorks.Component2
Dim swAssy As SldWorks.AssemblyDoc
Dim i As Integer
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFace As SldWorks.Face2
Dim vProps As Variant
Dim cpm As CustomPropertyManager
Dim eb As String
Set swSelMgr = swModel.SelectionManager
Set swAssy = swModel
vComps = swAssy.GetComponents(False)
'updateProperty swModel
For i = 1 To swSelMgr.GetSelectedObjectCount2(-1)
Set swComp = vComps(i)
Set swModel = swComp.GetModelDoc2
Set cpm = swModel.Extension.CustomPropertyManager("")
'updateProperty swModel
eb = "Ding!"
eb = Replace(eb, "_", " ")
cpm.Delete "Long F"
cpm.Add2 "Long F", swCustomInfoText, eb
Set swFace = swSelMgr.GetSelectedObject6(i, -1)
vProps = swFace.GetMaterialPropertyValues2(1, Empty)
vProps(0) = 1 'R
vProps(1) = 1 'G
vProps(2) = 0 'B
vProps(3) = 1
vProps(4) = 1
vProps(5) = 0.8
vProps(6) = 0.3125
vProps(7) = 0
vProps(8) = 0
swFace.SetMaterialPropertyValues2 vProps, 1, Empty
Next i
End Sub