找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 醉生梦

solidworks 批量执行宏

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

使用道具 举报

发表于 2021-9-29 15:35:14 | 显示全部楼层
有个使用场景,现在我使用的图号分离宏需要打开零件才能进行属性修改,每次在装配体里多修改几个零件名称或者新做零件就会忘了改属性,如果可以批量打开零件,然后中间插入执行图号分离宏的工具执行,就可以自动帮我一次性修改零件属性了(但是俺不会写,有没有大佬帮帮忙呜呜呜)
发表于 2021-11-28 10:05:46 | 显示全部楼层
Dim swApp As Object9 P3 {4 V0 `, J" V! K5 ^0 K  R  n# q
Dim Part As Object# y' ^2 N/ N  V( \6 t: O& o
Dim sldPath As String, O# M/ y1 C0 U/ X$ [/ n

3 O9 b0 b1 w; T- |- ?+ W' L1 h; j$ f# \Dim boolstatus As Boolean
( ~7 r. I! }, h0 f" l% i' qDim longstatus As Long, longwarnings As Long: q9 |9 F& O# X- c4 a" w

, i' J4 a+ `0 t# a, i
4 G' {4 G  U4 J: [+ \. j0 w8 e+ A6 \
% a) ?- p" i/ Q4 o, e
Sub Test()) _# L9 ?5 t0 p' W- \0 k, ^' g
Set swApp = Application.SldWorks
( O5 ^! k7 W6 h  ssldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录, P; O. F5 j4 t* @9 m# C
9 S9 X) k" S) w
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称& i$ V( z& k5 u0 T- u
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
: z- \! O0 O2 |7 }+ L$ lIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 26 k6 K, w8 s! z" g. B
( V. J: u, g) |, e5 T5 _& u
Do While swFileName <> ""
$ R) f7 i  `- P8 D3 |
; W: Y$ w# s) }7 @! {* }$ zSet swApp = Application.SldWorks  H. i7 {8 V: B! w3 @: y3 {

$ K* Z, x2 N4 {3 H7 T# }0 J'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件- t. \# O3 G7 @! `$ W" C- n( b% X1 p

) ]7 F1 K$ C; R# Q; H; ^$ qSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings): |+ ~0 f) j3 _, M( R. f

6 F- B0 m5 f8 e( n8 }4 A( @. ]
" A: d$ u5 S& @
/ T4 \2 t/ i$ \  n: S( w/ [( p+ Q
5 I/ F- ]( b2 _6 l& _6 s  w: F, E3 U( U. p
Set Part = swApp.ActiveDoc/ Q/ W4 T7 `( o/ q5 B

+ ?5 n$ Y, M. _5 E; ?1 `6 T1 oCall plmain
; k$ Q# Q) E2 D6 S1 a" m! j
4 f+ Q6 ?. i8 ~* l
' s, ]8 D: Z+ l; R'7 u: u9 y$ O, C) a, M
* ^- L8 J2 R9 D: o! h$ ^& d
9 P, }: Y% }4 N+ m: U+ }) f

