找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 醉生梦

solidworks 批量执行宏

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

使用道具 举报

发表于 2021-9-29 15:35:14 | 显示全部楼层
有个使用场景,现在我使用的图号分离宏需要打开零件才能进行属性修改,每次在装配体里多修改几个零件名称或者新做零件就会忘了改属性,如果可以批量打开零件,然后中间插入执行图号分离宏的工具执行,就可以自动帮我一次性修改零件属性了(但是俺不会写,有没有大佬帮帮忙呜呜呜)
发表于 2021-11-28 10:05:46 | 显示全部楼层
Dim swApp As Object9 ?# b  w) e3 P# x4 S
Dim Part As Object
  f) X, w) w/ a; _, hDim sldPath As String$ h2 [; f3 y% [+ k' x, ^
. v! j& i( {2 }1 ?" ~3 c
Dim boolstatus As Boolean
) y; |8 K6 ^* L4 E6 TDim longstatus As Long, longwarnings As Long
1 W; `" s, R% j$ c$ m+ @
( C6 G8 x+ ?1 ~1 y8 j0 v- ^% [7 |" \
5 Z# G- `, W9 x2 c: E

, F" `. K( y& y3 g+ D# @' cSub Test()/ S. b; |* H% c) ~- e- z: z
Set swApp = Application.SldWorks
9 u7 r* l  z/ a/ _- EsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录! C6 `# U. \" i

3 _. q0 V6 x9 e# Z  Z( bswFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称) ^" W( z# l0 u8 r/ t# [+ B
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 16 b' a1 N7 d. Z( V# F2 E- `" D2 }
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
1 G9 j8 u* T: V' x# r( \9 `
* L; S' y; @9 D( w" U# NDo While swFileName <> ""
- v& ~3 E! b* m( f+ x* j* [
( G) ~+ X6 |& |Set swApp = Application.SldWorks
# q0 W+ B+ I7 w) H  C( }' L7 V3 R, u4 p! j" U2 Y% _  d
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件$ l) K/ S2 D9 s7 P: `8 F$ o
5 T3 w! l% D& h$ N* v
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
% K7 W( r* o0 `" r1 U" W) C5 s* p4 r. R" f/ k- E9 G; s
5 w/ M/ X; K# g" y$ U6 L

) [/ y( q* M) G$ I5 y
7 M% S. n: H/ {8 _
, I1 x1 `2 ~7 S+ @3 A# W; }Set Part = swApp.ActiveDoc4 E! c# l8 h8 H0 ^. |8 z

& P7 ]0 O- A) H' DCall plmain3 S: r6 S4 w6 s4 k

: d% A; I* Z6 D" s  M7 ]# |6 d3 D; ]1 A" e  \
'
$ y% y1 B- z+ a
& j+ I4 c$ F9 ]' I7 q+ R- p8 n3 C
* _4 |3 E& {; N% B% U) Q9 H
Part.Save '保存%3 b3 r  N& P$ B. n
swApp.CloseDoc (swFileName) '关闭零件. ~. h  l  c0 P0 c! l" l# Z4 B( Y
) H4 Q, X: z9 W. n+ a9 p
If swFileName = "" Then Exit Do
% Y7 a2 Z# Z; x. a7 w. Z
, [6 \# ~6 H$ F% W- k9 P, Y5 B9 p' \. J& }3 y0 Q3 H
swFileName = Dir '搜寻下一个零件档案名称0
2 R. Q' V4 f. G# @6 V1 P3 f3 x8 x$ v) q, a( n
Loop '循环搜寻
4 P2 }) N! R9 k  bEnd Sub
( U% H+ S5 L) d8 I+ k: E, l% @按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
发表于 2021-11-28 10:06:58 | 显示全部楼层
Dim swApp As Object# f" ^& x) |4 k  |! Z
Dim Part As Object& g& h5 N1 w$ g. h3 q
Dim sldPath As String8 J% t3 l' s' J, n& r
( {4 f8 j* b/ X8 p0 A
Dim boolstatus As Boolean
7 k4 c6 D# P" s$ m) m& TDim longstatus As Long, longwarnings As Long
. ^( I) n! \- t6 {; X* z  z
. z. n7 `% a$ Y# h' y1 H: D( r# A) g' y7 e' @1 N
4 [& y2 c1 k: D- I" }

4 g) P' @9 X/ g. [# t* g# `Sub Test()
2 L/ N1 g4 P1 kSet swApp = Application.SldWorks2 F, C& C! O2 F- [- Y- u+ Y, L
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
) _& M; K7 l* z7 T9 q+ @- B1 W. Y8 l: o7 b# D
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称+ ^1 i' j9 G# w9 M3 b! |) s
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1+ n$ G& A% u4 z" V: y( C
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2$ @; z# D- V6 q9 x2 X  {9 S! k
" ^( P! p6 g4 c6 h* Q
Do While swFileName <> ""; J0 [4 L  I0 A; x8 d7 s

2 I8 y0 G$ R6 r) N- XSet swApp = Application.SldWorks+ r8 u0 C8 ~" p! n

7 v( X& v7 {% @; K% c" ]'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件: M6 X. ?$ K6 G; I/ v. d. K5 j

. q" f" N1 J3 d" o0 I5 O0 ^& LSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
) A3 `5 y/ ]8 D; O$ T- V  ]+ i; p* [" U5 `( V8 C) B/ l& ]

( ]/ K6 ?9 f" S. Q8 j' G$ l
) e' ]- N8 d1 h! `0 S8 W0 k
* m9 v- T* ]1 j# M, e8 c
6 n! E6 Q5 V$ h$ [2 A5 nSet Part = swApp.ActiveDoc6 |2 b& ~  Y4 \5 C

3 c) D& z. e* V# K( mCall plmain
1 }# ~; C1 B& s, k% B  m( o/ f9 a/ k! Y! I" Y. X" ~

