找回密码
 注册会员

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+ U' d( Z( \# mDim Part As Object
4 n& U0 X- R2 ~; G$ ZDim sldPath As String0 E- F8 ~- m$ \* W; O
) C' G9 U; O) u6 B0 Y% |
Dim boolstatus As Boolean
2 S$ N- E+ F' _% |" ^Dim longstatus As Long, longwarnings As Long
' d2 S% ]! J  f# W% A9 o: V. B, }8 E5 ]; h  |  e- B
& o( T' F9 [" m+ J. d- r7 ^
6 q) H1 z; q, M
  d0 |! a4 {3 k* A; H6 x
Sub Test()
6 ]( D; p# l2 l! O/ E3 USet swApp = Application.SldWorks0 Z. v( [' ?# h# c/ s1 a6 q
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
: s5 e5 Y* Y, a: L8 u' ~& d! W9 _/ ?: H/ A: i8 r- ~$ Q* B
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
( \2 ?8 S) V* G/ y( vIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 13 Y+ d5 x. S/ ^# t' N
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
/ M- f1 R0 }+ r) v: C( H) S; W  |2 P
Do While swFileName <> ""- e" T- U4 `) [) \
. G9 _0 ^; W* i& K% T6 m. _
Set swApp = Application.SldWorks
" p* E3 K" a$ E
3 B1 R. z6 u% e'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
2 S- V& [( X' F: @, n. |/ |4 a- g$ y& s
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
. N0 A0 |8 [% w9 \2 b' G/ M4 y5 Z2 ?
! N; }% E* h, i, @( m4 C' S! H
7 C/ K- F8 E1 M8 T
* V. r9 k) m6 ^: X* S
0 S" N% p* Q2 |  P& P" }/ V
Set Part = swApp.ActiveDoc% ^. B% r4 C; F4 i$ s3 {9 ?9 X

/ [9 X1 u  }8 B, t: RCall plmain
8 X, R; Q6 Q- V. `: p% y# f# d2 a% Z7 s" O5 a# g; g- F2 C3 F
9 x- }) K* a1 l
'7 D9 L) C8 M/ z
/ e4 \2 T2 P/ [, O% X2 M7 y% ~
0 F* w8 U3 w& C, ?8 |

0 d0 x; A* p( K% S* y" z1 ePart.Save '保存%
6 I$ h2 }0 X7 }9 S& ZswApp.CloseDoc (swFileName) '关闭零件5 ~8 r, w8 `2 \$ y
, R& R, K4 {, l
If swFileName = "" Then Exit Do
& C2 D" y# G% }5 |& s& [, b
% p8 Y' n5 t4 [
" e6 Z; o5 [# ^swFileName = Dir '搜寻下一个零件档案名称0/ n5 @5 u% O% d( J. Z
! T; Y5 R2 d! F7 E& V- f7 L
Loop '循环搜寻
7 u1 S. ~0 V7 q) xEnd Sub: L; g  S( ^+ f/ \1 y" c
按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
发表于 2021-11-28 10:06:58 | 显示全部楼层
Dim swApp As Object
9 A! M6 o% G# l: |8 j1 wDim Part As Object1 y% H+ N, F+ C; E; a
Dim sldPath As String
8 X9 a/ O+ P6 [/ O8 I, F3 @, `) l0 B, Q
Dim boolstatus As Boolean
& f3 q9 z; ^! s( w- s. oDim longstatus As Long, longwarnings As Long+ l1 }2 v, Y3 S. u' d
; m9 F3 Y* z* B8 d4 ?6 }- L7 g4 N8 q

1 l8 {. v0 `. ^; Y
: N/ f- P/ _% ~3 w3 |" a' N' ~/ l, r; q2 |$ b/ G
Sub Test()
1 N. x: T$ {% m; hSet swApp = Application.SldWorks
' D8 |% ]( y8 k* d% D+ g3 dsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
  F- P% C# L* C3 Y3 [
: D: W  I& P1 |swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称# ?1 w  K) [' j" h. R9 S
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 17 `  H3 ^) Y' E: S0 T7 Z
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
& Z5 C6 _4 \4 d& n# A
5 n& t, |# j2 ^1 |: vDo While swFileName <> ""1 B3 J8 v" T: B% o

% e0 y0 Z4 I/ j8 g4 R  ~6 j. @* rSet swApp = Application.SldWorks
2 }5 J8 ]9 ?5 X' P0 q8 H7 c. m+ S
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件" b2 m! [! L( Y: L
9 k7 ]! ]' G- Q2 P, T* a, o6 W4 n1 I
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
% V% d# k' G5 _& X7 Y5 w; d- a1 E
, g) d# U" j" J+ v/ G
' C; v3 N% w8 ~  H

2 a- g; Z" j: d- O" z0 Y: q
; }  K* D# p  u+ F7 Y/ PSet Part = swApp.ActiveDoc# p! i# ]3 }) Z

! Q5 K' r# `- V7 Q9 ^Call plmain
: m1 W+ U/ y  L
3 Q# q/ Z9 v9 j/ j/ ~2 s* e6 E' k" I
# R# F( o; W8 D. \1 A'0 `' w  f9 E8 ]( {7 L

; h6 w# \0 f# k" N4 Y5 I6 \
8 m- a$ J: c" Y; F0 i, v& O8 M) X7 B% m2 \3 S# Q
Part.Save '保存%  ^' j; `, S$ n8 E0 X3 B3 ?& U
swApp.CloseDoc (swFileName) '关闭零件6 E: T0 {# S- V$ E2 M: k
3 G0 P+ x9 B3 R7 a6 s5 \
If swFileName = "" Then Exit Do
7 w0 ]1 V; S% [! E, Z/ E7 O0 k1 h, ?- N; z0 _

8 K; j7 o/ C2 [. ?/ o0 j8 y' `swFileName = Dir '搜寻下一个零件档案名称0
' {1 r1 i0 r  d# U# |5 C& ~; z. }$ g$ x5 q5 z/ C) h
Loop '循环搜寻6 p, m  {4 r& e; e& J% A
End Sub
发表于 2021-11-28 10:12:10 | 显示全部楼层
Dim swApp As Object
7 `* c* a' l3 t+ V( y- cDim Part As Object
# [5 ~; k5 J" Z; J& BDim sldPath As String) s8 o( ^# a" u, ~6 g2 l
Dim boolstatus As Boolean
/ U3 i6 Y+ t) p& ]* RDim longstatus As Long, longwarnings As Long6 f- h3 H) h2 ~6 n# Z
Sub Test()
( c+ S( {5 ?$ e* oSet swApp = Application.SldWorks5 H) [: {* ?6 @9 Z9 b) F, ~" E
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录2 w  q- P$ J4 O) d) `
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称  S1 O6 ^7 O8 }; o+ ~1 _/ ]
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1% n# w. b; T) c% a% a
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 20 K) z( Z) A9 d, c6 B
Do While swFileName <> ""
/ @/ f7 m$ E4 l' Q. iSet swApp = Application.SldWorks
5 L- k# v" x, j! n4 O'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
# N+ p- s* Y) ^3 l8 K: wSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
4 f0 `: w/ |( V1 nSet Part = swApp.ActiveDoc
) P5 k8 A) i) ^# e8 ?Call plmain2 M/ \" s) Q3 _+ ?- q' `# Q' b2 `
Part.Save '保存%5 }; d1 F  ]5 G0 N* x
swApp.CloseDoc (swFileName) '关闭零件  v8 p/ g  c  D/ p$ D5 x$ ]! F
If swFileName = "" Then Exit Do
0 W/ _5 R7 t; t% d7 ~7 aswFileName = Dir '搜寻下一个零件档案名称0  r. u4 T8 |6 X+ U* c- ~
Loop '循环搜寻8 [# O5 Z) P6 [6 M
End Sub   老是被跳过
发表于 2021-11-28 13:44:09 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05
2 }2 }7 B2 f6 M- n3 `4 }Dim swApp As Object
% o1 \$ g6 M) K4 I% L0 F' l8 U0 EDim Part As Object
) i% e; k8 H) d# @Dim sldPath As String

. w0 I+ @" r2 A0 c+ @3 u1 _$ G希望可以得到解答% _$ x8 p5 d  E8 g
发表于 2021-11-28 13:45:15 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05
( Z" t1 Q6 \# |! p" `Dim swApp As Object4 X& T1 m3 A0 @3 c8 ~: L+ q  }! r
Dim Part As Object' Z/ Z7 l/ k) R) l
Dim sldPath As String
3 `, l0 c+ L9 J8 \/ r
和楼主一样打不开装配体: R. f: S; v; ]" N
发表于 2022-2-10 23:22:01 | 显示全部楼层
多少积分可以分享
发表于 2022-2-18 10:31:55 | 显示全部楼层
kbisi 发表于 2021-11-28 13:44% t8 q( Y0 o' @( Z) k, _
希望可以得到解答

: @% `: H- H: T2 C3 p无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。
# |& v, q0 [0 f2 d1 F! Z% ?  e3 P经过测试,下面的程序可正常打开零件和装配体) {( K. y1 \6 @$ X/ z  y

