机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 醉生梦

solidworks 批量执行宏

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

使用道具 举报

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

使用道具 举报

发表于 2021-11-28 10:05:46 | 显示全部楼层
Dim swApp As Object6 J2 f  l0 |6 g) |- @) A6 I
Dim Part As Object
2 [7 D7 {* @/ ?3 L% H0 HDim sldPath As String& H; X  W" ?  j* z& {+ a

' u  x) ^8 p) @2 j' L$ TDim boolstatus As Boolean
/ e0 y$ A/ P$ L0 w- \$ MDim longstatus As Long, longwarnings As Long( ^$ J5 V+ k) {4 T+ _6 h
9 b  V8 N9 K. d. R! ]2 L1 h: o

5 n  H! w" D7 a4 [, X: N- T6 D
5 u3 H; e$ d4 {3 Q# A
- u. j5 J/ O9 q0 GSub Test()# r# e! t8 Z# n0 w- X" m
Set swApp = Application.SldWorks7 r# X! v* C; N; c
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录: p" H8 l. z  g3 q- W
; p/ H) R1 h* n! ~/ m8 N
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称, Q% a5 K+ t: r
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
4 a0 }' b# \3 e& ]& T1 s$ g* FIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 20 t. f5 X- z8 {

2 k' G- T2 }7 F+ d/ n7 |! bDo While swFileName <> ""
# [4 B" `& i% x# F; t+ x. R1 `  a+ g$ D+ K8 G- @1 s3 U
Set swApp = Application.SldWorks. F+ ?+ _( u7 M/ k+ }& i& k

( [" U4 C% q4 z- A* d% U8 _" j'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件* w1 r# f. J' Y! r4 z8 l

  q4 t- {, y' b: iSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)3 L3 g6 q6 f* n; ~+ |6 r9 i/ Y

& }' A" M6 J$ \; Q" E& ]& m, @
6 F; x1 F* H) j, E7 Z6 s6 C# g* F* X" T& i* s

2 e$ C+ ^9 j7 j) B1 D
! i: }( J6 F- R' ]. L* j! Q) l) [Set Part = swApp.ActiveDoc6 g, }6 X* d5 x
& f+ D% d! U$ g( n! y" C
Call plmain
$ J1 x+ o3 W' L) f- w1 |/ x1 ?' I4 L: ?  Y' [# m

0 R" @1 p0 x) ]# b' ['
# S9 J! |( U6 F- G
/ Z$ A! L0 ]6 F; \
$ b' _3 j4 `, m3 I0 ^$ r5 h2 o2 E5 V" s) y, i
Part.Save '保存%
& G4 ?$ T, o/ x$ {  C3 O2 {. S; lswApp.CloseDoc (swFileName) '关闭零件; @; p2 j  K' m7 [6 g: L
, m+ M7 o) Q& }7 a  N8 T7 B& o! s- [
If swFileName = "" Then Exit Do8 x; f: a+ F2 ~* R$ V

' U# b: \, d8 L9 [9 b6 ~9 D% K8 f, o' g$ i, g' i/ N& F
swFileName = Dir '搜寻下一个零件档案名称0: ]6 L0 }+ U" j1 h- P+ n$ {
8 U# J$ X4 T6 c/ e1 t
Loop '循环搜寻
/ j+ Z! y3 v+ G( F9 l- B  z2 EEnd Sub. f1 f3 x8 {; O0 J3 t1 _
按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:06:58 | 显示全部楼层
Dim swApp As Object" {; O+ p$ J, h: X( u
Dim Part As Object
1 q# h9 K5 v) V- u1 e; ODim sldPath As String
5 Z& n- V- M' W3 W6 O& K8 m! O: W0 P  @0 ]% @
Dim boolstatus As Boolean
8 R# L$ a- K6 [  {" s% K* pDim longstatus As Long, longwarnings As Long: G) U3 }& T0 l# y  _7 R" l! f
- |  D  Q9 E" {: ~3 h" v( Q  I
2 E- g* O8 f- k% B1 F: ?1 K2 o
" M" [5 _2 R( O% L. C* e
- P. j/ E* K* a: A  H
Sub Test()& Q3 A: E) }7 M. D. s, C7 V: E
Set swApp = Application.SldWorks9 D# s% h2 O4 F, t$ x. v1 l- Z4 [
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录3 B6 D! v5 B+ j: O, s! p

* f  h- k; k  M; U" v7 s* OswFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
* ~" }; c+ ?+ {  }9 I. @If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
3 k& a+ X% x* l+ U3 yIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 20 F, Z* I+ _: D. _' ]( S

. g1 X; t1 K  l( @Do While swFileName <> "", Q, I3 \# F* }+ s
5 A/ M) y$ q6 P: g4 V
Set swApp = Application.SldWorks
8 G7 V5 |; m6 H0 ]& i
- z6 k0 o. y5 m'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
5 l8 N: s; e5 v2 ^# l3 ]3 L  s3 ^$ D5 [. I. D: S: s
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings); K+ o6 U$ d5 n" N. `0 K
. K: A5 E( M2 f) E8 p" M

- s3 q3 v: w1 f2 u% q6 w8 ~- n7 b( P: r; |- s6 x# U1 e6 s# i$ ?

# {6 J9 Z2 u1 c# t2 w/ \, Q
8 B5 |* X0 D/ {Set Part = swApp.ActiveDoc$ a# u( v& \& Q! u$ y* v& V
! e- s: O& r; L% w" i# ~7 k
Call plmain
2 z8 q9 p2 G+ Y1 b: ~* {
1 q) ?! O3 P7 N* D) q2 o5 J3 I) i" J  \- g" t3 ~7 }# m
'# Q) C8 J' }; p* V

4 d; B# ]" O$ W' h* C6 h2 L* ^  h) I* o5 w+ [; E
  h# h1 ]  p/ ~! b% Y3 v" A
Part.Save '保存%4 q9 ^& N- _/ W! d, z
swApp.CloseDoc (swFileName) '关闭零件0 k! q- O" @0 [# r3 b1 }; Y

0 X8 w9 W  p; j+ b1 K. ZIf swFileName = "" Then Exit Do: }- t$ M8 A, Z5 k  ^! Y) j% u

