Vba 仅在选定组件(swModel.GetComponents)中应用宏

Vba 仅在选定组件(swModel.GetComponents)中应用宏,vba,solidworks,solidworksapi,Vba,Solidworks,Solidworksapi,我有这段代码,可以自动使用随机颜色为所有部件组件着色。我以前用这段代码问了一个不同的问题,但这次,我想问一下是否有人可以帮忙 是否要使此代码仅为选定的部件零部件着色? 我希望有人能帮我,我还在学习API。请参阅下面的代码 Dim swApp As Object Dim Part As Object Dim boolstatus As Boolean Dim longstatus As Long, longwarnings As Long Public Sub ColorMacro1() D

我有这段代码,可以自动使用随机颜色为所有部件组件着色。我以前用这段代码问了一个不同的问题,但这次,我想问一下是否有人可以帮忙 是否要使此代码仅为选定的部件零部件着色? 我希望有人能帮我,我还在学习API。请参阅下面的代码

Dim swApp As Object
Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Public Sub ColorMacro1()

 Dim swApp As SldWorks.SldWorks
 Dim swModel As SldWorks.ModelDoc2
 Dim swElement As Object
 Dim vElementArr As Variant
 Dim vElement As Variant
 Dim vMatProp As Variant

   Set swApp = Application.SldWorks
   Set swModel = swApp.ActiveDoc
   vMatProp = swModel.MaterialPropertyValues

'Get all elements

vElementArr = swModel.GetComponents(False)
For Each vElement In vElementArr
    Set swElement = vElement
    Randomize
    vMatProp(0) = Rnd 'Red
    vMatProp(1) = Rnd 'Green
    vMatProp(2) = Rnd 'Blue
    
    vMatProp(3) = Rnd / 2 + 0.5 'Ambient
    vMatProp(4) = Rnd / 2 + 0.5 'Diffuse
    vMatProp(5) = Rnd 'Specular
    vMatProp(6) = Rnd * 0.9 + 0.1 'Shininess
    swElement.MaterialPropertyValues = vMatProp
    Next

   'Redraw to see new color
   swModel.GraphicsRedraw2

End Sub

在设置对象的位置,请尝试以下操作:

Set swElement = Selection

您可以使用GetSelectedObjectsComponent4获取所选组件,如下所示:

Option Explicit
Public Sub ColorMacro1()
  Dim swApp As SldWorks.SldWorks
  Dim swModel As SldWorks.ModelDoc2
  Dim vMatProp As Variant
  Dim swSelMgr As SldWorks.SelectionMgr
  Dim swComp As SldWorks.Component2
  Dim Count As Integer
  Dim i As Integer

  Set swApp = Application.SldWorks
  Set swModel = swApp.ActiveDoc
  Set swSelMgr = swModel.SelectionManager

  Count = swSelMgr.GetSelectedObjectCount2(0)
  If Count = 0 Then MsgBox "No Components selected": Exit Sub

  vMatProp = swModel.MaterialPropertyValues
  For i = 1 To Count
    Set swComp = swSelMgr.GetSelectedObjectsComponent4(i, 0)

    Randomize
    vMatProp(0) = Rnd 'Red
    vMatProp(1) = Rnd 'Green
    vMatProp(2) = Rnd 'Blue
    
    vMatProp(3) = Rnd / 2 + 0.5 'Ambient
    vMatProp(4) = Rnd / 2 + 0.5 'Diffuse
    vMatProp(5) = Rnd 'Specular
    vMatProp(6) = Rnd * 0.9 + 0.1 'Shininess
    swComp.MaterialPropertyValues = vMatProp
  Next

  swModel.GraphicsRedraw2
End Sub

嗨,达曼,非常感谢你的回答。我尝试了您的建议,并将
Dim Selection声明为SldWorks.SelectionMgr
。但是
选择
值是
我哪里出错了?希望你能回答。嗨,费根,谢谢。你能帮我解决上面提到的问题吗?你在运行宏之前选择了项目吗?他们必须事先选定。你也可以看看这个网站,他们有免费的宏,可以适应你要找的是的,我有。但它会提示输入所需的对象。嗨,杰罗姆。很好!谢谢