机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 醉生梦
打印 上一主题 下一主题

solidworks 批量执行宏

[复制链接]
21#
发表于 2021-7-15 19:53:30 | 只看该作者
观摩一下
回复

使用道具 举报

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

使用道具 举报

23#
发表于 2021-11-28 10:05:46 | 只看该作者
Dim swApp As Object- h- a4 M: d& @% _7 W4 ~
Dim Part As Object$ t' C) e4 K: E7 r# P" m  w8 k1 Y4 v
Dim sldPath As String# b1 ^+ L8 e" o% S# P6 I7 }

4 q% n5 V7 @" ]) _9 ]* N' mDim boolstatus As Boolean, d' e$ G& N! J' f) A6 }
Dim longstatus As Long, longwarnings As Long; s: ^8 `; c% D2 t/ a: x
' N; X) V9 b  k& O! ^

! n0 ~4 N9 s& l4 B0 Q7 d
7 T7 ]0 n' u4 J) J$ [" z. b
' L3 Z4 [, t# W1 ?6 s7 s0 \$ N  bSub Test()
7 U9 `9 s6 O# v7 S* lSet swApp = Application.SldWorks5 G' w* r4 Q7 B6 C& N3 }# k3 [# r
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
" K! y2 g2 f+ Z7 K  [4 D, _% z, x4 t6 `5 M' @; |
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称- f& v5 S* J, g. t, b# ~
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 10 q0 V1 C$ Z6 e! f) N/ p
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
% {$ s+ z% ?; G9 V+ ~
* u6 s- t+ z* B$ GDo While swFileName <> ""
7 I4 r' ^9 f8 d: U" r# N) _
; V# {) R( U; E5 D1 ZSet swApp = Application.SldWorks" h  J3 H6 s. r
* |# W# f) R4 q* u5 O4 C
'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件, ~1 X. U# V6 Q6 ]1 J
$ {! t1 D# N3 U8 u$ s8 c4 u
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
" Z6 U  a  Z2 h5 X3 o; O# G9 Z5 s

# M  [5 n, o0 u# w* y- M
& h  W# S+ d0 J4 I1 i
; |% D9 l0 m0 J/ f% l7 X) |/ ?' o8 F
Set Part = swApp.ActiveDoc& l% q: E$ A' w( u2 V/ ?- k
7 F. O( K; H2 O2 _
Call plmain
% ]- u% G, F2 a3 a& x3 Z# |8 A" F5 S" w  Q) k, ^3 T* s( Q
6 V+ d. b& y! X
'
; r; W0 |9 m# E2 b: Q$ z4 B2 f4 [9 i5 R

8 u) ?+ G% A8 Q  K: r; I. X
+ o$ B1 K$ @# p- k9 S) h) PPart.Save '保存%
. z9 y: o1 q3 g. m1 v- J; o/ eswApp.CloseDoc (swFileName) '关闭零件. W2 j7 q- j0 y# I7 \

4 i& w' S) y) ~# eIf swFileName = "" Then Exit Do
! H, V% V* m3 v, O8 M9 N
- g9 H/ z- |, G' j
8 [( [  B' O" b9 b3 v1 ?swFileName = Dir '搜寻下一个零件档案名称05 V! p2 T% B0 ?$ |- U) o
. P9 W+ q1 ~6 f& ?' X( [
Loop '循环搜寻
# ^# B9 J- v# H. V+ I5 {. _% wEnd Sub$ ]5 L3 L! D, F& i& |* s5 m! v
按F8一行看程序错误为什么老是跳过Then swFileTYpe = 2
回复 支持 反对

使用道具 举报

24#
发表于 2021-11-28 10:06:58 | 只看该作者
Dim swApp As Object* @# h/ g8 J6 r0 Y
Dim Part As Object
( p( I' a% j/ L% ?2 ]( [( X+ J3 ]% p! xDim sldPath As String
  W: W* B/ B# F3 X9 L+ \/ e. M: n* V; g% O6 P
Dim boolstatus As Boolean. u+ q/ S2 C% M5 x$ {1 G( S
Dim longstatus As Long, longwarnings As Long* r; P- Y" G/ F4 y
% f# h3 {0 p* r

  {" [( x  ?- l7 t  ~- l- g8 Z1 y9 |% F6 n% u: c1 y: _

2 N2 K) s' j) _' P" ^Sub Test()
  D! W% \# ^$ l# ~: ~2 B: PSet swApp = Application.SldWorks
7 A6 J9 V+ L3 m' D3 RsldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录# h7 t5 ^- z: K7 g; D! c  T0 w4 ]$ b
: O% Q2 f) y8 ?
swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称- y* V$ Q' c  p
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
9 g$ z2 U% a* l3 f: U" O% i- m5 bIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2% u. L2 W8 ?) f0 u" s& E
5 _+ n& N4 d3 v1 B, ?: }- e4 a; X/ ]
Do While swFileName <> ""
) I. P9 k' p  c* z! ~5 o. [
( Y- E3 ~5 Q0 r- C; K% jSet swApp = Application.SldWorks
6 ]4 F3 P3 B1 I3 _
) x2 V# y+ [& \0 V- D'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件7 m) g% q2 N& q! e+ L; {& y% X
6 t" Z$ e7 F. C2 p$ `) T9 V
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)+ j0 l0 c7 m/ w' J" K
/ ]; [, b7 A8 w% O: I6 X( g& q
, o; [" P4 f6 L) u! G
6 K& L0 x2 Y8 w2 ?" |7 u: _4 g

1 B( I0 m  x- ]- a
, w' I6 V. L% M/ S. jSet Part = swApp.ActiveDoc
  ]/ o  O5 W0 y% x- s  R/ s$ _, R4 ?6 R# J
Call plmain% o8 H* E2 }0 X1 k- u

: [5 u; v) v5 }3 x1 h5 N
/ \% Z7 ]4 N9 P7 }/ o'
# ]" c4 K4 H% h( J3 e1 |
  J4 q- H3 ]& _