4 u8 t- K+ M3 D4 O. n9 x, i+ x0 R( Y- x! M1 d. P4 m
swFileName = Dir '搜寻下一个零件档案名称02 p* Y! i5 e5 O5 U4 c* g- W( B% t

! O  m7 A& E3 o7 {9 FLoop '循环搜寻
8 h: H! c' K; ]' A9 [End Sub
回复 支持 反对

使用道具 举报

发表于 2021-11-28 10:12:10 | 显示全部楼层
Dim swApp As Object2 N7 h( ~" m4 U& j! P& ?7 J
Dim Part As Object/ \8 I( ^+ y) k% e$ m! a% O
Dim sldPath As String
, n# K4 R8 V. I( B! Z! ?( {* ]Dim boolstatus As Boolean
& |- p; ?3 {) x, ]; Z( eDim longstatus As Long, longwarnings As Long
, l7 e8 n: ?: c) k2 {/ ySub Test(). u3 u. d8 V' N# e  D+ W, ]! d
Set swApp = Application.SldWorks4 R/ _) `8 j# h+ c  _6 s
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录5 a8 u, n& x7 G+ N7 }
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
4 q/ }# u6 A0 j5 V7 ^If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 12 C9 d4 ]4 t3 ~' M* Y( d' }
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
; c2 l3 R' }6 [$ o/ h  c, DDo While swFileName <> ""- Y+ K# H8 b' Z+ S, e
Set swApp = Application.SldWorks
  u0 E7 n3 H9 p. g1 ~- S  \9 j'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
! r$ d3 q7 W4 j# l( z8 N& NSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
' n: A  M; F. q" l3 W& O8 P, [Set Part = swApp.ActiveDoc
, @9 E, n# c4 j6 S  vCall plmain) v% c7 U% V+ P% e6 i1 g$ q
Part.Save '保存%
, d$ \' ~$ b& G0 uswApp.CloseDoc (swFileName) '关闭零件
! \* r; z3 K4 q2 c" {If swFileName = "" Then Exit Do1 H. D! d: c! Q# U9 L
swFileName = Dir '搜寻下一个零件档案名称0
% l3 F: [, H+ c# x3 D( }& m; x2 yLoop '循环搜寻
1 A6 f. N4 c4 ~6 t: Y: S& Y' W" b5 T" AEnd Sub   老是被跳过
回复 支持 反对

使用道具 举报

发表于 2021-11-28 13:44:09 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05# m9 `+ `1 v6 M' w; t
Dim swApp As Object
" }# v$ [' Z* |& @) p1 @; C  VDim Part As Object
& L- @/ e' h# d' [. O" |Dim sldPath As String

* E5 `. x' l' N6 O) Z希望可以得到解答
9 a5 @* C4 R4 U- e. F: N
回复 支持 反对

使用道具 举报

发表于 2021-11-28 13:45:15 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05- o/ Z: u! X% m0 I0 K8 ~
Dim swApp As Object
* \6 e8 U  Z" TDim Part As Object
: q3 d! [# B5 ]) @& L9 r- B# E% PDim sldPath As String

" u" z. G8 ]5 o. F6 k和楼主一样打不开装配体9 h5 `  B/ Z$ W# T( Q  q6 K
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2022-2-18 10:31:55 | 显示全部楼层
kbisi 发表于 2021-11-28 13:44- A7 n* k# L+ q7 j
希望可以得到解答

' o8 F+ ?' d: l. W. r% d  A7 V无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。6 z* i+ F! y5 |* q$ \4 Z! f
经过测试,下面的程序可正常打开零件和装配体1 [( _% `6 B2 L/ b: o) {( W& c
$ ^! d  f  {* E" c6 B- w% Z
' ******************************************************************************: p0 v  b. D. r5 y- I
' 读取指定目录下的Prt/asm文件,关闭' K4 ~0 `7 D4 u5 Q& n
' ******************************************************************************
$ i/ c% G' a- L$ SDim swApp As Object
& X' T# V7 F7 Q2 i' E: {
+ N! w9 z. V( M8 sDim Part As Object% p  ~  E# V& T  s* z% E
Dim boolstatus As Boolean2 }& z" p) H. K
Dim longstatus As Long, longwarnings As Long6 V7 U& L, a+ N2 Z
'Dim sldPath As String, t. s# P8 _7 D; u. \( {! V$ v
Const sldPath As String = "E:\3Dtest\BOM1\"  '设定目录
  W* d9 ^$ ~3 A0 c
5 {4 z8 w, |4 k7 e( m7 TSub main()9 {& I( ?: D& ^7 i

" K' t) E# Y) T    Set swApp = _
8 Y0 p2 A, ?- ^; X+ u2 A4 I    Application.SldWorks
; V0 h  F& y/ o2 z! `4 n    Set Part = swApp.ActiveDoc$ _4 d2 s* d3 h5 |8 \! E& Z
        , X5 S  \! Y) A; E( a! Y4 [
    swFileName = Dir(sldPath & "*.sld*")
# t) l% h2 @* `& R  A' `3 n4 U% A& V, _- V/ s2 h2 J
    Do While swFileName <> ""
7 S8 l9 i; \9 }4 t) F; D8 ?        Set swApp = Application.SldWorks
; `$ Y) \: a" T8 I4 V! L& A        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1; s1 O/ d* ^  ~, X9 P: n' p
        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2: o+ a1 v+ o* R. O
; e( E# g& b8 ?3 w2 g6 `2 L
        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)$ }( M' k& N8 f" g! V- B: ~( Q! V
        Set Part = swApp.ActiveDoc8 Z9 ^3 q  J* a+ \: `8 S
        'Call plmain
# z+ W$ a5 E* |8 Y2 W        'Part.Save '保存
; O1 d. O& N" f        swApp.CloseDoc (swFileName) '关闭零件
" k0 c8 v- H8 A/ T: y        If swFileName = "" Then Exit Do:
" p* K. M1 n$ s, [6 ^  I8 z1 {        swFileName = Dir '搜寻下一个零件档案名称
+ h* v2 ^3 z2 f. G    Loop '循环搜寻0 I4 z' |. j: S

: K7 _4 ^- a: c7 M8 h4 AEnd Sub+ ?, ?% e$ o( M
! N6 j% B" M6 c& s2 f

; h6 e' i. o* [- T3 v( l+ y
回复 支持 反对

使用道具 举报

发表于 2024-1-7 12:50:21 | 显示全部楼层
能提供你成功运行的一个代打为参考吗我的一直报错
3 C, r5 j/ A9 ~' m
: d! m+ }; K5 I( i. V9 h9 H
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-22 16:58 , Processed in 0.059963 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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