找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 醉生梦

solidworks 批量执行宏

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

使用道具 举报

发表于 2021-9-29 15:35:14 | 显示全部楼层
有个使用场景,现在我使用的图号分离宏需要打开零件才能进行属性修改,每次在装配体里多修改几个零件名称或者新做零件就会忘了改属性,如果可以批量打开零件,然后中间插入执行图号分离宏的工具执行,就可以自动帮我一次性修改零件属性了(但是俺不会写,有没有大佬帮帮忙呜呜呜)
发表于 2021-11-28 10:05:46 | 显示全部楼层
Dim swApp As Object" \( v+ j: y. T3 y: d3 ?
Dim Part As Object
; x! o  {. |/ m3 L" j  cDim sldPath As String4 ^- T0 W, @  P# C% x

2 c1 M  c6 g, {Dim boolstatus As Boolean
3 z; k+ `. v! @2 K+ v5 U5 l  SDim longstatus As Long, longwarnings As Long7 _. W2 b! V& e& t  [0 ^

1 t& L. g  m: V, M. `0 j0 ?3 m* ]
% A4 f  l2 j8 K, a' W9 _- l4 g
7 b0 b/ a! T/ T  t1 ^7 E/ A
" j8 |/ O# `' M2 w& n8 S/ dSub Test()
/ V0 d! x( x  g" I: s3 w' t: VSet swApp = Application.SldWorks
, S" p2 R( x. `% RsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录  n+ h7 i6 S3 p) f3 F2 i* z
2 ]3 S, f  v0 s/ ~1 \
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
$ ]% `: M$ m, \- tIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
% o" u# |1 H: p& Q8 ^If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2  N7 v7 w* p" K  e" T# l( p" j7 {

, h5 y8 x/ X) \Do While swFileName <> ""/ v$ |/ ~, W7 U* }8 ^' v$ N
- f) E1 H# e( J
Set swApp = Application.SldWorks
6 U6 N% {" m8 X2 Y" r) W7 T& Q" c9 _# F8 l" o( Z3 d# P
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
: |6 A! }( z* `1 O9 R( {
% P% u" S  C, W- C9 pSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
4 X& c& r# }3 u" I4 t" U+ d* P2 R+ v# ]/ s

7 H- U" W8 e$ c0 H/ x2 C7 g; Y3 V  U
* u" {. y; }, i7 y3 n2 F% Z- b% m) t& C! T) p- T# c

+ o* j6 l1 n# d/ c+ zSet Part = swApp.ActiveDoc+ n2 o$ G* l3 W) q) G  W7 P( i, {# g

9 x. M' J- Z: E7 c; ~Call plmain: {) p2 }% ^% X9 u4 v: K9 I

" a" J9 ~( a$ ]) I! T3 z4 g+ [' x3 B7 R3 o# ~
'4 {# J8 e" r5 }# l# D, R) R; F
6 y, C8 {; P/ C! e6 s
0 B4 m3 d+ z  }( j8 U7 b  F7 y
/ Q% d. v8 f) Z3 b9 [1 \7 t' Q# E
Part.Save '保存%6 G2 k3 d' m3 z$ o$ a' x& s
swApp.CloseDoc (swFileName) '关闭零件
: |/ r5 v' K  I9 c5 F
9 L; X( ]; Y2 Q4 |- a0 UIf swFileName = "" Then Exit Do
/ D1 x3 U5 N% {" d; ?- }, `9 u/ ^# N: a

( b6 H; w' q! Z1 ~+ T7 U" ?- _swFileName = Dir '搜寻下一个零件档案名称0
: p% a2 }  x; b. w+ [
! S: H+ h3 @" J: dLoop '循环搜寻, {3 X3 s  f5 [* B- u2 P
End Sub
1 r5 I8 {) {! D# ]按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
发表于 2021-11-28 10:06:58 | 显示全部楼层
Dim swApp As Object) g& \; }) l, ]
Dim Part As Object
/ R7 z; a- Y+ {5 p3 u# QDim sldPath As String0 c; o) \; _' e3 ^

3 q) n$ h0 s* M+ N- d0 m8 Q' W: qDim boolstatus As Boolean: t: [) p8 X5 C$ [
Dim longstatus As Long, longwarnings As Long* [# X1 Z$ z: q! w  m
( V7 n) Y) O+ m$ W. L9 k
- |  Q- a3 m% A) X/ T( t
4 S7 D+ ]/ d9 ^

: Y3 k' B, c$ q+ H) E; _Sub Test()' e; J. D6 W9 C5 z+ n% J# I' q
Set swApp = Application.SldWorks
2 u: T  c* e: g0 D- `: WsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录- ?, S4 j8 ~8 O  x/ c

4 e% U# F: h' T4 T4 ZswFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称! Q7 P8 {5 n" ]9 [' B: K* W
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
* ^: Z7 x) @# M4 w/ [3 C2 U+ _$ eIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 23 y( t& k0 C; G/ r1 \+ e- k

* q& x. _6 ?9 {- u. {7 l/ U) MDo While swFileName <> "", c4 I' z: x- O0 l
/ K5 F' h7 X. f! C7 ]
Set swApp = Application.SldWorks1 v7 f! d: r) f1 p

; Y/ {. c7 o% m& `3 h; F'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件2 E8 y) J& `% P9 a0 W
8 D8 x+ j) t  w9 j) K+ ]- I$ H. {
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
" l. i1 h' ^" G6 M+ i, a$ f% T7 |( n3 [* Y, P
4 m  w4 F' m4 K/ F! |0 u. R

: s4 K. {5 E3 ]# F* a+ }" ^  u0 ~- P! r/ n& F
" b+ z* W) S% \
Set Part = swApp.ActiveDoc% I: K2 X+ p( B& T" ~$ d( \/ P9 ]

" D9 B/ |/ M0 w1 T9 UCall plmain2 Y& U3 c2 ]1 d$ m
( o8 ?) d9 L  {5 H2 D5 O( B
! w8 B) N1 q  b" H) {2 V& h6 u
'
0 A  ?. v6 G; j: _6 r4 |; K; R/ _: h9 A) G
$ o6 D5 G6 u9 V$ \" ~# u. H; q
8 s$ {' |. T7 I+ q  V
Part.Save '保存%
! v# e  F; F% _# {2 jswApp.CloseDoc (swFileName) '关闭零件
2 n5 F* p. B& J8 [3 f. Z- j& c; M" t  K. x) q
If swFileName = "" Then Exit Do& U+ j# f; p, K/ y1 H6 ?5 C
4 v5 X1 N* a9 P- b
' l  `7 ~7 q5 O" W6 f( D8 v
swFileName = Dir '搜寻下一个零件档案名称0; c& Y  e  z6 B/ F! R9 `

2 r! b1 m2 e0 \! c" t6 g: j; W+ wLoop '循环搜寻
" a& D+ ~! A! Z- q4 o; d" JEnd Sub
发表于 2021-11-28 10:12:10 | 显示全部楼层
Dim swApp As Object
9 D& ]( i3 S# x0 JDim Part As Object
  K; h+ q$ g' \Dim sldPath As String) \, N3 S3 p) {* ^* `+ R6 R, x1 D
Dim boolstatus As Boolean5 y/ [% s) {. Y# R
Dim longstatus As Long, longwarnings As Long
2 Z$ w" ^0 Y7 sSub Test()
; s) j. b7 m2 u& w  d% wSet swApp = Application.SldWorks1 C. P; ?/ ~6 E" y3 v3 s
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录% j! |! q( `3 @/ v
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
, |, a# j- \9 h: o7 o8 AIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1: ~. C" R" Q) X+ }5 N- s# k1 E
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
4 ~" g; j& D' y( d7 A; N- cDo While swFileName <> ""
3 O, p! q8 P/ o9 S" D; ~- zSet swApp = Application.SldWorks
& e0 m. c1 a0 g- t* E, d'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件
- O& g* Q0 k4 h6 X0 C6 tSet swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)7 S- \8 O, O. t* p
Set Part = swApp.ActiveDoc
% f, U( r$ G/ q1 i/ Z$ Q- i9 `9 `$ DCall plmain" I& L, j" X4 Y& _; M
Part.Save '保存%
% U& M$ }. _# _. d: o) y1 d2 WswApp.CloseDoc (swFileName) '关闭零件+ t7 n2 P! R  F) L' ]8 |4 O& h
If swFileName = "" Then Exit Do
! }# v8 a2 |0 B5 T! }3 ~1 A+ wswFileName = Dir '搜寻下一个零件档案名称0( |: t5 f* U0 G% f! P  q* O
Loop '循环搜寻( ~* Y$ F- N8 E' }0 Z
End Sub   老是被跳过
发表于 2021-11-28 13:44:09 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05
4 ]3 E7 q& n* i/ J* @+ Q* O) eDim swApp As Object. c) {3 _2 K7 w& I- t' G; a4 y
Dim Part As Object
/ `' e/ V* R$ c7 z1 A' g8 ODim sldPath As String
& b) i( M9 d2 S. _1 B3 U
希望可以得到解答
6 t. C; I/ Z1 i0 s$ [
发表于 2021-11-28 13:45:15 | 显示全部楼层
kbisi 发表于 2021-11-28 10:05- L( r! W; t& P1 N5 ]
Dim swApp As Object
8 z5 z, m1 s8 Q5 H# R! m! dDim Part As Object
( r1 d3 {  U- E) X- [! `Dim sldPath As String

" I; B; b* Y  U: V2 u2 W0 C4 f( U和楼主一样打不开装配体8 e* _6 _5 M0 _5 O! M! p* V
发表于 2022-2-10 23:22:01 | 显示全部楼层
多少积分可以分享
发表于 2022-2-18 10:31:55 | 显示全部楼层
kbisi 发表于 2021-11-28 13:447 t" i* l) Z: x+ \! Z5 `4 s
希望可以得到解答
7 D) ?4 p& j2 m) k1 `
无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。
3 s; [3 \. b( m3 W( _经过测试,下面的程序可正常打开零件和装配体
$ o+ \  r. w( l- F+ k, b
, h" K$ G+ L5 F' ******************************************************************************0 t7 P+ Q0 ^$ z
' 读取指定目录下的Prt/asm文件,关闭1 s8 [  x( h/ A0 U
' ******************************************************************************' v1 I! ?$ n* i
Dim swApp As Object
- v) z6 H5 _5 u4 W, B! D3 K2 \0 ]; f& Y. O. e3 _
Dim Part As Object
% N: {' A% R9 ZDim boolstatus As Boolean
4 [% V$ B1 B& j: @3 p2 ]1 m: w9 c5 eDim longstatus As Long, longwarnings As Long
( q7 a% ~0 u. a! V2 Q8 X; E'Dim sldPath As String
% d( ]7 Z, J9 o# y' q1 U5 K( V9 aConst sldPath As String = "E:\3Dtest\BOM1\"  '设定目录" @/ t  S1 e" c4 o5 I( y

2 c% X& M4 n% O( B4 bSub main()% }/ w4 r8 z8 q; V/ E
+ T8 \# H6 s% v& C" F% `4 s) v6 `
    Set swApp = _
- D+ L- {; S  V2 D9 p& w    Application.SldWorks
, G  x! o4 K4 ~& X( s    Set Part = swApp.ActiveDoc3 P- V. B% W- D0 F- ^  }' P& ^
        
( h! V% `! N: V) G* G    swFileName = Dir(sldPath & "*.sld*")
2 z2 p5 s" k! e4 Y/ r. f( D5 F
) e+ n1 h1 T8 T' `- L    Do While swFileName <> ""3 a* Q- J; T. @* s3 X
        Set swApp = Application.SldWorks. D2 V# N4 _/ X/ \
        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1$ L0 W$ i; o& J+ E$ [1 t! e& f* P+ Y
        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
1 s8 k5 Z. g# o" K# s
: ?8 K9 I$ j2 n# K" z: F; M        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)" k' z( x# K: u+ Z! s
        Set Part = swApp.ActiveDoc
! f8 y. O! g1 S) }        'Call plmain2 G9 L" g1 w6 T* G
        'Part.Save '保存$ E: R( X; ~$ U' \1 U- \
        swApp.CloseDoc (swFileName) '关闭零件
& f4 J0 U5 [* y# _; V- `        If swFileName = "" Then Exit Do:
5 v4 h. {( E- T' u        swFileName = Dir '搜寻下一个零件档案名称
1 T9 z. ?, G5 j3 P3 q/ S! T5 Z    Loop '循环搜寻/ W  Z; V$ {, x: r  R7 E
) q9 K: P; m# S( k
End Sub
" Z3 V% J2 b, E$ C  a* D5 t
, J; p% d3 Z7 ^) H
. f7 [) r# v* j* U0 k8 F$ E% z& v
发表于 2024-1-7 12:50:21 | 显示全部楼层
能提供你成功运行的一个代打为参考吗我的一直报错
# l$ w$ w4 f3 Z6 O8 z9 t9 Y
! G) {) ^6 Z+ C9 H7 _/ z
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-9-19 17:00 , Processed in 0.069299 second(s), 14 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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