找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 醉生梦

solidworks 批量执行宏

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

使用道具 举报

发表于 2021-9-29 15:35:14 | 显示全部楼层
有个使用场景,现在我使用的图号分离宏需要打开零件才能进行属性修改,每次在装配体里多修改几个零件名称或者新做零件就会忘了改属性,如果可以批量打开零件,然后中间插入执行图号分离宏的工具执行,就可以自动帮我一次性修改零件属性了(但是俺不会写,有没有大佬帮帮忙呜呜呜)
发表于 2021-11-28 10:05:46 | 显示全部楼层
Dim swApp As Object
  H9 c7 N1 Y; M6 ], `% _3 RDim Part As Object
$ k! H3 L! n7 u0 L7 SDim sldPath As String
) D+ I( {, X2 m, k+ a6 M
& W8 Y; d0 |# M9 Q/ QDim boolstatus As Boolean
. Y4 `) t; r& C! d% cDim longstatus As Long, longwarnings As Long
) f: }" d( x1 {
6 Q3 P3 V) Q( [6 e
( ~6 ^3 O+ d& ~5 x
7 R+ X, r& B/ Q: X* z
1 G7 V; v2 w( }8 g9 a1 j1 @Sub Test()
8 E* G; U% z+ S# L0 g. f2 ISet swApp = Application.SldWorks6 w  G' K' a8 R0 C
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
; @6 `8 ]* m, D. }4 S  ?. U/ s/ m; h* H# z' l5 a% A6 a
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
1 I3 c0 V; O; A; F3 W. hIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 16 A* C0 w2 g; O+ o4 a! F2 h
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
- f2 d( R& t- B
1 w% N+ v& d3 v+ Z( C( s0 ODo While swFileName <> ""7 y8 H. c3 R: [$ Z1 N

6 r) c! _1 G1 I! }, J% O+ E/ ISet swApp = Application.SldWorks
( e) j5 W9 H* e; |- i# U
  g) y# E+ q6 i& Z- F7 w'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件' ^2 t; k. M" z+ n8 t& _
; ^; g: K1 R$ O* L/ y
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
, t4 y( }& W- B" R* k0 M( d+ U+ t  E
; V+ E  q# \' s+ _
$ `7 L3 v$ \% {) t+ h
2 P7 @7 r+ s7 m$ M

! n! s/ B# ?  j+ u9 u- r! GSet Part = swApp.ActiveDoc  t' V" S  b+ Q& Y

& i% W$ @) J. i# s8 VCall plmain
) F' L* r" w1 Q1 F) Z( ^2 w; K# |, s2 i4 `$ z
! Z) o1 a6 Z( r3 t: G4 F
'+ W' j6 o2 U- D7 A
5 }# v3 D( |2 I2 T. F
: q$ v3 g8 R2 R: z8 D- o
$ B# C  c0 v4 z" f
Part.Save '保存%
7 R$ r+ q0 S. ~- }( D& h5 QswApp.CloseDoc (swFileName) '关闭零件/ d3 v7 ~$ ?. M! l, |4 z2 T4 x8 X
8 J4 K/ J, Q" j) d
If swFileName = "" Then Exit Do4 k  ]. i) L! J1 O& P
) J  h7 c; \$ p  s! d) J
% p2 m; |" P. n# e) T: X5 \+ g
swFileName = Dir '搜寻下一个零件档案名称0
5 A5 }5 r0 ]6 F) p9 N$ z8 B% d6 d8 a
5 V. \. n7 D4 c2 a. @. L: SLoop '循环搜寻
) L; L# S) U8 L2 UEnd Sub
4 T9 }: v( g# Q. A按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
发表于 2021-11-28 10:06:58 | 显示全部楼层
Dim swApp As Object
- M2 {2 B" G, O- mDim Part As Object6 V4 d( \- F7 p
Dim sldPath As String$ q5 s5 e9 Q9 p; d

: y6 }3 v9 f; w4 Z) @0 FDim boolstatus As Boolean0 s+ U8 E6 J! O* @4 q! m
Dim longstatus As Long, longwarnings As Long
' |: a% o6 O9 d3 g. g+ U7 P& {* f5 i3 {. P, {
0 `- n7 s, c% S% @1 |4 i7 c( P" v5 N
2 q" n1 P6 G  \$ Z

' N% L# g, M, X9 y3 ~Sub Test()
; d) U- G0 l2 D" G4 X- USet swApp = Application.SldWorks) R2 m, G+ P4 `  i% C
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
! q/ z6 K7 k1 z8 Y7 \. ~
) f8 e4 ?5 Q) m* R$ F+ aswFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
+ l# ]8 |9 b2 n* y( _# i- E+ hIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
& f  ^& S* b7 Z+ ?4 C' BIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
% e' V" D  K* Z7 A0 V& [% M. ~) x0 a5 ^  D9 b0 s
Do While swFileName <> ""/ }& c% f# R) g9 g) K- P* m4 u
' Y* l7 z9 H8 z) I
Set swApp = Application.SldWorks' a1 }7 y! a! |9 F9 K, R' v. B