2 H( l2 ~9 B% `5 @6 n4 P9 O( D'
4 i5 D( K% b  \+ R4 k9 N4 z4 x5 T! [

: x& w8 b8 ^5 w! X* H4 s1 T- L" h9 A& }3 f3 u' v  R
Part.Save '保存%" q0 w7 N1 T5 y) c" J6 C4 M
swApp.CloseDoc (swFileName) '关闭零件8 ~& K9 e5 v6 A' X

+ B& {1 a4 h3 G6 x, G* K9 a2 NIf swFileName = "" Then Exit Do4 I, L5 {2 l+ L+ D3 q  q$ w4 ~
* x5 H7 D! c1 n& c
1 y: i5 ]  p; K9 O4 d
swFileName = Dir '搜寻下一个零件档案名称09 y/ A- i3 \- U$ R* l% N( _3 ]

# t! e7 c9 G& W8 {" p3 k4 HLoop '循环搜寻
! _; O/ s% S2 v  Z% g5 sEnd Sub
发表于 2021-11-28 10:12:10 | 显示全部楼层
Dim swApp As Object
7 O) Q) j* W8 B) @  p0 M. \Dim Part As Object3 Y5 S; E: B/ `1 ?7 c
Dim sldPath As String, n; w7 r4 B# c5 Q0 w
Dim boolstatus As Boolean7 n2 h9 ]+ T! G$ J5 l& Q
Dim longstatus As Long, longwarnings As Long
2 ^5 J+ _! k# P8 R) n* DSub Test()
" A+ p" W( I4 R6 _Set swApp = Application.SldWorks
# d! o5 o  a9 Z+ L7 ssldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
6 e! n  h9 e2 D* l- lswFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称- i! U# R' i5 X
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
+ t7 {! Z( A4 \1 t2 K# HIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 22 x' k! e# i1 b+ i: X/ e
Do While swFileName <> ""$ d( E" K4 J" @2 g5 A# l
Set swApp = Application.SldWorks6 u4 T' }* R5 e+ V* M, d. J
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件) g: D$ z9 n; ^5 X+ c) A. @# ^
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
3 ?; d. D4 N  Y/ JSet Part = swApp.ActiveDoc
3 E1 e/ M# T  l- X/ [Call plmain4 |0 Y  [( C: ~
Part.Save '保存%( v" y6 N* E8 q* Q5 @( |) {
swApp.CloseDoc (swFileName) '关闭零件
9 u5 \% j; j/ V+ ?( RIf swFileName = "" Then Exit Do$ g  @! o3 l! n& X6 V9 h
swFileName = Dir '搜寻下一个零件档案名称0
; t. U, m: |8 M8 ]% n$ I$ aLoop '循环搜寻
0 ?1 I5 Y7 U- a3 q, MEnd Sub   老是被跳过
发表于 2021-11-28 13:44:09 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05  D- r; F% m1 X4 ^9 r* C
Dim swApp As Object4 P4 L5 r, l: o
Dim Part As Object) O( {6 {. W. G8 R7 B( J+ P" y) B
Dim sldPath As String

" Z) V+ [: i, T/ f) z希望可以得到解答
" b' M% i; |; Z% Y2 a. y% U
发表于 2021-11-28 13:45:15 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05
3 M% o9 ~3 G% A& ADim swApp As Object( h- d6 y+ L! T  o* X, |. s
Dim Part As Object, B" u) i9 |- Q: z4 V# ^$ C  w
Dim sldPath As String
9 g4 P/ {' U2 Q# z: A
和楼主一样打不开装配体
) o( p7 U" {1 j3 y
发表于 2022-2-10 23:22:01 | 显示全部楼层
多少积分可以分享
发表于 2022-2-18 10:31:55 | 显示全部楼层
kbisi 发表于 2021-11-28 13:44
8 r5 r$ t& f" X; B3 J+ ?" E, y希望可以得到解答
" Q) v* _- V5 u! ~& u" ~- c
无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。# C( F2 s) h; B) Z# p
经过测试,下面的程序可正常打开零件和装配体
' L6 M; X8 ]( j  V6 _0 H* y# ~
5 E) P* k+ k3 z, j' ******************************************************************************
4 e. E  P# i, a$ L% N' 读取指定目录下的Prt/asm文件,关闭5 f' B% _4 F6 Q- d& X5 {
' ******************************************************************************6 F- S' t( J2 }/ B. _" h7 s
Dim swApp As Object
" o2 R1 c5 ^4 b6 f6 m# p# w
- |. I) B/ C' o' [( F2 c* A( tDim Part As Object. H4 `5 m0 u/ E- v# {" s
Dim boolstatus As Boolean
% L; j; ~- G$ k+ T% s/ n3 A# W$ hDim longstatus As Long, longwarnings As Long, }! O4 }: Z( j( p
'Dim sldPath As String3 X" d# o& y5 k  @5 W
Const sldPath As String = "E:\3Dtest\BOM1\"  '设定目录' b" u0 O& d. X7 K3 B+ G! X

, a+ i! z! @- zSub main()
( N6 O0 e; ?" U
% e$ m+ E2 m; ^: b) \    Set swApp = _& r! ~/ e1 t' {, R. ^" O5 D5 C
    Application.SldWorks, o, \8 z) _% K- n% f1 {. [
    Set Part = swApp.ActiveDoc
# g4 h( [) ~% Z& j0 o: ^        
8 J$ o- l9 r- [5 w- v    swFileName = Dir(sldPath & "*.sld*")
3 H1 B- y+ n5 G: b4 D: _: l) w5 b9 W; N- D1 d6 j, H5 [
    Do While swFileName <> ""
/ T/ Y" z: p3 O; Y9 {+ C        Set swApp = Application.SldWorks5 V& K* K, K, {/ S7 S  u
        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
- i. j* V' z; \+ s4 ^' F: g* |        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
( i  R/ L( u6 K  L3 X+ _" U% ~7 q9 Q: j$ g2 t
        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
4 P, C8 Y+ u1 q6 L5 S! B( W, l        Set Part = swApp.ActiveDoc
- h9 G/ x+ x2 q* U# r% d4 {        'Call plmain- X6 i0 ~" {2 @& q1 @( d* p
        'Part.Save '保存+ E. M& ^( D3 B. P8 `9 ?# q
        swApp.CloseDoc (swFileName) '关闭零件/ i1 P+ e1 D  R
        If swFileName = "" Then Exit Do:
, Z2 H, j6 z- G        swFileName = Dir '搜寻下一个零件档案名称
# f( l; m! V, T! G' S    Loop '循环搜寻- {& s9 t% v7 ~
1 W+ [: ?4 _6 B- V  G  L# X. q
End Sub7 g3 |* U/ ?, o3 G! f) ~  V. W
6 S" p) \( J% g8 b7 ?

0 E- @! H. B0 _1 a8 \, R5 [
发表于 2024-1-7 12:50:21 | 显示全部楼层
能提供你成功运行的一个代打为参考吗我的一直报错
1 k3 w: R2 H% |" e' V8 ~% ?' a" d4 W4 D- p$ T( F+ }' N
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-10-15 12:50 , Processed in 0.061058 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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