机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 23233|回复: 17

重命名零件宏

[复制链接]
发表于 2023-8-21 21:07:44 | 显示全部楼层 |阅读模式
Solidworks 虽功能强大,但有些地方做得不尽如人意,比如三维带工程图重命名,就显得十分鸡肋。论坛网友steve_suich发过一个改零件同时改工程图的宏(http://www.cmiw.cn/thread-1058539-1-2.html),虽然有所改进,但不是十分完美。8 ]( }3 K" m% I0 A* d- o% j
我在此代码的基础上作些优化,希望能给大家带来帮助!' s$ R/ a( t8 ]( {6 o- b8 P
6 z8 p+ ]- B/ @$ R5 A% t
Ps:1.前置条件:打开装配体并选择零件5 H9 |2 T  d0 J4 _0 F1 M. m3 {* C
    2.使用方法:运行宏后输入名称
8 w! }  B- \5 l6 r2 ?' @6 ^9 g    3.运行结果:同文件夹下生成新零件及附属工程图并保留原工程图: W7 i8 W& L/ U% X
; {* u4 X; O2 O  u
Dim swApp As Object
2 u' {" u! ]* {' `" g7 v  Dim Part As Object% H$ E4 [7 v4 X0 q
  Dim Error As Long
" H7 T9 q, i) ADim Warning As Long! }6 y. f4 S8 L1 k
Dim mip As String
2 \9 w1 k- J, k. D8 h9 NDim Status As Boolean' D1 E: t6 \  v8 ?% P9 n6 X$ \
Dim Newpath As String5 N2 r! S0 e0 ^7 l  E# B
Dim mipname As String- U9 {6 b$ J! R3 g/ h6 J8 ~
Dim vDepend() As String  C! S7 J5 H. S8 H. c  b7 D
    Sub main()
1 e* R! p% e5 r+ o2 j4 _% v2 J    Set swApp = Application.SldWorks' S' o. J8 h4 @. V
    Set Part = swApp.ActiveDoc
6 a, V$ c! `! f% `+ @    Set swSelMgr = Part.SelectionManager8 w  b& R6 P5 p! f' E) Q
    Set swComp= swSelMgr.GetSelectedObjectsComponent4(1,0)
) f+ q' {9 R5 U        swComp.SetSuppression2 (3)   
$ \3 D* T! t, D- }* x" |+ M    Set swSelModel = swComp.GetModelDoc2
2 c1 p6 Y1 J5 [6 y    Set swSelModelext = swSelModel.Extension( k4 W+ Y& I0 [5 S5 c7 w2 O0 B: D
( B. s# H1 n) T! s) q. n
    oldpathname = swComp.GetPathName
: M. c7 ^9 j  g! e' }, H    : ]) X# P, h) v; y
    Path = Left(oldpathname, InStrRev(oldpathname, "\")) '路径) M6 ]  r3 l; m7 K- I
    Debug.Print Path
4 u$ D8 e- W. }    ntype = Mid(oldpathname, InStrRev(oldpathname, ".")) '后缀# l0 D0 a1 _1 m; T( Z% _
    Debug.Print ntype2 j. b. D* r# U( \) J& b! t5 |
    oldfi = Mid(oldpathname, InStrRev(oldpathname, "\") + 1) '旧文件名/ B+ Z; ]# {: D* D2 W8 B$ w: J
    Debug.Print oldfi* D/ n% K  A  `0 }2 n9 i# ?$ X
    oldname = Left(oldfi, InStrRev(oldfi, ".") - 1)