1 T% ~5 U' F! s, i' J$ f. n'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件0 u2 F+ w- W" J# ?( N, x
2 N8 z6 d  y1 J: h: M5 A
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
% W+ H% Q2 l* D: k& E- [7 |( n# J1 M4 D0 L3 B5 q
2 V8 {9 |! F9 R; q  J3 q- o

( z2 |' \+ V! I$ a* y
8 d0 h; P; @- e3 F7 J+ h) n1 F/ v1 L. O3 M2 Q8 |
Set Part = swApp.ActiveDoc
+ R% s1 U& ~5 g3 {0 L8 z% Q0 k/ H& ~, r) A# H
Call plmain
' [9 j; {4 Z2 ]4 X3 |- S( L+ I
% |. v' ~% K6 U! C( Q# Q
6 W6 s( e* G" M' y; W- Z7 R'
' [+ q- X9 X4 I3 c$ }9 [7 r) s  q  _" E$ S$ D

! i; X) U6 L9 y/ ?
4 Y+ X+ c  \0 D7 |! v' yPart.Save '保存%
9 ^6 D1 a0 m3 ]( m! wswApp.CloseDoc (swFileName) '关闭零件$ n  E* q+ |" }  [" b

  |1 Q% s1 e& t8 B% D1 @" rIf swFileName = "" Then Exit Do4 D: M* Q, Q+ P& r

: H7 W8 e4 U7 \" I5 k. U% Z. j6 z$ q6 M
swFileName = Dir '搜寻下一个零件档案名称0
  }- `. O! s  k, u# i1 R. A4 E$ W5 g* R, }, o2 j
Loop '循环搜寻: V% N7 ^1 U0 S) R9 K; E2 N+ ~
End Sub
发表于 2021-11-28 10:12:10 | 显示全部楼层
Dim swApp As Object
+ ^+ q9 y; I5 k2 I3 bDim Part As Object
- F& j: |, l- ~# ?' |7 GDim sldPath As String7 [) {: z  t  Q+ \
Dim boolstatus As Boolean
. E9 Q  Z# {& h2 ]Dim longstatus As Long, longwarnings As Long
7 k7 t+ S- c; {; v  V' `5 }Sub Test()5 k5 r: m, T, v0 v  `
Set swApp = Application.SldWorks
" q. k( o. {; k! q* zsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录1 ], P) v* e$ v: F8 |
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称1 C9 r2 ?; x, w# ^* ^
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1+ E- ]4 A: b# ]4 X
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 29 [; F5 e" e5 [4 P9 L
Do While swFileName <> ""
" T) i' A/ f" u. c0 {$ x0 WSet swApp = Application.SldWorks
* z( e  X& h( K/ S+ Q& o'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件! D; Y" K" L) k6 o) B
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)& u& \) E/ T, J* E1 t! y$ ~. c
Set Part = swApp.ActiveDoc2 a% o) I/ _' Z8 c+ P
Call plmain
0 a! h2 W0 t+ lPart.Save '保存%5 P' x6 T) t: `' D# Q
swApp.CloseDoc (swFileName) '关闭零件
% `/ F$ b4 J, I% H, Z5 cIf swFileName = "" Then Exit Do
/ }: X5 r8 [6 E# [- ^. f4 \6 lswFileName = Dir '搜寻下一个零件档案名称0
: n% a4 C/ U* X' n9 M' X; jLoop '循环搜寻
3 G  X, Z$ w- |3 [5 JEnd Sub   老是被跳过
发表于 2021-11-28 13:44:09 | 显示全部楼层
kbisi 发表于 2021-11-28 10:054 ]; b0 p" p. F4 M  a
Dim swApp As Object
0 B* R- f0 v5 e* E7 m# }Dim Part As Object" g; W9 B: @( Y  m; g2 @
Dim sldPath As String

6 r1 n2 v3 c  x# D2 G* \希望可以得到解答
+ P! T, q2 ^, e  o! S- C8 R
发表于 2021-11-28 13:45:15 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05
5 T7 l" X) ^1 gDim swApp As Object& p2 \0 n  T; ~
Dim Part As Object
7 E! M/ a/ s! N- I- I1 w2 zDim sldPath As String
; o' C# f7 Z4 g3 b; L0 }& a
和楼主一样打不开装配体6 S4 C4 }; }. X6 f: a0 `4 L5 |- y0 n; z
发表于 2022-2-10 23:22:01 | 显示全部楼层
多少积分可以分享
发表于 2022-2-18 10:31:55 | 显示全部楼层
kbisi 发表于 2021-11-28 13:44
; H5 F: W$ T/ ]& K9 H9 |; O; R希望可以得到解答
2 M  x5 M3 Y1 n" g  B( b8 d& J
无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。
7 F0 J& F- V) ~) H经过测试,下面的程序可正常打开零件和装配体
2 S2 i' ~7 P0 S. z0 B* i1 y: Y# i8 s  D/ I9 L/ _
' ******************************************************************************
! h/ s" W$ k* f' 读取指定目录下的Prt/asm文件,关闭
3 M. W4 p5 X. r+ Z1 j/ V: a' ******************************************************************************' f6 w5 w9 r# R) ^
Dim swApp As Object3 n; N* t& r: f4 i( b# O

4 l3 ]! F$ w5 b; b5 T' |$ DDim Part As Object
+ `8 v. n' e' h3 UDim boolstatus As Boolean
2 V' R* w3 l. L9 l0 {& `* ?" `8 EDim longstatus As Long, longwarnings As Long
* C" C; }, t* b* g' b, u'Dim sldPath As String
; j, E7 o0 R+ R0 ]9 t! d. j: K2 eConst sldPath As String = "E:\3Dtest\BOM1\"  '设定目录
, Z% a$ K- i. ]  B, W% K: y8 F9 i3 _+ U
Sub main()
0 B8 Y( e, X' |5 X9 G6 g& ~% m  d& V% w& N5 g* L
    Set swApp = _# P/ F7 t1 R  J2 K4 k
    Application.SldWorks, t4 h3 W: N: r* M4 B
    Set Part = swApp.ActiveDoc
$ }; V0 l" V& o* j; e        % t4 T' E, i3 i! q% o
    swFileName = Dir(sldPath & "*.sld*")
  g7 N) y( j) I, d0 z$ H# H( e! m4 |7 m0 u) ~: _- S0 O9 n4 e
    Do While swFileName <> ""* K( }' A# [$ D0 ^1 O
        Set swApp = Application.SldWorks