$ j2 I* [4 G8 F5 V# ^" pPart.Save '保存%. G$ A1 F2 W$ Y% X
swApp.CloseDoc (swFileName) '关闭零件8 h# c$ v  J% r6 i# t
* R% l3 y: Q! T" v/ j5 j
If swFileName = "" Then Exit Do
+ U( G! \9 E% k: m* L, y" Q5 Y/ s% l
" |9 e* ?1 E& |% }8 Z# [
swFileName = Dir '搜寻下一个零件档案名称0
( m6 o3 H8 x6 V  m6 m" l$ E! N
* Z# h- H; b% ~! Y& [9 ]$ }+ bLoop '循环搜寻9 l1 l! h$ Q+ |/ d  G
End Sub9 V. H* |+ v5 M% [
按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
发表于 2021-11-28 10:06:58 | 显示全部楼层
Dim swApp As Object7 w, j! G$ S; W7 w
Dim Part As Object  V4 g9 c- i8 c! Y* `% k
Dim sldPath As String  Q# f; P) a" _0 g8 m/ I

0 c) ^2 n0 o. G- B' `: c4 M1 eDim boolstatus As Boolean
3 o9 I2 U1 f: pDim longstatus As Long, longwarnings As Long
; L! i7 K2 {/ X* ~$ G
0 u% u, s5 g$ ~* p# E$ O( z! Y" b( K  i" g- ]) U; A) c
; }3 e9 _5 a+ G9 l

* ?2 [, G  l: n. |6 m# ASub Test()* m0 D; g( ^, d1 c2 \( S8 S
Set swApp = Application.SldWorks& d* y& B6 h( u# c. L
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
0 E+ J7 |' F4 x, J0 ]% L4 ~9 }+ h% Y( q% Z0 w
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
! l. I% O4 s0 y; e. oIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1& ?/ Z* U1 K. K4 V" d9 B4 B- a/ i
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2  i) n- K6 P0 W' U, r0 R

& m, g7 l5 I" i+ w) Q9 q7 eDo While swFileName <> ""# M) {# W1 @5 ?5 j# i

9 {/ L1 g" F9 K0 @+ QSet swApp = Application.SldWorks& @, T2 i+ u9 ?( O4 O

' @7 c/ g$ T6 [9 E: `6 u! v" R1 X'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
( A9 u* ^1 h- o1 J0 E9 y9 ^' k9 H
! h/ D5 ~% C# g# ]$ Q  ~: rSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
" Z, V3 B0 U: f% H7 z' I
' f+ O& Y  n- i# a
1 a& f& ~# k1 c9 @  k9 X  H
- U  ]! R8 h$ N
- c' l* o7 G  e  Z3 G7 h) G- F; b
) E- [7 ~3 S8 Z" oSet Part = swApp.ActiveDoc
) L" _- f9 g" Q* S
: |; E& `9 e4 L/ i" ~0 R2 QCall plmain
( c# z7 ?1 P5 X5 V+ o% f3 n3 w# C+ W: L( N. ^# |

7 |6 ]6 E% m* n) d' i/ s, \( P'  y8 L! H7 \, i1 W. }

. M" O; O; n0 ]# t! ]% q: \& S) i* G. _& T9 i( L+ v$ e4 }
( A' z8 k) D4 p
Part.Save '保存%
! p2 j" A8 [  _5 B9 U' ?) BswApp.CloseDoc (swFileName) '关闭零件
5 H4 c: P' j6 {' ], x+ u1 a* f, E5 ]# E
! n/ G& J& a5 {: m2 |6 zIf swFileName = "" Then Exit Do
) E" o, Q1 }0 |( h8 [8 g
/ w6 y* p- Y. L5 m+ a
8 o% r$ l0 R6 h+ J2 dswFileName = Dir '搜寻下一个零件档案名称0
/ U3 ]" K: I, i' v  a; Z1 V$ ^1 [  _6 |( c
Loop '循环搜寻
6 D2 e8 f/ I8 ?End Sub
发表于 2021-11-28 10:12:10 | 显示全部楼层
Dim swApp As Object
( w. G/ \( W$ ?6 YDim Part As Object
: C7 f, a! y: Y' }5 l7 iDim sldPath As String
1 ~+ C. x, P3 w( A' w) QDim boolstatus As Boolean4 Y3 B, i5 n- [5 G" i
Dim longstatus As Long, longwarnings As Long6 y/ q8 f6 A# X: y: e- L
Sub Test(): I  ^+ R; i+ o0 C2 p4 r
Set swApp = Application.SldWorks
) j5 `9 j3 D; I0 h9 k% d- [sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
5 \/ K" w  g+ u3 E! w% S7 o' `swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
& d- s; A, D+ N/ uIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1. _7 G' R# S% n( Q: E5 H
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
' c: n, i+ y+ C1 P- F5 rDo While swFileName <> ""& k; E9 R  E; o* J
Set swApp = Application.SldWorks* U4 {: H; `% T, z% F# i: f  J
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
( f1 z) C# `+ XSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)) Q3 f) w' L) B! m" l% h8 Z; F
Set Part = swApp.ActiveDoc  d. [' W* e: X
Call plmain
) ]4 n, F: q, ~# tPart.Save '保存%
% i( f* R) j. ]swApp.CloseDoc (swFileName) '关闭零件
5 M% M  s' A$ i$ `$ @If swFileName = "" Then Exit Do
% q4 Y! D1 S4 T- uswFileName = Dir '搜寻下一个零件档案名称0
8 D3 X2 E5 G; \. }8 A5 d* q; V& I* MLoop '循环搜寻+ x! k' {' P" h8 j( S
End Sub   老是被跳过
发表于 2021-11-28 13:44:09 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05
9 {& d0 ?# C* KDim swApp As Object; l1 _# `2 h4 d# l" v
Dim Part As Object
& ?/ ?) g! l6 ADim sldPath As String
# s/ K# a2 K1 J5 D1 e% Q, |; @
希望可以得到解答
& a+ d. u' ]) [# R
发表于 2021-11-28 13:45:15 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05
$ z1 g* ~  y) e* sDim swApp As Object5 k! U9 i8 ]' T- _* T- H6 K
Dim Part As Object' L6 J4 W: _9 J
Dim sldPath As String

