|
发表于 2022-2-18 10:31:55
|
显示全部楼层
2 M x5 M3 Y1 n" g B( b8 d& J
无法打开装配体文件,是因为你把文件类型判定的语句放在循环外了,挪到do...loop内即可,那个call语句调用了什么?用不上可以先屏蔽。
7 F0 J& F- V) ~) H经过测试,下面的程序可正常打开零件和装配体
2 S2 i' ~7 P0 S. z0 B* i1 y: Y# i8 s D/ I9 L/ _
' ******************************************************************************
! h/ s" W$ k* f' 读取指定目录下的Prt/asm文件,关闭
3 M. W4 p5 X. r+ Z1 j/ V: a' ******************************************************************************' f6 w5 w9 r# R) ^
Dim swApp As Object3 n; N* t& r: f4 i( b# O
4 l3 ]! F$ w5 b; b5 T' |$ DDim Part As Object
+ `8 v. n' e' h3 UDim boolstatus As Boolean
2 V' R* w3 l. L9 l0 {& `* ?" `8 EDim longstatus As Long, longwarnings As Long
* C" C; }, t* b* g' b, u'Dim sldPath As String
; j, E7 o0 R+ R0 ]9 t! d. j: K2 eConst sldPath As String = "E:\3Dtest\BOM1\" '设定目录
, Z% a$ K- i. ] B, W% K: y8 F9 i3 _+ U
Sub main()
0 B8 Y( e, X' |5 X9 G6 g& ~% m d& V% w& N5 g* L
Set swApp = _# P/ F7 t1 R J2 K4 k
Application.SldWorks, t4 h3 W: N: r* M4 B
Set Part = swApp.ActiveDoc
$ }; V0 l" V& o* j; e % t4 T' E, i3 i! q% o
swFileName = Dir(sldPath & "*.sld*")
g7 N) y( j) I, d0 z$ H# H( e! m4 |7 m0 u) ~: _- S0 O9 n4 e
Do While swFileName <> ""* K( }' A# [$ D0 ^1 O
Set swApp = Application.SldWorks
3 ~8 W: m, K( H/ s/ B. t If UCase(Right(swFileName, 3)) = "PRT" Then swFileTYpe = 1* x; X5 w2 y- ~' L
If UCase(Right(swFileName, 3)) = "ASM" Then swFileTYpe = 2( T1 K3 A) X+ D; _. _! ]
+ A- |$ ~& e; x- z* | Set swModel = swApp.OpenDoc6(sldPath & swFileName, swFileTYpe, swOpenDocOptions_Silent, "", longstatus, longwarnings)
2 [2 s' q! B! Y0 r4 ?7 G- o Set Part = swApp.ActiveDoc
9 x$ t, W1 F0 X! [ H' R, T 'Call plmain
1 w, a/ X3 X) ^- K+ _ 'Part.Save '保存
% q2 ?: P) C7 N7 d+ v$ O swApp.CloseDoc (swFileName) '关闭零件# f; N' }' \8 T
If swFileName = "" Then Exit Do:6 u% V G' S# ?6 R8 H# L
swFileName = Dir '搜寻下一个零件档案名称* G- i0 m* p/ q+ I: K
Loop '循环搜寻5 s, j5 Q% \- ^' t8 h1 Z7 k! G
. k+ C( V2 @# PEnd Sub' Z6 T7 ^2 I+ C) b) T) m1 m
, F: b6 T2 c- C9 w0 Z2 P2 r! c5 E" N
|
|