机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 醉生梦

solidworks 批量执行宏

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

使用道具 举报

发表于 2021-9-29 15:35:14 | 显示全部楼层
有个使用场景,现在我使用的图号分离宏需要打开零件才能进行属性修改,每次在装配体里多修改几个零件名称或者新做零件就会忘了改属性,如果可以批量打开零件,然后中间插入执行图号分离宏的工具执行,就可以自动帮我一次性修改零件属性了(但是俺不会写,有没有大佬帮帮忙呜呜呜)
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:05:46 | 显示全部楼层
Dim swApp As Object
5 T$ j& v1 J/ t1 _Dim Part As Object
" U" O( @) e, {3 |8 s3 @# {; c% IDim sldPath As String
. y( u$ K( W# J3 E# ~4 L; I0 u' e; A" ~; T- A& P; Y$ |' K! s
Dim boolstatus As Boolean
; q: L5 \; G) w/ Q3 k% wDim longstatus As Long, longwarnings As Long
1 `: D, k1 k0 o. H6 z+ e8 S1 {+ E& ^
" y5 ~+ {0 d. b: h$ M: [

, W- _6 k6 `. n1 z9 s5 H" z5 c% Q- i) N' K! v' D5 [: d
Sub Test()1 u: S( g$ r7 D, g+ M
Set swApp = Application.SldWorks
8 p( ]$ L# O3 z  a6 X! zsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
- r) B: R: c, |2 ^& x
- M. n; M) n, N6 d: WswFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
  w) {6 [+ v$ v* n/ U/ e" oIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
! a3 y/ }* |, i! K" VIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
% L( h- ], [0 U0 ^0 l" C% T2 t+ l& N( Z# k# H) y
Do While swFileName <> ""
2 U" O4 f: R2 _* [
# c. k5 t$ [8 L6 l$ S0 D% hSet swApp = Application.SldWorks: m+ h% k5 x2 ?* P: z; x3 J8 I
& {( i. v8 ]. ~3 M
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
( N0 P( s$ [' H4 n- U
5 Z9 q/ ^- _2 ZSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings). U  O8 k8 a# Q4 v* g3 h
( T! \; l8 B) p; ^+ c) D

* E9 |9 H& |1 J: \5 Z9 r' t" {, c# q
6 _! h/ O$ q. T+ f3 z! D* k6 N
. e1 t8 b9 s( g) U( J
Set Part = swApp.ActiveDoc
7 p  _9 u" @4 ~/ o% W
  N& d( [5 h% F% F  s, ?0 kCall plmain' [1 s( s, [0 h- ~9 \3 G
* J1 C% s3 }% C

$ A) q/ I2 C2 l& \' r'
& [% i  P% c" b% H8 @6 A
# ^# @; [8 g7 {+ k4 ]; p5 \' Y: Y( a; V4 b

" x  J# z( F9 D& ~3 m; ]+ ]% APart.Save '保存%
/ e  S, r  [4 k- D/ BswApp.CloseDoc (swFileName) '关闭零件0 o+ f0 I& I" z: q& E+ z& u

% \- l5 g% X. FIf swFileName = "" Then Exit Do
& k2 _4 b9 O- x
, o% D4 o- h; T9 t4 y( J3 N0 l
5 n1 l! U0 l' n) m9 L2 R9 X5 I, y) xswFileName = Dir '搜寻下一个零件档案名称0! t3 R" J% z, p+ {! h2 \4 e

: N0 b0 z$ i" DLoop '循环搜寻0 V1 O. T4 i# a6 k- E
End Sub2 Y/ Z- F% ^+ r8 C+ E
按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:06:58 | 显示全部楼层
Dim swApp As Object
5 A1 m3 {, z( g/ RDim Part As Object9 h3 D; _: M" u9 x% [- g
Dim sldPath As String
: z& q, N" y9 Q# j; e' Y  B  v$ X* v* Z  O( {0 m' R+ a
Dim boolstatus As Boolean. e2 ]& u" v5 y: q
Dim longstatus As Long, longwarnings As Long$ G  T: m" \% Q3 N6 l

/ B. E$ R8 w  T& y! I
' Z( I4 L! N3 g% r* w+ n" J7 l% s7 N: E7 V( ^* s2 B: Y+ f
* \" q' W0 x0 s+ R- L$ X
Sub Test()
: ^) B; p$ E; G7 T* U6 USet swApp = Application.SldWorks
' N0 r+ i  A  `* R4 m8 E0 SsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
: L, C) l3 e* T1 k, I5 B3 b1 i* P: L) g8 d
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
; N* i0 A# W" U9 }7 {6 [If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
+ B) n7 }5 s) m/ Y" d# z& sIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
$ G2 H  ?) G6 i$ t% f
  R9 m' H) q% D( F9 }" q% \Do While swFileName <> ""
: Z+ B# x9 g, k. W
( G- r5 [5 `: V- P; GSet swApp = Application.SldWorks
: e& k2 L' t- \3 I1 F
8 X4 ?9 Q2 \. N6 p5 i+ }'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件: X6 ~: m4 P: A9 q

/ {! \  g- K! o8 M+ ?Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
9 L+ O7 ]) G, Q* f
5 w/ j* `! m' t7 A8 c
: D/ {0 R- j4 W& Y4 j. K
1 q$ D& x/ X' A7 z! k$ n, D7 V4 {1 r; E
7 N  ~& [1 ^$ O. e0 C/ F; }2 y+ G$ c
Set Part = swApp.ActiveDoc2 I- F* F+ j; _0 L
# {# P: l5 {' k- w
Call plmain
4 l+ i; g: x$ V1 Y( l0 i' A' c1 m7 g, d

! i, U" S- l: I'0 _# K0 F! l' n1 E2 l, n% H5 L
! I( x. w7 |8 ]

; R* Q$ R( C0 P' ]7 o& T' W) z/ X8 \# M7 ?* m- n$ A( I1 @4 }- l
Part.Save '保存%% B- q- B' k4 V+ n
swApp.CloseDoc (swFileName) '关闭零件" F% \+ M5 |$ R$ b# ?
+ |2 R8 L0 v- v# Z0 q# ^
If swFileName = "" Then Exit Do. P% o. M6 u  n9 q9 F

- d2 u) M; N" v$ H+ g
" ]4 F& l- R' ~' _1 BswFileName = Dir '搜寻下一个零件档案名称0
& p1 [6 _2 l$ i7 s4 s3 \6 P
9 ^( G1 i7 {: Y( t* WLoop '循环搜寻1 l+ @, G, {: W6 ^( N! q' `
End Sub
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:12:10 | 显示全部楼层
Dim swApp As Object8 s6 _( ^+ s! R4 n8 v
Dim Part As Object
8 p5 k* V0 M1 i% h$ R& k, XDim sldPath As String6 }+ ^- X) l- S9 E; \' T  N3 m
Dim boolstatus As Boolean; U3 A( r4 O$ Q$ |9 M: p6 p
Dim longstatus As Long, longwarnings As Long
4 g' e3 r* _1 h0 ]# o$ xSub Test()( J0 ?' U; V- p7 j7 s- w: r
Set swApp = Application.SldWorks
; _  R% y$ o, h+ }sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录6 |* E5 a2 j/ X8 a5 v
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称% L# ^9 m% B$ i! R# Z: r5 a
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1& m5 F+ R& r7 t" |" p
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2/ S: U" r- {: I: F
Do While swFileName <> ""
; D$ f# [. _+ A$ O, {Set swApp = Application.SldWorks8 t7 t* Q1 K$ h2 z9 R7 v, }
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
; w$ z1 k' S& zSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)& x9 z5 j* q- u# M
Set Part = swApp.ActiveDoc1 j3 k' ]% c9 {0 ~
Call plmain
/ ?. r: ~9 ?% t% Y+ `Part.Save '保存%6 M1 I5 V* C3 j, h
swApp.CloseDoc (swFileName) '关闭零件
  r$ P' a) K3 dIf swFileName = "" Then Exit Do
' q2 d5 H. O& x4 K6 [swFileName = Dir '搜寻下一个零件档案名称0
, u5 `( u& b, t. ]Loop '循环搜寻
9 D2 M- t) g3 U6 i6 |# iEnd Sub   老是被跳过
回复 支持 反对

使用道具 举报

发表于 2021-11-28 13:44:09 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05; h6 _5 t8 N* i7 b
Dim swApp As Object7 V  m0 p; x+ i6 T4 d4 `  ]" j
Dim Part As Object
+ `: u, j3 p, a. N: ODim sldPath As String
! g; w5 `) _* q2 R9 D8 }
希望可以得到解答8 e2 F8 N- o& f9 a5 D: [# O
回复 支持 反对

使用道具 举报

发表于 2021-11-28 13:45:15 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05( t; \* w# Q, F$ @3 t1 }1 ]6 ?
Dim swApp As Object
  q, d1 U9 _5 c; S/ fDim Part As Object8 C3 ?9 d& \/ g. I. h
Dim sldPath As String

% h3 Y7 c3 o3 ^- J& S和楼主一样打不开装配体9 K- r2 z7 a' N4 ?) C) V
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2022-2-18 10:31:55 | 显示全部楼层
kbisi 发表于 2021-11-28 13:44
/ ]4 M2 r6 U- f' l希望可以得到解答

- e( x  z1 a8 A8 f* n7 S无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。; `5 Y" _+ C$ x. g
经过测试,下面的程序可正常打开零件和装配体
* W* W6 Z; s+ m2 t6 _. X/ y6 U, F0 T
# D# ^. o$ V9 f* b1 t' ******************************************************************************' r+ W! b) r2 g& O  a$ i6 x
' 读取指定目录下的Prt/asm文件,关闭
1 d* D  ?1 q/ h6 c* f2 R' ******************************************************************************# Z2 e5 X$ X2 O8 Q5 I2 ^
Dim swApp As Object! P& T( h" s& k6 R( m

9 I' v* N& X/ _! uDim Part As Object
% R8 |4 i2 S0 ^) ?Dim boolstatus As Boolean
' M) Y1 S2 P- O9 i3 tDim longstatus As Long, longwarnings As Long
$ M2 ^" F: `/ K'Dim sldPath As String
. \* h% ^1 I, iConst sldPath As String = "E:\3Dtest\BOM1\"  '设定目录
. [; ^* _( h$ Y( ^9 l4 z. M2 a5 r% ]; i4 L) Y; ?0 s, g2 b
Sub main()
6 Q7 o! k! A) e
$ h9 t4 \# z" M9 o: g% U    Set swApp = _
; b# y/ g  D; n. G    Application.SldWorks
  I5 y9 m% Q. T    Set Part = swApp.ActiveDoc2 H8 S) o0 T- A( h! \) \' A
        5 B7 d, b! R( U/ w9 ?2 I# n
    swFileName = Dir(sldPath & "*.sld*") 0 c( ~, k* p7 o) M. S1 F

/ K2 x& ^3 s% X% Q/ W    Do While swFileName <> ""; Q( i5 E* j% S
        Set swApp = Application.SldWorks' \5 F' s1 y7 t2 `
        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
  T$ f6 D" V, h" ^) E2 ]        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2! _! w0 W: J8 u5 V( S- ~$ ^1 |
  l! `' _0 a, o6 U! w6 O  M
        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
5 \, D9 j  v8 ?, M9 Z        Set Part = swApp.ActiveDoc
. L9 k2 I3 m& J* [" m2 Y        'Call plmain' h& j  n# m4 M5 P& \$ f  I
        'Part.Save '保存; e" M7 ~- C! u! E8 `5 V
        swApp.CloseDoc (swFileName) '关闭零件
, b6 k1 k3 S; e+ j% Q; @! }0 b        If swFileName = "" Then Exit Do:
' G' P8 J  V0 A+ Z  v5 A* |0 _        swFileName = Dir '搜寻下一个零件档案名称2 o2 E9 ^: f5 r. J  t* P5 N
    Loop '循环搜寻
+ v4 Y$ P7 Q7 P* ~. U) T7 u
1 E& z0 F# K& M2 x! |End Sub; {* O& t! l7 f9 p/ x
3 X9 n3 y5 y. N) e1 ]9 t( z
7 x' F) v! |4 [' x
回复 支持 反对

使用道具 举报

发表于 2024-1-7 12:50:21 | 显示全部楼层
能提供你成功运行的一个代打为参考吗我的一直报错
9 m- {; B' y' V* [3 ?6 m( ?; i4 [
2 }* ?# O7 {& }; a9 [& v8 v' e; i8 u
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 14:01 , Processed in 0.057356 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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