- ^/ I6 E3 G2 X. w5 e  Z
# k# b/ g, e; U" S- x- BPart.Save '保存%
& g; X" k* c) UswApp.CloseDoc (swFileName) '关闭零件7 X. |6 |' j  B6 V2 X

7 f" r  h+ ^8 E4 u- H0 ^5 `If swFileName = "" Then Exit Do8 i( ^: S% u5 V; _
! J$ E5 q5 T) ?! @3 R3 X9 k' ^& R$ y5 I

& d' W$ D% [) [% N4 ]! Q% _) HswFileName = Dir '搜寻下一个零件档案名称0
2 i' ]6 Z$ o, \& @5 B% M. y7 z, r8 T  A* Q" M7 J
Loop '循环搜寻4 W0 w. y4 o0 v' c9 T) _! I
End Sub
回复 支持 反对

使用道具 举报

25#
发表于 2021-11-28 10:12:10 | 只看该作者
Dim swApp As Object' {/ ?$ g  N1 q4 r( L/ S& J
Dim Part As Object
6 K7 |. ?# k6 F, F) `" [+ yDim sldPath As String
' a4 x  n1 n5 R; m& T* s4 WDim boolstatus As Boolean
2 h  ]3 P$ @# Y  ^' qDim longstatus As Long, longwarnings As Long
. {# f0 x: Y  nSub Test()
2 ~- K/ j0 E1 LSet swApp = Application.SldWorks. i' R/ s' ^$ C) I+ _" k2 q9 K1 k
sldPath = "C:\Users\kbisi\Desktop\实验\" '设定目录
4 |9 e: t/ x8 r1 p; |/ G7 V5 T. `swFileName = Dir(sldPath & "*.sld*")  '搜寻首个零件档案名称
6 _6 h3 D; z5 B2 o* ]8 IIf UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
5 J7 U' j$ a4 Z' |6 d) SIf UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2/ Q5 }* Q3 r3 j# N4 ~; [/ v# {
Do While swFileName <> "". l# X& P( _' X! q0 B
Set swApp = Application.SldWorks
" G3 j* L8 C+ c4 `$ f' a'Set swDoc = swApp.OpenDoc(sldPath & swFileName, swFileTYpe) '开启零件4 H$ k' e7 s" q$ Q4 ]
Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)8 E& e. ]7 J6 f! v
Set Part = swApp.ActiveDoc
. u6 G+ W4 _& `- W& Z3 QCall plmain0 {3 E! p' i' i$ Q: }) O" B; x
Part.Save '保存%
2 A0 W/ a: W) w- b/ jswApp.CloseDoc (swFileName) '关闭零件: N& V! a/ N, [5 o( ?
If swFileName = "" Then Exit Do
9 Y2 \) S6 G  b- F, H1 vswFileName = Dir '搜寻下一个零件档案名称0/ g1 ~  z* B* @' M& m" O
Loop '循环搜寻( o$ U3 o: ~6 ^: E5 P& J
End Sub   老是被跳过
回复 支持 反对

使用道具 举报

26#
发表于 2021-11-28 13:44:09 | 只看该作者
kbisi 发表于 2021-11-28 10:05
8 {% H/ I- V4 l1 \7 @+ G& FDim swApp As Object
0 m8 p' K* Q  W; YDim Part As Object' \5 }/ j9 k0 c! Q$ _9 l
Dim sldPath As String
$ M% U/ R- G3 q' E# F
希望可以得到解答2 n8 {4 b2 z9 M  `1 x2 T  n1 Y+ L
回复 支持 反对

