You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SolidWorks VBA宏批量修改选中面颜色的问题与解决

SolidWorks宏:批量修改选中面颜色(适配2015版本)

开发SolidWorks宏时,需要实现批量修改所有选中面颜色的功能,但官方提供的示例仅支持单个选中面修改。

最初的单面子程序

Sub color(R As Integer, G As Integer, B As Integer)
    Dim swModel As SldWorks.ModelDoc2
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim swFace As SldWorks.Face2
    Dim vFaceProp As Variant
    Dim bRet As Boolean
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
    Set swFace = swSelMgr.GetSelectedObject6(1, -1)
    vFaceProp = swFace.MaterialPropertyValues
    If IsEmpty(vFaceProp) Then
        ' 若未设置面级颜色,则从模型获取默认值
        vFaceProp = swModel.MaterialPropertyValues
    End If
    ' 打印当前颜色属性
    Debug.Print "RGB            = [" & vFaceProp(0) * 255# & ", " & vFaceProp(1) * 255# & ", " & vFaceProp(2) * 255# & "]"
    Debug.Print "Ambient        = " & vFaceProp(3)
    Debug.Print "Diffuse        = " & vFaceProp(4)
    Debug.Print "Specular       = " & vFaceProp(5)
    Debug.Print "Shininess      = " & vFaceProp(6)
    Debug.Print "Transparency   = " & vFaceProp(7)
    Debug.Print "Emission       = " & vFaceProp(8)
    ' 设置新颜色
    bRet = swModel.SelectedFaceProperties(RGB(R, G, B), vFaceProp(3), vFaceProp(4), vFaceProp(5), vFaceProp(6), vFaceProp(7), vFaceProp(8), False, "")
    
    ' 取消选中以查看新颜色
    swModel.ClearSelection2 True
End Sub

解决后的批量修改子程序

已适配SolidWorks 2015版本,实现批量修改所有选中面颜色:

Sub color(R As Integer, G As Integer, B As Integer)

    Dim swApp                       As SldWorks.SldWorks
    Dim swModel                     As SldWorks.ModelDoc2
    Dim swSelMgr                    As SldWorks.SelectionMgr
    Dim swFace                      As SldWorks.Face2
    Dim bRet                        As Boolean
    Dim PocPloch                    As Integer
    Dim i                           As Long
    Dim color As Integer

    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
   
    PocPloch = swSelMgr.GetSelectedObjectCount ' 获取选中面的数量

    ' 从后往前遍历选中面,避免索引偏移问题
    For i = PocPloch To 1 Step -1
        Set swFace = swSelMgr.GetSelectedObject(i) ' 获取当前选中面
        ' 设置当前选中面的颜色
        swModel.SelectedFaceProperties GetHexFromRGB(R, G, B), 0.5, 0.5, 1, 0.315, 0, 0, 0, ""
        bRet = swFace.DeSelect ' 取消当前面的选中状态
    Next i

End Sub

配套RGB转十六进制函数

需要搭配以下函数实现RGB值到SolidWorks兼容十六进制颜色值的转换(注意此处需按BGR顺序转换):

Function GetHexFromRGB(R As Integer, G As Integer, B As Integer) As String
' 注意:SolidWorks要求此处按BGR顺序而非RGB顺序转换
GetHexFromRGB = "&H" & VBA.Right$("" & VBA.Hex(B), 2) & _
    VBA.Right$("00" & VBA.Hex(G), 2) & VBA.Right$("00" & VBA.Hex(R), 2)

End Function

内容的提问来源于stack exchange,提问作者jeffp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 08:38:19