思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。7 V2 X7 d. O7 T4 F
* r0 z l6 H9 Q1 F9 _
Sub main() m9 f8 S$ ]) O b W, q- Q
'打开EXCEL表格开始; |- ?' O: j! D4 R$ a
Dim ExcelSheet As Object/ }. G9 r3 N) P6 B6 \
Set ExcelSheet = CreateObject("Excel.Sheet")
' u4 b) ]+ H* ^3 k* QExcelSheet.Application.Visible = True& T o- }* A' ^* ~% F& s
'结束2 U" ~3 _1 P! P! r$ x6 }# ^
9 M/ ?* v+ \) E4 @ b4 Z
'填入数据开始
; p( P" I# m' WDim d
) {+ @: g0 F" tSet d = CreateObject("Scripting.Dictionary")
* i) z: f) N' @* lMsgBox "请输入数据"
( [" a- ?- _; F' {& N) q J'结束% `1 D, D8 \( o. |
7 o" P* q$ T" X8 ]6 n1 N- f6 c
'数据写入字典开始: T1 R& ?! G" c0 J( w. s
Dim Myr&( Z& b6 T7 I/ } V- o3 B
Myr = 500 '需人工设定) X9 `. C5 Y: _* r8 m$ ]% L
For i = 1 To Myr
- y T. [9 v' md(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value
" M5 `& n4 D4 R( r' eNext
6 h& z, y- @$ q7 m7 p: C'结束& j, i* c4 ^6 v V2 _. A7 y2 w0 V
2 I1 p& D4 x3 R( ?" ['将字典数据逐个写入到零件开始
- h. l6 e) W7 x' C( N4 j$ jDim swApp As Object
# K) i" b0 l" u+ s2 W6 E7 oDim Part As Object" }* B, l0 Q* ~- C1 ^
Dim longstatus As Long, longwarnings As Long5 F; C& E' Z1 ?
Dim myPath$, myFile$* Y e. P8 O6 S& R& f' d
8 j5 ?" B4 v \: O. _% k4 ~0 i
Set swApp = _* N. m3 w2 J% v0 z: X/ r' N! L
Application.SldWorks
2 }7 w' R6 ]# z/ c- A4 G0 ]4 A7 ymyPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量
% Y! P3 w* n" \4 W) a/ @* g8 `: TmyFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件
5 E- g. ? M7 y4 ]# sDo While myFile <> ""6 ?& \) f4 M* y0 `6 B
Set Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)
! \' E9 \+ P y x8 R2 {
( O% g$ m! I t+ g9 f7 H* u; T* V '单个零件写入数据开始
. {( F4 o$ l0 P n% a8 Q'Dim swApp As Object
0 r8 M! |4 ~+ F! q3 x" eDim c As String7 _& R+ Y: C% Q5 @7 E
Set swApp = Application.SldWorks
: b. H: G6 w: ZSet Part = swApp.ActiveDoc! b% Y1 J# }# M5 Z+ v
c = swApp.ActiveDoc.GetTitle() '零件名( z. p9 \# E" W* p
blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c)); D- k3 b& u# ?9 h) y5 V
'单个零件写入数据结束
6 ]3 F+ A( l/ e/ N; G" e* w4 N" Y) K9 f2 `" ?
Part.Save3 M6 X- a( I5 r4 z, U/ u6 k @
swApp.CloseDoc myPath & myFile
9 P6 C- M2 ^/ ~- J! {myFile = Dir '找寻下一个*.文件
& a: A0 L$ r1 ?2 TLoop* S D6 }9 y8 `4 p7 b
'将字典数据逐个写入到零件结束! M" o- r: s+ u' C( Z/ _
End Sub: \' x( m, \5 S: N6 W/ @
|