" V" U+ P# I; A- A和楼主一样打不开装配体" o6 d* w% C' P6 e% h
发表于 2022-2-10 23:22:01 | 显示全部楼层
多少积分可以分享
发表于 2022-2-18 10:31:55 | 显示全部楼层
kbisi 发表于 2021-11-28 13:44( p8 U1 E0 x# U2 Z
希望可以得到解答
: e6 J. M  m4 w7 f
无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。0 ?3 {! g; o% T1 Z; m: T
经过测试,下面的程序可正常打开零件和装配体
  h+ A& T, m1 V1 q: u
# c: n$ O0 |9 ^' ******************************************************************************
" j( M, a$ v, U0 P+ c3 [. q" j' 读取指定目录下的Prt/asm文件,关闭
) g* H1 f  A2 I& z0 S# W' ******************************************************************************; `1 ?: I6 n" j
Dim swApp As Object
. ]+ {( |& a) ?, o' r. V8 K% f8 g  W- A. {7 ^4 q) v/ W; [. |: |" v
Dim Part As Object
8 Z, G# w# A+ ~- W: w% y' iDim boolstatus As Boolean
# m% L+ \, Z% W4 D7 dDim longstatus As Long, longwarnings As Long! O. j1 Q1 p1 K; R8 m4 R+ _
'Dim sldPath As String) B( k9 f- A  @- }
Const sldPath As String = "E:\3Dtest\BOM1\"  '设定目录" J) ~7 p# t( p+ |! E7 z
8 `" e6 g$ `9 x( p" ~3 U5 p/ U" K  x; m
Sub main()( l) [$ r; u% D2 c  ~5 |" V

1 q% S' v; e9 p1 F  Z4 y    Set swApp = _2 i; |) a- _" a) A- O0 X5 x6 ]
    Application.SldWorks
# T# z0 k9 j: S# O  ^& W; L    Set Part = swApp.ActiveDoc! {3 j6 [+ C, x+ }9 g" V& n
        
% {- {, L9 p& x    swFileName = Dir(sldPath & "*.sld*")
, ]- a* F) [  B1 @* j5 t$ l: _( E, d. P! j: }5 r
    Do While swFileName <> ""+ O+ z: k1 d! A
        Set swApp = Application.SldWorks
- r$ }9 b2 u4 Q1 ^        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 11 N' E+ m5 t' {4 w* ]4 g
        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
$ \7 Z$ R; X. I1 _- c$ w! c
6 |: Y8 p  E7 O# D) S        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
5 ]  |5 v& Q2 \/ M        Set Part = swApp.ActiveDoc. U  h) _2 Q. [
        'Call plmain
. V& ], i; Z+ x3 G9 g5 j" S        'Part.Save '保存
  V/ k3 R3 D  Y. w" s( b* @5 x        swApp.CloseDoc (swFileName) '关闭零件
- e* _- F; [1 ~/ E2 B4 l, r, T% L        If swFileName = "" Then Exit Do:
+ R2 n$ W1 F/ G! X3 \2 x        swFileName = Dir '搜寻下一个零件档案名称
# O( g# d& F! j2 G" f    Loop '循环搜寻' M3 e# W: R- z8 w* W4 f

0 k3 H: D9 u, j* g! Q7 hEnd Sub  l7 l  d/ f, D' F9 {
( q. e  E; x* q( c

/ k# }# B# J1 V7 D4 J. t
发表于 2024-1-7 12:50:21 | 显示全部楼层
能提供你成功运行的一个代打为参考吗我的一直报错
* Y1 V. L; y, M+ E. t* H2 [$ v% G* Q5 \/ t3 ?" Q. ^
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-8-3 10:05 , Processed in 0.066187 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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