机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 醉生梦

solidworks 批量执行宏

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

使用道具 举报

发表于 2021-9-29 15:35:14 | 显示全部楼层
有个使用场景,现在我使用的图号分离宏需要打开零件才能进行属性修改,每次在装配体里多修改几个零件名称或者新做零件就会忘了改属性,如果可以批量打开零件,然后中间插入执行图号分离宏的工具执行,就可以自动帮我一次性修改零件属性了(但是俺不会写,有没有大佬帮帮忙呜呜呜)
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:05:46 | 显示全部楼层
Dim swApp As Object) W! l1 h% d' w: {* ]2 [
Dim Part As Object9 t0 K- c% M* i, a0 T; E; g1 u5 z
Dim sldPath As String) Z+ M" `" t) _1 M( P" V

9 ~1 [- Z0 I+ bDim boolstatus As Boolean
, C* a3 \! q" r  I! t0 S+ bDim longstatus As Long, longwarnings As Long1 a* I0 |" Y6 D9 c' A
4 h& O* s3 l& z! O
: d" {% u  f# p# ~$ ]& }
$ F: P; ~% T& t& b5 h5 H4 Z7 L

0 D' D/ A$ q/ t4 \: D. l+ [# N3 HSub Test()& F  y8 x1 {: D& q2 n
Set swApp = Application.SldWorks
8 q9 V3 u; P7 _6 c! A" [sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
6 N* J2 W; G4 ~9 T- D; W; _
! _0 W) v% n* [9 PswFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称7 p3 v, _/ l# n* {) ^2 ?
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1* e4 G6 ~: D/ a- ]  O7 P
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
6 m% ]) ?, h6 Y5 {
4 M$ {5 w% X/ }2 p8 M  s; ODo While swFileName <> ""
  ^9 f3 A, l# n% `" Z: A- o# N: u. M$ c& _8 O( }
Set swApp = Application.SldWorks0 `+ B6 m2 A1 ^9 A
, j2 p0 K& x, x5 Y
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件" Q  [& u' v) D$ J$ y

8 k* _3 h3 _" e* b- mSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
( C  n. I* h. J; @% U7 |) m7 I
) I- q' k; V; C" C3 N
4 m4 Q$ Y8 _/ b* ]+ S6 O3 U% F2 y

: w* |9 v  r: A* b
" ~. ]+ N4 u- n3 o5 VSet Part = swApp.ActiveDoc6 E" k2 U1 Y: g6 U

% j* A! Q3 K5 @- ~Call plmain; \! z* g/ n& U) u' K$ ]; I

, ^" f; s$ c- B' c9 `% d* n! W# ^  R9 X& ~3 J2 U& U9 [* q
'
( l5 ~: @" h. w& b/ E  |8 [+ O6 \0 o6 `: l) J8 [6 B

; p1 w/ W, g) G; `- f2 d  n: j: ~4 G0 B) z0 b. ?
Part.Save '保存%
+ G( ^1 v  C6 Y6 f; lswApp.CloseDoc (swFileName) '关闭零件8 M" z0 B4 q) U- p- j, s
/ s4 `( [% w. D# D# ?% [+ S
If swFileName = "" Then Exit Do
3 v0 L  Z. A. J9 b2 ?1 r6 T+ D/ u6 I7 [' s1 L) `/ t
4 t& a/ x. W4 X1 l  X# @, q# I5 y
swFileName = Dir '搜寻下一个零件档案名称0' d  b% E4 f: p6 ~% m& l# D4 \
" x- X& F8 E& Q& c5 G$ a
Loop '循环搜寻
5 H: n  R. V& L8 h6 F/ K# TEnd Sub
8 `+ @2 P* E1 @* u) s/ J( ?按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:06:58 | 显示全部楼层
Dim swApp As Object# r9 e+ b9 c; ]" B
Dim Part As Object' B- X6 q; v2 s  i5 C5 ^0 t0 K
Dim sldPath As String+ K6 Z2 H1 m* Z
6 I. F% a. L! B& J( `3 t
Dim boolstatus As Boolean( G; w3 A0 y4 C3 x2 }! t4 O
Dim longstatus As Long, longwarnings As Long
+ K  r7 g! f/ t% i: O  y' g  w
3 j8 r' _0 W  L. n0 q9 Q6 |) |& R1 t

. E5 d: |8 E3 n( M; S4 X
, ?( |3 E3 U" E6 }3 y0 Q0 cSub Test()
1 U+ B! u+ y  k9 E% t, VSet swApp = Application.SldWorks- ~2 {& V/ T$ D6 `- {
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录4 X7 a6 A1 t3 V) z5 i

1 A: o3 H0 l4 ~6 z! w/ U) SswFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称& z2 V, V8 }9 ~
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
6 V: D  J! I7 B* @If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
! _7 ], R- e. u2 w* z! V& K. F+ J) n' O0 B* f3 x& K
Do While swFileName <> ""- P( A6 Z' s( Q# y; v

* l' w+ R# X; YSet swApp = Application.SldWorks' _! {5 W- n- p% D' y4 |" t  n
. d2 G4 o+ d, C* X2 K6 h; k4 Q
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
: p7 J0 [$ {1 m7 s6 ?# ?2 q( }8 e4 q7 P2 X5 M! }# }
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
8 ]' s) ]* {8 P+ W( |6 V. m( g
- u  K0 y  ]5 I
. N6 o( j( E+ A: X: {5 K% `8 k; Q3 i% _( ~) _

/ G8 P6 h' D+ ^( d
0 m) n) m( l; PSet Part = swApp.ActiveDoc3 {% ^% a, m8 ^2 J

( E. ?3 _7 ?, A6 I5 ACall plmain, J" U- }! F, C) z. d) }

0 j3 T% [' t, {' w: M5 ]! p8 i- L0 I$ v* J
'% }2 `$ u! \' V6 f) M$ H6 D, H

& b- J* x8 j5 q) n  }! v; X% `$ o( [1 g; K9 e3 |
: I% p% j; S+ B( d, p) |
Part.Save '保存%
* @5 |* ~6 _8 K5 HswApp.CloseDoc (swFileName) '关闭零件# r# P: t. U! P) O9 s; i

  T( M+ S0 y% _. Y6 {1 CIf swFileName = "" Then Exit Do
( @$ J9 j9 H% X( |6 y1 @3 ~/ ^# @( `6 @7 R1 h( J& ?
: X2 m/ R# u) p' V
swFileName = Dir '搜寻下一个零件档案名称04 j) K, b' [+ e1 j! b
2 T4 K. R8 N  w8 @8 t: I- M& {$ }
Loop '循环搜寻- X8 p- |2 W, e, W7 u+ r7 ]0 U
End Sub
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:12:10 | 显示全部楼层
Dim swApp As Object2 g  r- q* m3 _6 o" t  Q! R
Dim Part As Object/ T! y8 o# A* V5 i
Dim sldPath As String7 m4 i6 @- U( \; ~
Dim boolstatus As Boolean; n6 T( t8 q* |- q0 }$ t8 U
Dim longstatus As Long, longwarnings As Long
/ o9 X' I# }* \9 W4 v& u; GSub Test()
6 f* E) O' w; `& zSet swApp = Application.SldWorks
1 Y) y# G# w( m- SsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录3 a8 \6 Q: f- J/ i: f1 N. J+ q0 S4 B$ e
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称8 Z$ D! k# Q* l, V
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
7 C. D0 j: @" I0 s  A, lIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2& v% y, D: {4 S
Do While swFileName <> ""
3 [. F5 o* v6 M/ R9 i5 I& V. ESet swApp = Application.SldWorks
( N! ~4 c' M* z7 T'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件) K  W! x4 R5 A
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)& R( h& A  e3 i* Q4 m' }
Set Part = swApp.ActiveDoc
7 S- O8 W/ F' U+ ?# L; LCall plmain% C! p/ e4 N% y3 {9 K
Part.Save '保存%
0 q, M" c7 f: W* w( I% `! o5 @8 vswApp.CloseDoc (swFileName) '关闭零件' t* A5 y$ T5 A0 P4 B
If swFileName = "" Then Exit Do0 n9 o# b, Y5 E
swFileName = Dir '搜寻下一个零件档案名称0; I- f, i3 z& i- M; E1 J
Loop '循环搜寻& a; H5 e0 _0 M. }0 L
End Sub   老是被跳过
回复 支持 反对

使用道具 举报

发表于 2021-11-28 13:44:09 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05- \2 p4 N$ i2 E2 p0 X2 j7 o# B, h6 ?
Dim swApp As Object
) F5 O: y7 b6 j+ W0 zDim Part As Object
) K8 P( Y+ I2 @6 Z- Y. pDim sldPath As String

- F( E. b2 {; E  M希望可以得到解答6 J* ~- J! [( m7 f! l/ ?+ t
回复 支持 反对

使用道具 举报

发表于 2021-11-28 13:45:15 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05
7 i( G: k; d. u7 Z& D% d1 BDim swApp As Object
0 J& b, i+ ]% m# b* S. G0 u3 JDim Part As Object" E5 J( G$ ^9 J7 q. U4 Z4 u( z" r, m
Dim sldPath As String

: K$ T: x- `  P' C- A; G2 `和楼主一样打不开装配体3 i. m0 E5 ?" |& b4 r. i
回复 支持 反对

使用道具 举报

发表于 2022-2-10 23:22:01 | 显示全部楼层
多少积分可以分享
回复 支持 反对

使用道具 举报

发表于 2022-2-18 10:31:55 | 显示全部楼层
kbisi 发表于 2021-11-28 13:44( q) h" f% }- B" @& n
希望可以得到解答

1 r( E! P2 _& H! \  I! v4 l  H' P无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。
8 S1 B. j* u1 D经过测试,下面的程序可正常打开零件和装配体  z7 d7 Z9 E$ r# C2 b* T9 \
) j  D2 I) s' m
' ******************************************************************************
: K2 j5 W4 j+ e, v8 _! R6 V2 X' 读取指定目录下的Prt/asm文件,关闭
6 S; k+ L/ y2 L* i7 o/ r, w, k' ******************************************************************************
8 H# n5 {8 d+ Z+ ZDim swApp As Object
3 m3 ]0 T9 F# f1 [% M7 q" z# L* o1 b2 [6 O: c' v4 i
Dim Part As Object! W9 T- x2 o, M) U
Dim boolstatus As Boolean
! o) m6 @& i- f  f- z' JDim longstatus As Long, longwarnings As Long9 e8 }6 _+ w, h+ }2 N4 P% R( M
'Dim sldPath As String$ M) F1 d5 u8 J3 k; j! B
Const sldPath As String = "E:\3Dtest\BOM1\"  '设定目录/ S! y/ E8 m9 v6 p

( ~5 |4 Y- j8 B/ ~Sub main()
$ x- c. c0 @$ b3 P3 R. ?) j, p
/ R# J+ H0 c" c1 J    Set swApp = _, x9 c. G% k  k6 S: W! c
    Application.SldWorks
9 ^" i" V2 ]' G6 F    Set Part = swApp.ActiveDoc0 }$ _# ]. d3 b( x
        
2 l9 v, I! ^: C! @1 R    swFileName = Dir(sldPath & "*.sld*")
/ j2 K, C9 J% n' P+ f
. }4 Z3 S" C8 T  Q    Do While swFileName <> ""
' H# R- n. G+ t4 L6 R9 e0 j        Set swApp = Application.SldWorks
' Z& y9 x3 V" k+ K, I' k        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 13 R2 p' R3 [8 v( {1 q% f! n
        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2' P0 r1 }0 K0 s/ z+ _  r
- N4 W2 K! {+ s$ p8 i4 O' x
        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
' d* w5 }0 h0 [5 G2 |) d- l        Set Part = swApp.ActiveDoc1 S, U0 L% f! h- B1 f% h
        'Call plmain" m: f% w0 g: J; x% u
        'Part.Save '保存
: }% b2 c* i6 S6 g        swApp.CloseDoc (swFileName) '关闭零件# G/ B0 C8 b* y+ T3 q
        If swFileName = "" Then Exit Do:+ |' e3 ~% H" w  B
        swFileName = Dir '搜寻下一个零件档案名称( k* p* J8 t# Q1 v- v; i
    Loop '循环搜寻
/ ^; M4 n4 ^! A) K7 |6 L
8 L1 [& p4 Q( ^1 J- D7 d# yEnd Sub
! L4 K$ M: O; g, f9 ]# z
, B8 u3 V  @1 Z! h$ x
" U; k& T+ @+ p& }" i3 T
回复 支持 反对

使用道具 举报

发表于 2024-1-7 12:50:21 | 显示全部楼层
能提供你成功运行的一个代打为参考吗我的一直报错
( u, D  r6 `, x. P. o" r
9 k2 K* C9 Y$ b4 \1 b; K
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 17:49 , Processed in 0.055748 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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