找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 醉生梦

solidworks 批量执行宏

[复制链接]
发表于 2021-7-15 19:53:30 | 显示全部楼层
观摩一下
回复

使用道具 举报

发表于 2021-9-29 15:35:14 | 显示全部楼层
有个使用场景,现在我使用的图号分离宏需要打开零件才能进行属性修改,每次在装配体里多修改几个零件名称或者新做零件就会忘了改属性,如果可以批量打开零件,然后中间插入执行图号分离宏的工具执行,就可以自动帮我一次性修改零件属性了(但是俺不会写,有没有大佬帮帮忙呜呜呜)
发表于 2021-11-28 10:05:46 | 显示全部楼层
Dim swApp As Object
: @7 W3 }7 P0 }4 y/ b8 NDim Part As Object
" y: f/ [% T$ J4 i9 c6 IDim sldPath As String
. x  H& I% S8 v" P/ q9 ?: I. w, P) M# L: b
Dim boolstatus As Boolean7 V7 X6 y& e2 ~, Z
Dim longstatus As Long, longwarnings As Long. Z( R8 V" T. S9 v; q2 y

" |! r) d( w& b5 i: J0 N; t; i7 x& r5 O) C7 y, v9 G

* D! X" O8 g# B$ R( \. L; I- ?, m7 ]% q9 Y" v7 H" C2 k$ p8 T$ I
Sub Test(): K( t8 L+ O: _9 s; F* Q& B
Set swApp = Application.SldWorks
" m1 M! ]- h+ c1 m6 Q; |/ _9 V' xsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
8 i$ c/ }3 o* i
+ [* s( S: R% o" r. k9 x- E5 @swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称; g) v1 }* ?0 }% c2 k8 K6 A+ D8 Q
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
* l& {6 `8 Z+ v7 h2 k9 XIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2& ~- g  q3 T5 [. ?# u- B

# h1 ?, t; W+ o/ ]Do While swFileName <> ""
/ l/ r: a$ I- X8 `8 K0 T) r* |/ n2 e3 m" }& e0 o
Set swApp = Application.SldWorks
  \8 F1 N& C: S$ a/ W/ V, B/ u( R, K9 C. N
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
' h: t( D9 J" D& L' |* a1 |  `! r; y$ \% g% V! w1 t5 t
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
" Q- ?& j: e. M3 |; Z8 |6 {
; {' M' |/ |- e" |2 K$ Z  v
9 ?9 X+ V( O, y7 ^: u; e! O* D9 L% W" a& F! z
" N: H" ~7 P. a# t# ^$ K. C
" D( H( A; {' y1 f
Set Part = swApp.ActiveDoc
4 x- o7 u- x+ y' N7 F& p
% x: o1 M: ?4 d! a! @0 m' m" BCall plmain
8 D) o* ^3 U2 G! Q
+ J! C2 z5 r- D8 s  v" T! ?6 g6 u6 V
2 u. ^0 u2 h2 U'9 `+ G/ E% j! I8 X! Y

" c3 A# r7 A$ }, Q" h7 k  S% m9 S3 Y, r' ]- C* [" `
' L; i2 |: D7 P5 @0 b
Part.Save '保存%
) G* r2 C  z5 x6 k0 J- c4 I9 {swApp.CloseDoc (swFileName) '关闭零件
1 @- x3 R) T5 o
5 w3 s4 h9 U* d- uIf swFileName = "" Then Exit Do
. b- ^* F2 M* s! l0 s+ i
; `8 n1 h/ `& A- _  p- m7 d$ s- B0 N/ ^/ v7 T# M' {
swFileName = Dir '搜寻下一个零件档案名称0( h1 s* L: }4 Y8 w

& {* m0 f& S2 Z+ }: M* \6 l1 uLoop '循环搜寻2 n  b8 }1 R8 d2 i! {  i" Y
End Sub
! y2 P, A: a6 d9 B8 F按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
发表于 2021-11-28 10:06:58 | 显示全部楼层
Dim swApp As Object
/ g3 u  w' n7 L: gDim Part As Object
. X% X" @! c, R/ c% K1 [, K+ mDim sldPath As String4 ?) f3 V5 Y# x0 h
8 R7 a8 C# v" v
Dim boolstatus As Boolean6 ]8 W1 @$ k6 k
Dim longstatus As Long, longwarnings As Long1 K/ P9 t' U) L, q# a" I2 b

) B) ^" c( x$ r/ a9 c( m. K' F3 p, z7 T/ G/ G

