|
发表于 2022-2-18 10:31:55
|
显示全部楼层
& g/ N! e+ q3 B4 s9 c3 f
无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。
. _3 Y. Q, _; _8 t. z; h6 J$ ?. N经过测试,下面的程序可正常打开零件和装配体0 E3 s! v# M* j# ?* Y; ^6 T; d. {
4 o7 i+ b, W8 z% Z
' ******************************************************************************1 Z; k, ]& v# f8 x) G
' 读取指定目录下的Prt/asm文件,关闭
9 W" Q5 ]6 `# W+ v* I' B' ******************************************************************************- \9 W6 v6 `& l
Dim swApp As Object: s# }5 c# d: D
$ |" q/ C; F3 q3 n5 X
Dim Part As Object
2 L0 j2 D+ C2 `Dim boolstatus As Boolean
1 @, p7 P$ v$ e+ _7 y* WDim longstatus As Long, longwarnings As Long4 T7 {+ s; H/ R6 }
'Dim sldPath As String
. Z2 k" t- J, [( v) ?( Z6 BConst sldPath As String = "E:\3Dtest\BOM1\" '设定目录( ?6 G, p8 j* X& R/ t
3 h/ n2 D# m G6 N- V" I# lSub main()7 k5 Y, n& h, U
- `! }1 z5 ?* h# z$ q
Set swApp = _
: ?5 Z F8 l% L" G Application.SldWorks
! }3 _8 n# f" L2 j2 {! H, D Set Part = swApp.ActiveDoc
5 U* u. b3 S3 e9 h" ?/ f ) V, J# f c( b0 O( |
swFileName = Dir(sldPath & "*.sld*") . ]- l. P: P' t1 B. z
$ }, s( y+ i" |1 m6 j- P& D4 _ Do While swFileName <> ""
" T& ^& u3 i$ i! C! E, M Set swApp = Application.SldWorks/ G; K5 b8 c5 H
If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1
1 i( X0 h. W1 q If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2* K+ b$ [% Y9 z
7 w* _- D9 W, u/ g! V; F0 e Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
0 v# }% t0 c+ I+ T Set Part = swApp.ActiveDoc: z- c* k# c3 A' B. f o
'Call plmain
* G, c) S0 s6 U5 `9 L8 g" W 'Part.Save '保存! M7 S6 n8 Q5 r( M/ S8 b- E3 ]
swApp.CloseDoc (swFileName) '关闭零件
- Y4 J3 I/ F2 ], [* \ If swFileName = "" Then Exit Do:
( n2 P$ j+ ~2 f swFileName = Dir '搜寻下一个零件档案名称. r& U) X& |* W8 i$ K; c
Loop '循环搜寻
/ E5 K* U" Y, Z) V
8 w) d/ l, Q4 Z0 f; e; GEnd Sub9 j* m3 t( ^6 H- k5 e k/ Y
0 W$ ?# p. X+ E
$ }- r5 Q4 p4 {7 o* z
|
|