3 ~8 W: m, K( H/ s/ B. t        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1* x; X5 w2 y- ~' L
        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2( T1 K3 A) X+ D; _. _! ]

+ A- |$ ~& e; x- z* |        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
2 [2 s' q! B! Y0 r4 ?7 G- o        Set Part = swApp.ActiveDoc
9 x$ t, W1 F0 X! [  H' R, T        'Call plmain
1 w, a/ X3 X) ^- K+ _        'Part.Save '保存
% q2 ?: P) C7 N7 d+ v$ O        swApp.CloseDoc (swFileName) '关闭零件# f; N' }' \8 T
        If swFileName = "" Then Exit Do:6 u% V  G' S# ?6 R8 H# L
        swFileName = Dir '搜寻下一个零件档案名称* G- i0 m* p/ q+ I: K
    Loop '循环搜寻5 s, j5 Q% \- ^' t8 h1 Z7 k! G

. k+ C( V2 @# PEnd Sub' Z6 T7 ^2 I+ C) b) T) m1 m

, F: b6 T2 c- C9 w0 Z2 P2 r! c5 E" N
发表于 2024-1-7 12:50:21 | 显示全部楼层
能提供你成功运行的一个代打为参考吗我的一直报错
3 Y- a2 u' `+ S7 n. d' I( p1 O* M' X/ }- ~1 N3 w
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-9-15 10:23 , Processed in 0.078487 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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