使用道具 举报

27#
发表于 2021-11-28 13:45:15 | 只看该作者
kbisi 发表于 2021-11-28 10:05
$ I* B# V6 C0 BDim swApp As Object; i1 g, K5 q( j) j- k6 Y5 g
Dim Part As Object* |' U2 t. s; x" h
Dim sldPath As String
% ]3 f0 m. m# k2 V
和楼主一样打不开装配体
3 `4 f( R) Z, i! O: i" ]2 d0 e% P
回复 支持 反对

使用道具 举报

28#
发表于 2022-2-10 23:22:01 | 只看该作者
多少积分可以分享
回复 支持 反对

使用道具 举报

29#
发表于 2022-2-18 10:31:55 | 只看该作者
kbisi 发表于 2021-11-28 13:440 D/ z. k, _5 H/ L6 c
希望可以得到解答

. @: b, o* x5 x# h3 G' y无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。( Y/ X( N: [- D: G
经过测试,下面的程序可正常打开零件和装配体
  X6 E, x! M' H3 H" e! }+ l& i; K& v* c9 g& r5 T# L+ f- d5 ~
' ******************************************************************************; }8 y, A  P4 \/ E# A5 l
' 读取指定目录下的Prt/asm文件,关闭, M/ F% l* A0 h- C
' ******************************************************************************: N3 r) X5 b( F) j
Dim swApp As Object+ ~8 f, r4 Y" f

& U. `0 b# Y+ @1 \, M9 w/ Q! M, |Dim Part As Object
2 j. b1 ?$ [8 a/ fDim boolstatus As Boolean
% y' b7 r& _+ e, U+ J& M& c5 lDim longstatus As Long, longwarnings As Long. [. m8 C1 m) P, ~' T, U3 l5 B
'Dim sldPath As String
3 {8 V. _2 M& Y! U% L! U" x  kConst sldPath As String = "E:\3Dtest\BOM1\"  '设定目录' H3 @$ D6 R3 f: h7 ]# m

4 m4 Q5 b& n2 @4 d$ u7 L3 cSub main()
8 l4 R1 Q9 ~! o, X5 E' P" \8 t; [$ D4 P( L1 p
    Set swApp = _% _: R4 {( d& \: g% W+ i( I3 L
    Application.SldWorks
4 A7 ]3 Q. l  k* q4 r* c# o    Set Part = swApp.ActiveDoc; B; b' o( [6 j3 S/ F% I
        3 c/ f0 j& u; F! }) M
    swFileName = Dir(sldPath & "*.sld*") $ X5 n* w  P' ~2 x' @
/ d' ?% w4 n! M- y0 Y) ]$ R
    Do While swFileName <> ""% ^( c  u. g, Q0 ]  n4 F
        Set swApp = Application.SldWorks
, @$ K+ z$ ^) U% C        If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
: f. Q- ~# ]5 J4 v) x6 M        If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2
+ l. N/ s/ T' H
3 i% g" h; F3 @# Q& M        Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)" c5 K/ G8 \+ s3 T6 \
        Set Part = swApp.ActiveDoc& J, [! b0 E3 ^) k
        'Call plmain/ n+ u5 e) k) R5 `  j$ J4 o
        'Part.Save '保存1 R& Y# M; n8 n+ e: d) A6 c- h* R
        swApp.CloseDoc (swFileName) '关闭零件
. R; F% s$ m, v2 c8 {5 o# X: v* v        If swFileName = "" Then Exit Do:! {% r/ ]- \# \& ?; n- `
        swFileName = Dir '搜寻下一个零件档案名称( d# U3 Y7 Z3 g- t1 ?
    Loop '循环搜寻
6 [! U3 L) a  Q4 _8 c4 O4 v  y+ }# i0 @8 y; [5 v
End Sub' [% v* t6 u, i: f
. ~* I# X# f8 U1 H* l0 P
) @8 \0 K: }4 i0 X" S8 B; D
回复 支持 反对

使用道具 举报

30#
发表于 2024-1-7 12:50:21 | 只看该作者
能提供你成功运行的一个代打为参考吗我的一直报错
! k! n' b8 t9 v2 F3 b( A0 p( k5 d
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2024-11-22 16:24 , Processed in 0.054424 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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