5 M4 `3 E3 j; m8 k  o         mipname = InputBox("changename", "name", oldname) '新文件名! N" Y% z, A$ b2 _/ o! [
         
5 c4 h6 p$ O! N         mip = Path & mipname & ntype '新文件名带路径; h' d) m5 C2 v2 E% i
         Debug.Print mip
9 O* v( Q9 `: Z( N! w: p1 L2 H/ G, o1 ^/ H7 I
    If mip <> "" Then  K7 o5 u! {0 N9 g
         Status = swSelModelext.SaveAs3(mip, 0, 512, Nothing, Nothing, Error, Warning) '更改零件文件名(替换装配体中的原文件)% J; x, u; N, _' x& ~
      Debug.Print Status& Q) F7 V1 U' I/ |6 p% w
      '========================
# O: h9 Z- Z4 |' |/ ]" o      '更改工程图文件名5 a: L5 ~/ r% ^  J/ ^* e
      Debug.Print Path1 P! \1 ~& T( [0 h
      tmpfi = Dir(Path & "*.SLDDRW") '遍历原文件夹中的工程图文件
) d; x% g  _* s' _! Q5 i      Debug.Print tmpfi
2 ~5 t4 [# I( R% Z      Do Until tmpfi =Null ( M4 X3 M; |9 l$ `) n- @. u2 ~6 V
        tmpfiname = Mid(tmpfi, InStrRev(tmpfi, "\") + 1)! q% Y, n4 ]: h; d* d
        Debug.Print tmpfiname
1 |6 W; E( s% a        tmpoldname=mid(oldfi,1,instr(1,oldfi,".")-1) & ".SLDDRW"2 K/ ^0 @7 _: @3 v6 C) s4 C
        Debug.Print tmpoldname
# V' W7 d- n3 j2 l& _% f        If tmpfiname = tmpoldname Then '查找同名工程图2 G- s' }, F: N$ ~% ~9 n' x
        newdrwname = Path & mipname & ".SLDDRW"( a7 A* K5 d' j/ v+ Y7 M
        Debug.Print newdrwname. B5 `. M% d1 J& \# O
        olddrwname = Path & tmpfi
1 z% Q9 e1 {4 I3 K9 l         filecopy olddrwname,newdrwname '复制工程图到新文件夹
5 p9 j4 K  r1 O6 E        vDepend = swApp.GetDocumentDependencies2(Path & tmpfi, False, False, False) '查找工程图依赖# Y5 A( b: d2 L( z( G2 c
        Debug.Print vDepend(1)
2 G) L' D) Q/ P/ W9 e        bl = swApp.ReplaceReferencedDocument(newdrwname, vDepend(1), mip) '替换工程图依赖
& T8 |! ^) D  r" V4 ]  S! Q2 ?, W* _9 m* q2 j5 v$ u! p
        Debug.Print bl: \7 N7 j  z' H7 x- d3 h( X
         Exit Do
  Y$ R. S2 F9 u3 x8 \# Q0 h       End If
. h5 T2 x: z! W6 d4 K    tmpfi = Dir( D8 k2 u9 w) I* ]
    Debug.Print tmpfi
7 I! `! X8 O( i" y% s    Loop
3 E3 t9 s. T5 f8 X    End If5 p/ Z$ b( e$ s3 L
    End Sub1 h# z& E4 F6 ]9 |5 ^. z9 G4 Z9 {
) V# {. Z$ k. `* E, ^; Q- m# o7 c

. a2 O8 a9 b4 ^% g5 q/ |/ G' G' H+ _' H& D

7 E! r' a, R9 I- G- x/ X6 r( @6 A

评分

参与人数 1威望 +1 收起 理由
陈进一 + 1

查看全部评分

回复

使用道具 举报

发表于 2023-8-22 07:09:54 | 显示全部楼层
有版本限制吗?
回复 支持 反对

使用道具 举报

发表于 2023-8-22 09:57:12 | 显示全部楼层
Solidworks自带命名,就是不能关联工程图一起改而已。从设计流程来说,改名在出图之前。其实就无所谓要不要插件了。
回复 支持 反对

使用道具 举报

发表于 2023-8-22 10:14:22 | 显示全部楼层
凯元工具也可以批量改名

点评

授人以鱼,不如授人以渔  详情 回复 发表于 2023-8-22 21:14
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-8-22 21:14:08 | 显示全部楼层
trongtrongtrong 发表于 2023-8-22 10:14
6 h+ T8 Y0 c" M) Q4 n凯元工具也可以批量改名

5 J: b" a8 A, r2 {% H授人以鱼,不如授人以渔
$ {# A* p5 l) J. m
回复 支持 1 反对 0

使用道具 举报

发表于 2023-8-24 16:19:18 | 显示全部楼层
谢谢版主 分享
回复 支持 反对

使用道具 举报

发表于 2023-11-8 16:07:45 | 显示全部楼层
复制粘贴过去代码错误
回复 支持 反对

使用道具 举报

发表于 2023-11-8 16:08:14 | 显示全部楼层
显示代码错误 一片红
回复 支持 反对

使用道具 举报

发表于 2024-3-26 11:09:39 | 显示全部楼层
怎么拷贝好一些,复制都是乱码
回复 支持 反对

使用道具 举报

发表于 2024-4-3 13:29:17 | 显示全部楼层
运行报错咋解决啊大佬
# J9 S! `5 F+ n3 B& f
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-5-2 05:11 , Processed in 0.094990 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表