( P4 i" P- Q  r+ j# X0 f5 Q  e
$ ^- [5 i3 J6 l" R! }1 G+ \' ISub Test()# z4 ]7 i' n( Y
Set swApp = Application.SldWorks: w9 X6 l! i- w; S$ t
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录9 A# ~5 [6 G3 O+ e% G

$ Q" j+ O! q" I3 w  Z  O. fswFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称% w2 O1 J2 }1 d7 X9 f/ u& N- O
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
+ b* s7 g4 G7 ]/ B% ~( ]If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
5 p. T4 d' m7 }$ j# [& w* d9 v
, k( \4 C) M' ?- kDo While swFileName <> ""6 ]# c5 ?' d5 W# U

1 v5 b# c2 X( Z4 }+ hSet swApp = Application.SldWorks* ^+ L5 B0 `/ G% @

2 K- Q) [9 m8 ]: m6 H'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
: r* D  ^$ _7 C8 F) Y, @. y/ C$ T8 \+ M% K$ Y- B" c
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
2 x1 v1 i. M' {( m
/ U* h; u  {3 [8 P2 e( q8 I+ U) J% |- ?8 r% c9 N! I* [- w" M
/ }& m" X1 j; u$ o! f) G
3 ^7 T/ Z$ Y1 m; a4 K

1 p, `9 I2 t" z4 P% eSet Part = swApp.ActiveDoc
# u: o" o+ r" T6 j& H2 y1 |2 F8 o! s3 s; }
Call plmain
4 a2 t+ w1 f" ^1 F* c$ F/ [( d# p0 l
9 ~/ D, P' V- c* A. ?3 ^7 b' G/ ~0 s: p0 W0 a) p! U6 j
'
; Q( ~( F( V, e3 X9 m$ l4 f+ }! O; U+ t$ d8 d
: b0 _4 ^$ F6 g, ?# R/ B# t, i
* S( w$ W) w5 R* t' h: i$ X6 s2 A
Part.Save '保存%
$ m2 Y; a1 x  WswApp.CloseDoc (swFileName) '关闭零件
& ]  j1 b6 w8 R4 A9 J: o. _! H4 \
! ]: e2 z, E9 }' nIf swFileName = "" Then Exit Do
9 B( c7 }& h, V9 P, I9 h1 k2 _
- \) H. Y' H4 G* U* O- w$ e; c3 P) V( U  o4 ^! C
swFileName = Dir '搜寻下一个零件档案名称0" |! g# B$ `( \, d. _- b" O  ?
9 p% b0 Z9 ^* D0 \0 Z
Loop '循环搜寻
1 s3 n6 `, F0 f% gEnd Sub
发表于 2021-11-28 10:12:10 | 显示全部楼层
Dim swApp As Object3 l: R$ Y+ U$ m, f* z" B4 Q
Dim Part As Object
/ {6 S/ ]6 U6 S: _# K/ R, GDim sldPath As String
7 b8 Q! b* q' w3 u0 U1 BDim boolstatus As Boolean! ]- X2 {' D, B1 m: t1 s5 i) A
Dim longstatus As Long, longwarnings As Long6 s# t/ y, Q+ G' b( x' {& E
Sub Test()& K$ {8 |0 ~, f1 \1 y
Set swApp = Application.SldWorks
9 a, h  t6 D* B* e. f, e9 S6 ZsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录$ n0 A# ~- F" J; H3 t8 F& J+ ?
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
$ I5 D. s& r8 v0 V/ OIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
( X& X; q+ l$ f& ~8 M' B- U+ zIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 29 x6 \' Z2 \4 o6 ~
Do While swFileName <> ""7 p: i! {' l9 l+ E& B
Set swApp = Application.SldWorks
8 L% [( E8 O$ ?! g. }% o'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
# C2 {; Y7 Z- H. OSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)5 w8 J% m1 T- L: C
Set Part = swApp.ActiveDoc3 t& z4 w' w+ `6 I7 y2 h- u
Call plmain
2 v1 F- i# Z: X2 sPart.Save '保存%( o$ t9 o9 R5 Y' c& {' Q
swApp.CloseDoc (swFileName) '关闭零件) i) Z& Y( ~  x( x5 O
If swFileName = "" Then Exit Do& P4 T* @% E9 p! H
swFileName = Dir '搜寻下一个零件档案名称0( T" Z4 P) ?- G6 |6 }+ J* t( ]8 K
Loop '循环搜寻
) }: a5 g3 w9 u- ^$ H4 v+ a. vEnd Sub   老是被跳过
发表于 2021-11-28 13:44:09 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05; m/ F# v# F/ d  ]. g
Dim swApp As Object( F6 Q& K& o  H
Dim Part As Object
6 A3 y! w+ H/ C: fDim sldPath As String

" w$ ?' \7 p: N1 l5 C希望可以得到解答
  X2 ~" l) Z3 N7 L
发表于 2021-11-28 13:45:15 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05" h8 T8 ~! \0 [+ U, b# o7 D7 j
Dim swApp As Object* Y: h& O" C) p; p
Dim Part As Object. |$ T9 f" V* P! L$ A
Dim sldPath As String
! |5 N6 k, E8 `' N7 e
和楼主一样打不开装配体
8 S6 O% t. Y; p5 l9 o
发表于 2022-2-10 23:22:01 | 显示全部楼层
多少积分可以分享
发表于 2022-2-18 10:31:55 | 显示全部楼层
kbisi 发表于 2021-11-28 13:44
; E  S6 g1 r' q! T& q. W$ K* E希望可以得到解答
& g/ N! e+ q3 B4 s9 c3 f
无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。
. _3 Y. Q, _; _8 t. z; h6 J$ ?. N经过测试,下面的程序可正常打开零件和装配体0 E3 s! v# M* j# ?* Y; ^6 T; d. {
4 o7 i+ b, W8 z% Z
' ******************************************************************************1 Z; k, ]& v# f8 x) G
' 读取指定目录下的Prt/asm文件,关闭
9 W" Q5 ]6 `# W+ v* I' B' ******************************************************************************- \9 W6 v6 `& l
Dim swApp As Object: s# }5 c# d: D
$ |" q/ C; F3 q3 n5 X
Dim Part As Object
2 L0 j2 D+ C2 `Dim boolstatus As Boolean
1 @, p7 P$ v$ e+ _7 y* WDim longstatus As Long, longwarnings As Long4 T7 {+ s; H/ R6 }
'Dim sldPath As String
. Z2 k" t- J, [( v) ?( Z6 BConst sldPath As String = "E:\3Dtest\BOM1\"  '设定目录( ?6 G, p8 j* X& R/ t

3 h/ n2 D# m  G6 N- V" I# lSub main()7 k5 Y, n& h, U
- `! }1 z5 ?* h# z$ q
    Set swApp = _
: ?5 Z  F8 l% L" G    Application.SldWorks
! }3 _8 n# f" L2 j2 {! H, D    Set Part = swApp.ActiveDoc
5 U* u. b3 S3 e9 h" ?/ f        ) V, J# f  c( b0 O( |
    swFileName = Dir(sldPath & "*.sld*") . ]- l. P: P' t1 B. z