# U6 N$ \  g5 y; S4 s1 W" A' ******************************************************************************. ]: N  H1 q# z1 C% {* O
' 读取指定目录下的Prt/asm文件,关闭- i) R8 ~' [! [% @9 O: Y3 l" b
' ******************************************************************************
6 T3 P# [6 s2 m2 h9 CDim swApp As Object8 W3 t% m" `+ y( w

" ^0 ?! L7 Q% \5 H$ M) I/ `Dim Part As Object' B* K( w8 v% L$ R
Dim boolstatus As Boolean# G/ ~* n! o9 j3 I2 b/ c3 Q
Dim longstatus As Long, longwarnings As Long- V! Y& R- D5 q+ ]& o' \$ L
'Dim sldPath As String" }. q! A5 Y* b7 f+ d& V+ A2 [7 t
Const sldPath As String = "E:\3Dtest\BOM1\"  '设定目录
: M8 C8 z' I9 r) a! |# \0 |4 {) r
Sub main()" v" b+ N) S- J  r6 E1 d, x: }

8 q8 U, k8 [( a, y    Set swApp = _
; H5 @! x% L; h: l/ i% M" k' ]# ?    Application.SldWorks6 q! i; Y+ j8 g+ ]1 C0 F
    Set Part = swApp.ActiveDoc! F- M' b$ U) ]  |
        
" U1 ^  T" m6 Z8 V  M3 R3 N( _    swFileName = Dir(sldPath & "*.sld*")
/ F" f, e) ?' o( ], F
3 l4 ]( J; U& Y( L- R/ {    Do While swFileName <> ""
+ [9 l! U  E8 p4 w" D( E0 w: Y/ X; v        Set swApp = Application.SldWorks
0 B- w7 p+ t8 ]9 u7 p' V        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1' W. L0 N5 j0 A- P4 H
        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 28 h- c8 _7 }* ~6 A6 p% X
+ ^3 }4 S* O) X& _' t- I2 [
        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)! g/ j7 U! O1 E
        Set Part = swApp.ActiveDoc# s* X" W  b$ y+ o
        'Call plmain
) `( {5 @7 h( T/ q9 \3 E        'Part.Save '保存- j5 o. @0 y. l( h% S; W- s4 O
        swApp.CloseDoc (swFileName) '关闭零件# x7 L, u+ b& ]0 v* T
        If swFileName = "" Then Exit Do:
! Q- a! E' S2 M) C. h/ [        swFileName = Dir '搜寻下一个零件档案名称8 \# k& u+ D- G3 j! t3 X  D
    Loop '循环搜寻) L9 m5 W- ]" I
( G  V  I) {) M! l) Z
End Sub
" U. ]$ a9 n' \2 H
7 S. t0 Q- M1 E* j% K6 i4 d2 L$ \4 Y$ }% B% k( K/ [4 t
发表于 2024-1-7 12:50:21 | 显示全部楼层
能提供你成功运行的一个代打为参考吗我的一直报错
9 n* n, D0 m& ?$ l& u
4 H7 F, D- j4 r/ G; s: J
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-7-3 13:50 , Processed in 0.084963 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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