机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 22561|回复: 17

重命名零件宏

[复制链接]
发表于 2023-8-21 21:07:44 | 显示全部楼层 |阅读模式
Solidworks 虽功能强大,但有些地方做得不尽如人意,比如三维带工程图重命名,就显得十分鸡肋。论坛网友steve_suich发过一个改零件同时改工程图的宏(http://www.cmiw.cn/thread-1058539-1-2.html),虽然有所改进,但不是十分完美。
; P2 W& P' _; r: L4 }: g我在此代码的基础上作些优化,希望能给大家带来帮助!2 h4 ^* `* U' u, m; Q+ X+ K

1 |8 J: t' W4 R' R) SPs:1.前置条件:打开装配体并选择零件+ Q+ b6 T( Z; Y: Q
    2.使用方法:运行宏后输入名称
& c9 h' |8 y* s) F    3.运行结果:同文件夹下生成新零件及附属工程图并保留原工程图" I! E5 B8 t  q( O4 Q9 ?( z

; f7 I) Z% d, j* b( J% [Dim swApp As Object
7 {8 W8 c! @6 |3 }7 H  m. j  Dim Part As Object
: M* g5 Z( V: t  Dim Error As Long
, T# }. C1 r7 T  nDim Warning As Long" t5 k: E: K, {
Dim mip As String
, h8 |  b& G; a+ pDim Status As Boolean. |$ ?2 P( `! R8 a1 ?
Dim Newpath As String
# J$ }2 o% Y( a( L: q4 G* QDim mipname As String) w  n* J3 W0 j6 }7 j; H% ?2 d
Dim vDepend() As String
0 R+ O9 @" A1 P: {    Sub main()
; C; C! l  N. ?# y  Z6 I; a4 n: q3 b    Set swApp = Application.SldWorks9 Z$ I2 g/ u. n- K* `9 ?
    Set Part = swApp.ActiveDoc
9 I8 Y; D, I7 Y- F7 i6 U3 w    Set swSelMgr = Part.SelectionManager' u, D& |: P" J# L
    Set swComp= swSelMgr.GetSelectedObjectsComponent4(1,0)
' n2 L: j7 x/ a6 X% Y1 V) P        swComp.SetSuppression2 (3)    , }0 Z) a$ I" t/ P, E- x
    Set swSelModel = swComp.GetModelDoc2
/ x7 w7 H) `1 q    Set swSelModelext = swSelModel.Extension( ?6 j3 x" D  E; y: b+ d: V
3 r( L$ Z7 A, F( K! c; _# {. y
    oldpathname = swComp.GetPathName
7 j1 g6 _3 @2 e9 @0 T    ' a# d4 B0 g: S1 A# J/ @9 y: g
    Path = Left(oldpathname, InStrRev(oldpathname, "\")) '路径' N2 {) I) m3 b0 R" e' W& }( g
    Debug.Print Path
4 j7 u6 G; Y: ]  L6 b. ?    ntype = Mid(oldpathname, InStrRev(oldpathname, ".")) '后缀: n, m" b5 y: O9 \
    Debug.Print ntype
* q0 v4 d8 p# [6 g3 m    oldfi = Mid(oldpathname, InStrRev(oldpathname, "\") + 1) '旧文件名
+ k* s. r, f! f3 P    Debug.Print oldfi
1 C+ T3 r. @5 U" b% b' M% l1 ?    oldname = Left(oldfi, InStrRev(oldfi, ".") - 1)9 ~: q( y# _; y9 d
         mipname = InputBox("changename", "name", oldname) '新文件名
, i, q4 i8 x3 Q! Q! `' L" H         
! ?! R; @# r' O) O4 L) n3 k5 v         mip = Path & mipname & ntype '新文件名带路径& t4 @: O0 d- [2 `! o
         Debug.Print mip% J; B5 J5 v( r. Y" c+ r2 s7 H

; G8 `. w, z" t5 t( \    If mip <> "" Then4 M4 c0 |" |' Z7 h4 B0 o. n7 v
         Status = swSelModelext.SaveAs3(mip, 0, 512, Nothing, Nothing, Error, Warning) '更改零件文件名(替换装配体中的原文件)
3 n+ C! N0 n$ e; G# Y      Debug.Print Status) d1 [8 o% f& p
      '========================0 }) N6 b+ b# {1 R1 F: }  W
      '更改工程图文件名
. W# j3 \) k2 A2 \9 y/ Z" K      Debug.Print Path
: b+ g7 ?& T' R* z$ a; H# i: n+ g      tmpfi = Dir(Path & "*.SLDDRW") '遍历原文件夹中的工程图文件9 B9 }+ J# Z) S5 k7 D
      Debug.Print tmpfi) w6 h: m1 q, l5 p2 d5 h
      Do Until tmpfi =Null 4 P! n; L+ C& W0 |* M
        tmpfiname = Mid(tmpfi, InStrRev(tmpfi, "\") + 1)
+ |+ z2 l( _+ ?        Debug.Print tmpfiname
+ {8 P, |4 ?+ H* _: p0 A        tmpoldname=mid(oldfi,1,instr(1,oldfi,".")-1) & ".SLDDRW"  I7 R( N2 L' Z* I/ N
        Debug.Print tmpoldname
7 @% \. H6 J. v/ ^. h        If tmpfiname = tmpoldname Then '查找同名工程图
. B! O% z  H2 `% s4 E        newdrwname = Path & mipname & ".SLDDRW"
) l% @, W# R, i        Debug.Print newdrwname
) E: A5 q& O: \8 y7 F) I5 n        olddrwname = Path & tmpfi
- u! N3 {* b! V4 s% U         filecopy olddrwname,newdrwname '复制工程图到新文件夹
" U8 c  z7 Y& p9 k        vDepend = swApp.GetDocumentDependencies2(Path & tmpfi, False, False, False) '查找工程图依赖, ?/ t& J. ~2 p: k+ f
        Debug.Print vDepend(1)
  j0 b; p$ q* {7 v& K7 T( {        bl = swApp.ReplaceReferencedDocument(newdrwname, vDepend(1), mip) '替换工程图依赖) f8 P' X( `! G1 T% I) i. J
" A5 }# H6 Z* f
        Debug.Print bl
) O! R+ ^5 K' }7 b* r         Exit Do+ ^+ m& s5 e/ a" {/ h* U8 a
       End If& `, P; {; E2 C! o4 [6 ^# o  c- l$ r
    tmpfi = Dir2 f' P$ K* [" j& V  }: h
    Debug.Print tmpfi- K0 x; w: F( R# o6 r+ s4 h
    Loop
* L7 y8 |) t( G2 [' `    End If
, s0 w! W, j! G5 [5 n: Y    End Sub0 p! \8 y, ?9 V7 g" c
/ G1 E5 z5 O2 i

3 g4 g! }8 v$ ?# K, t, a7 V, J, C( v2 m; V8 ~* o
& D, }( t7 P' V9 U; P" z9 v
. p7 B, |4 s- s2 p

评分

参与人数 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:145 t) \7 J7 R+ e, f( i
凯元工具也可以批量改名
3 C( N: _% |3 r3 `5 I! K
授人以鱼,不如授人以渔9 N( e7 I# B9 t
回复 支持 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 | 显示全部楼层
运行报错咋解决啊大佬
9 Y6 {# I. J9 q0 r1 Y/ \7 W
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-24 09:06 , Processed in 0.106235 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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