QQ登录

只需一步,快速开始

快捷登录

登录 或者 注册 请先

UG爱好者

 
搜索
查看: 653|回复: 3
打印 上一主题 下一主题

[求助] SolidWorks宏

[复制链接]

二级士官

Rank: 2

3

主题

8

帖子

421

积分
跳转到指定楼层
楼主
发表于 2023-12-7 19:32:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Dim TopDocPathOnly As String
Dim swModel As SldWorks.ModelDoc2
Dim swApp As SldWorks.SldWorks
Dim longstatus As Long, longwarnings As Long

Sub main()
Set swApp = Application.SldWorks
Set TopDoc = swApp.ActiveDoc '總裝對象
If TopDoc.GetType <> 2 Then
    MsgBox ("Open Assembly")
    Exit Sub '不是裝配=退出
End If
TopDocPathSplit = Split(TopDoc.GetPathName, "") '分割
TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '總裝文件名稱
Path_ = TopDoc.GetPathName
TopDocName = Left(TopDocName, Len(TopDocName) - 7) '總裝文件名稱(排除.SLDASM)
TopDocPathOnly = TopDocPathSplit(UBound(TopDocPathSplit) - 1) '總裝目錄名稱
TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱
SubAsm TopDoc, TopConfString '遍歷

End Sub

Function SubAsm(AsmDoc, ConfString)
Dim name_ay() As String
Set swModel = swApp.ActiveDoc
Set Configuration = AsmDoc.GetConfigurationByName(ConfString)
Set RootComponent = Configuration.GetRootComponent
Components = RootComponent.GetChildren
For Each Child In Components '總裝抓全部零件名稱
    i = i + 1
    ReDim Preserve name_ay(i)
    Set ChildModel = Child.GetModelDoc
    ChildPathSplit = Split(Child.GetPathName, "") '分割
    ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名稱
    name_ay(i) = Left(ChildName, Len(ChildName) - 7) '編號_名稱
    swModel.DeleteCustomInfo2 "", name_ay(i)
    swModel.AddCustomInfo2 name_ay(i), swCustomInfoText, """SW-Material@" & name_ay(i) & ".SLDPRT"""
Next

'~~~~~~~ parts_property ~~~~~~~
Dim longstatus As Long, longwarnings As Long
Dim retval As String
Set Part = swApp.ActiveDoc
path_name = Part.GetPathName
TopDocPathSplit = Split(path_name, "") '分割
TopDocName = TopDocPathSplit(UBound(TopDocPathSplit))
Path_ = Left(path_name, Len(path_name) - Len(TopDocName))
For n = 1 To i
    Set Part = swApp.OpenDoc6(Path_ & name_ay(n) & ".SLDPRT", 1, 0, "", longstatus, longwarnings)
    swApp.ActivateDoc2 name_ay(n) & ".SLDPRT", False, longstatus
    Set swModel = swApp.ActiveDoc
    '~~~ 注意 L1 設定 ~~~
    L1 = InStrRev(name_ay(n), "_", , 0) '編號_名稱是以 "_" 之符號分隔,可依需要更改所需之符號
    '~~~
    code_part = Left(name_ay(n), L1 - 1) ' 編號
    name_part = Right(name_ay(n), Len(name_ay(n)) - L1) '名稱
    retval = swModel.DeleteCustomInfo("材質")
    retval = swModel.AddCustomInfo3("", "材質", swCustomInfoText, """SW-Material@" & name_ay(n) & ".SLDPRT"""
    retval = swModel.DeleteCustomInfo("名稱")
    retval = swModel.AddCustomInfo3("", "名稱", swCustomInfoText, name_part)
    retval = swModel.DeleteCustomInfo("編號")
    retval = swModel.AddCustomInfo3("", "編號", swCustomInfoText, code_part)
    swModel.Save
    swApp.CloseDoc name_ay(n) & ".SLDPRT"
Next
End Function

有奖推广贴子: 

回复

使用道具 举报

少尉

Rank: 5Rank: 5

1

主题

331

帖子

2271

积分
沙发
发表于 2023-12-8 08:05:25 | 只看该作者
66666666666666
回复 支持 反对

使用道具 举报

三级士官

Rank: 3Rank: 3

0

主题

12

帖子

672

积分
板凳
发表于 2023-12-12 10:55:03 | 只看该作者
TopDocPathSplit = Split(TopDoc.GetPathName, "\") '分割
回复 支持 反对

使用道具 举报

二级士官

Rank: 2

2

主题

57

帖子

371

积分
地板
发表于 2023-12-24 19:27:32 | 只看该作者
没管用,哪里有问题?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

 
 
QQ:1359218528
工作时间:
9:00-17:00
 
微信公众号
手机APP
机械社区
微信小程序

手机版|UG爱好者论坛 ( 京ICP备10217105号-2 )    论坛管理员QQ:1359218528

本站信息均由会员发表,不代表本网站立场,如侵犯了您的权利请联系管理员,邮箱:1359218528@qq.com  

Powered by UG爱好者 X3.2  © 2001-2014 Comsenz Inc. GMT+8, 2024-5-21 00:03

返回顶部