'遍历装配体 Sub TraverseComponent(swComp As SldWorks.Component2) Dim vChildComp As Variant Dim swChildComp As SldWorks.Component2 Dim i AsLong
vChildComp = swComp.GetChildren For i = 0To UBound(vChildComp) Set swChildComp = vChildComp(i) Debug.Print swChildComp.Name2 TraverseComponent swChildComp Next i EndSub
'施法前摇 Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc
If swModel.GetType <> SwConst.swDocASSEMBLY Then swApp.SendMsgToUser "请在装配体中运行" ExitSub EndIf
'遍历装配(使用字典去除重复出现的零部件名) Dim swConfMgr As SldWorks.ConfigurationManager Dim swConf As SldWorks.Configuration Dim swRootComp As SldWorks.Component2 Dim dict AsObject Set dict = CreateObject("Scripting.Dictionary") Set swConfMgr = swModel.ConfigurationManager Set swConf = swConfMgr.ActiveConfiguration Set swRootComp = swConf.GetRootComponent3(True) Debug.Print "File = " & swModel.GetPathName If swModel.GetType = SwConst.swDocASSEMBLY Then TraverseComponent swRootComp, dict EndIf '增加顶层装配体 dict(Left(swModel.GetTitle, InStrRev(swModel.GetTitle, ".") - 1)) = "" EndSub
'遍历装配体 Sub TraverseComponent(swComp As SldWorks.Component2) Dim vChildComp As Variant Dim swChildComp As SldWorks.Component2 Dim i AsLong
vChildComp = swComp.GetChildren For i = 0To UBound(vChildComp) Set swChildComp = vChildComp(i) '零件名 dict(TrueName(swChildComp.Name2)) = "" '装配体名 dict(TrueName(swComp.Name2)) = "" TraverseComponent swChildComp, dict Next i EndSub