$ }, s( y+ i" |1 m6 j- P& D4 _    Do While swFileName <> ""
" T& ^& u3 i$ i! C! E, M        Set swApp = Application.SldWorks/ G; K5 b8 c5 H
        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
1 i( X0 h. W1 q        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2* K+ b$ [% Y9 z

7 w* _- D9 W, u/ g! V; F0 e        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
0 v# }% t0 c+ I+ T        Set Part = swApp.ActiveDoc: z- c* k# c3 A' B. f  o
        'Call plmain
* G, c) S0 s6 U5 `9 L8 g" W        'Part.Save '保存! M7 S6 n8 Q5 r( M/ S8 b- E3 ]
        swApp.CloseDoc (swFileName) '关闭零件
- Y4 J3 I/ F2 ], [* \        If swFileName = "" Then Exit Do:
( n2 P$ j+ ~2 f        swFileName = Dir '搜寻下一个零件档案名称. r& U) X& |* W8 i$ K; c
    Loop '循环搜寻
/ E5 K* U" Y, Z) V
8 w) d/ l, Q4 Z0 f; e; GEnd Sub9 j* m3 t( ^6 H- k5 e  k/ Y
0 W$ ?# p. X+ E
$ }- r5 Q4 p4 {7 o* z
发表于 2024-1-7 12:50:21 | 显示全部楼层
能提供你成功运行的一个代打为参考吗我的一直报错
: ?# x6 O3 K$ H9 G" V+ a
* o1 g0 p1 Y8 T* f) L/ l
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-6-17 17:44 , Processed in 0.066469 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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