机械社区

 找回密码
 注册会员

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" L. R, o1 X2 w
Dim Part As Object
2 n/ z. O7 e' U, E6 `" UDim sldPath As String
! e8 X% r( j* Y- ^$ Z
$ V5 K5 z6 p! }" J: ?- V' G' A2 JDim boolstatus As Boolean
3 h  y2 r' L3 n! nDim longstatus As Long, longwarnings As Long1 k# V( v& y/ T# e1 _
7 l) i  @, ?4 {( P2 F% A9 l
  S1 o. o, S9 |0 e# y

1 Q- T5 K" f) D' x9 W5 G1 b& D$ W- R8 ?0 e  \$ J' b
Sub Test()
' s" d" L5 X" a& E) RSet swApp = Application.SldWorks
( I( W# z/ I9 S* U3 `sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
. U8 A2 F4 E7 b% x) B- D  {5 @1 h+ `3 R/ j- P" S
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称5 A, r5 Z2 C- O7 M' v1 @
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
' Q4 K: k& j% x* iIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
7 E" J+ d/ m1 g$ W6 E" M2 Q" o5 K- ~" w, j* A  d, e: H
Do While swFileName <> ""& t5 [. O7 H; n; q- F
# P4 P8 ]# g1 l& N  l$ F# k
Set swApp = Application.SldWorks4 m; p: s# {; ^- \, I& g
$ J1 n3 [+ P$ ~
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
# [' j0 j: Z7 A" u, ?+ r2 I) @, q% }% ~
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
, R. j  A9 C" ^8 u; i) J0 d( f  g

4 ^  T5 B7 G) j: Y8 F8 N3 _8 C( y5 ^( J# E9 ^

! j& `, u, h1 X( E) c! V
* H. S( c( [! C( q& D+ rSet Part = swApp.ActiveDoc& g; [' g* w9 v6 j4 m+ \3 O' o
. y* ^# S9 J4 P1 L, m- r
Call plmain- q& ?* @' P) k( g' b. N6 x
+ k& r0 k" U7 r# D+ l6 l
  a) w6 K  t. k  M& q. [! @+ k
'" h. r0 G& M3 t" {' }8 H) }
2 W! }7 W* k: L  N" g& l

0 Q- V6 r8 ?; W' {; l& A( h5 N( F% Q+ r! X, q& y; c
Part.Save '保存%* S. `, F& O' J6 c7 O! U$ {2 L
swApp.CloseDoc (swFileName) '关闭零件
4 l9 x: b% g5 `# @3 z( A
6 {; D( P2 }; Z2 O2 D+ mIf swFileName = "" Then Exit Do0 Z4 m' d$ m3 S- e9 a6 @1 g& |. I% `
- U1 t6 C+ |: _2 P1 z8 p

. Z$ ?) |! L8 g3 GswFileName = Dir '搜寻下一个零件档案名称0
! x) D5 ]8 o' f. l5 s/ c  U
& x% t6 S+ H# f* m( X% ]  {Loop '循环搜寻
2 f- q" @) S9 j( |7 NEnd Sub
2 D, |  w) _, O' S5 c* S按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:06:58 | 显示全部楼层
Dim swApp As Object1 F- b0 Q" m+ O+ r% D
Dim Part As Object
6 o0 z6 m* b. c: x/ eDim sldPath As String1 c% z" r# f" ?  w4 X* T. A
, y. f. z) w" d# |2 L( m7 C7 V) j
Dim boolstatus As Boolean
: f. n% J7 ^  O2 ]. ~" JDim longstatus As Long, longwarnings As Long
( W( V( L) d9 Y8 q' p) ?! N+ z

1 B1 }* Q7 n0 ]- t/ e
( g  F! f% ~3 g2 Q
! Z4 P, ?) ^! ~1 Z* gSub Test()
9 t5 F; @4 M* c  sSet swApp = Application.SldWorks. Z! H3 _& g4 Q4 l1 b# p: Y" U
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
9 L. E6 b4 U5 m' M
4 i, u# B: h0 k! Y2 p$ vswFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
4 q$ F5 H) T3 A* n& IIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1# Z  ]4 y5 M+ U: a6 D8 H* ~, @2 \2 V
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
$ i5 r: h3 U9 f; x# I; m& Q% Q  e2 G
Do While swFileName <> ""
, O& H9 I; {9 d2 |' |8 `# @5 a* z, @% W& y
Set swApp = Application.SldWorks
5 |! q8 d; F: Y! B. G- x. ~4 a9 q* T( R2 C: D
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
0 A- p" F& `, A. |& P3 ?
( P3 ]( L, L( k' lSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)6 J1 ?  Y  }6 d& U6 U

2 U4 u+ X, {( G; `) x  ?
  k4 D9 _+ q/ R% G3 l& S4 s, X  ]2 g' ~5 q, N/ S+ L

: t2 Q7 B: {( c7 i) n) N" M( x% c/ }. Z0 o% q" O' w
Set Part = swApp.ActiveDoc
" {" x+ H  a1 k8 Q3 o9 H
/ f0 z$ C. l" X( lCall plmain
" p* f1 w8 |4 R9 |: Q
, _. Y: i! X" h, g" z& G) [# Y: h- y# B7 Z1 @$ B
'- y, t  ?5 ?. w$ p6 ^6 [9 \
& J3 y- p1 K: w% H! f
! k. `- u+ V' `$ m$ s

+ t8 k1 X' n: g( s( ]Part.Save '保存%. M. p8 f& T( {2 U: ?3 v- N
swApp.CloseDoc (swFileName) '关闭零件3 Y) w8 R3 x6 [9 G4 }
( L  [4 m4 c! [+ l9 I  F
If swFileName = "" Then Exit Do3 L  U4 \0 {: W1 r& R

5 I2 p- M  u9 H* n4 \& y0 [" {
+ \/ z5 h4 n+ J! s- `0 U5 W4 J- D: W3 yswFileName = Dir '搜寻下一个零件档案名称0
7 x" Q% Q5 V; }7 p. _
( m4 g( c' H# b  \1 \; R. SLoop '循环搜寻% |/ k' Y  n8 a6 I  L7 w& y
End Sub
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:12:10 | 显示全部楼层
Dim swApp As Object7 A/ h1 L2 s, F
Dim Part As Object$ w) f% V" c0 O/ g1 F
Dim sldPath As String! @4 @4 I# \& _! b1 D
Dim boolstatus As Boolean
0 U6 \- d( h$ M- B/ bDim longstatus As Long, longwarnings As Long
1 m/ Y: _  T  a9 R5 s2 F) J! SSub Test(). F% |( p' M( \6 f0 M
Set swApp = Application.SldWorks" |* i. z- W  T; Q- F/ Q# d
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录$ R( x" d* \/ [, B. n- y8 H) t$ {
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称4 b: [: W7 \2 N/ J3 p
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
5 ^# U( [) X3 i* t4 u& N; |$ ]If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2- O, E! |. U) o. }: K
Do While swFileName <> ""
* F, d2 m4 ~0 S- i- tSet swApp = Application.SldWorks: H0 Q! M3 V; x; ~7 W1 J6 ?7 J
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件/ w9 a. u" ~: u+ W5 a7 {0 d. m
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
. x* Q- t6 W3 s9 U; {8 {1 h" t. bSet Part = swApp.ActiveDoc
: Z& p# B4 L" b# y+ WCall plmain5 x4 n! j& a: G( @
Part.Save '保存%5 K& ^4 a3 q/ X+ D
swApp.CloseDoc (swFileName) '关闭零件
  z) U, ~, m/ B5 o8 v& cIf swFileName = "" Then Exit Do
! b) X$ e+ L; \  iswFileName = Dir '搜寻下一个零件档案名称05 c& d( r, V+ ?/ j% q
Loop '循环搜寻
/ _6 v- I1 p* C6 A6 \4 WEnd Sub   老是被跳过
回复 支持 反对

使用道具 举报

发表于 2021-11-28 13:44:09 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05
& v: I! d+ T, z* M" f& d8 g! L# i# jDim swApp As Object
' @+ {4 d. X0 |) x) ^Dim Part As Object
) Y- S& ~! T" d' wDim sldPath As String
7 m# r; x9 q7 b2 h% {
希望可以得到解答4 P4 e5 F' J* P' s, N
回复 支持 反对

使用道具 举报

发表于 2021-11-28 13:45:15 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05
8 F6 A& v! ^% `4 r' e, U0 l2 H  ^9 NDim swApp As Object7 {2 D: z, f* J( o/ k6 L- M
Dim Part As Object8 f" _; `6 ]$ A3 s" w
Dim sldPath As String

- g2 G) d- |+ M( K& b和楼主一样打不开装配体. g5 s4 Z4 z, e. p( z% l1 d
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2022-2-18 10:31:55 | 显示全部楼层
kbisi 发表于 2021-11-28 13:44
6 s& e  \$ ~( \- R5 }4 `希望可以得到解答

) Y( K$ t4 d' Q# K无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。# T+ |( S% ?3 ?: h' X$ K
经过测试,下面的程序可正常打开零件和装配体5 M7 _% v# x1 Z8 ^
% p0 o9 c$ D2 p; S% y
' ******************************************************************************  @7 ]$ C2 k: l1 j+ r* f
' 读取指定目录下的Prt/asm文件,关闭
' w) C% e. \0 Q; q+ O! f' ******************************************************************************: q& F1 I1 \2 p$ \. w
Dim swApp As Object  K, j5 U$ C5 g  C3 t

9 d# n! D" ?9 R! ]: HDim Part As Object
) W! u4 L' r& S8 U8 |Dim boolstatus As Boolean  P6 G5 S$ ^( F/ c5 D  r2 G- I
Dim longstatus As Long, longwarnings As Long8 A, P4 Z: m8 T  I; X, S# f
'Dim sldPath As String, t; P& M1 J- o- e1 Z! c2 P
Const sldPath As String = "E:\3Dtest\BOM1\"  '设定目录8 q, b- X: [" z3 D" {

2 Q" g+ Q* l% ~# u2 u( HSub main()
8 d+ m# C' `5 s# H3 a% g$ M: j4 K; d! K7 S$ h
    Set swApp = _1 m7 N& t4 N( z9 T9 e5 c
    Application.SldWorks
4 n: o2 y9 G9 z% L! a/ A. h    Set Part = swApp.ActiveDoc, Y0 T3 j% L0 \  q+ g* F% @* T: f, L
        
% n0 O* i/ i- r    swFileName = Dir(sldPath & "*.sld*")   R% B) r" ]1 l; r7 ?: k0 U

: x5 \# z8 a1 N# u8 K    Do While swFileName <> ""/ f  r2 g0 k! M9 r( L2 r. k0 D" E( z
        Set swApp = Application.SldWorks
" a/ U& X3 ?# ?        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
/ K! S6 V/ d( o" r) B  c        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
5 ~7 O/ [( q5 Q3 }+ c0 P" H5 M) W6 E' _& D4 G  D) A: W# X: r
        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)) u; O( j) S9 S
        Set Part = swApp.ActiveDoc. [5 x$ r+ U9 L7 l0 {! h/ C) E
        'Call plmain6 h- M8 A  l2 C( M: y* k; W* [3 W1 j
        'Part.Save '保存7 O0 {" m; Y' w) q9 E
        swApp.CloseDoc (swFileName) '关闭零件
/ L  P$ S4 z& T4 E% h5 x: F        If swFileName = "" Then Exit Do:
+ O, y+ e4 J; x* e6 s5 H' a, T        swFileName = Dir '搜寻下一个零件档案名称
: a7 D8 }' {1 V    Loop '循环搜寻4 i" ~* V, N' [; b9 ^2 Q

8 \2 r: K6 h1 s7 X8 l, JEnd Sub8 I, Q% T- Q% q; x1 {& R
4 Q; b% [$ R/ c+ H
, n' y' M. A" B, |% w" B
回复 支持 反对

使用道具 举报

发表于 2024-1-7 12:50:21 | 显示全部楼层
能提供你成功运行的一个代打为参考吗我的一直报错
5 I" k" s- `& b1 X' r  l  w0 }) u8 A2 H/ G' s
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 04:56 , Processed in 0.060829 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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