機械社區(qū)

 找回密碼
 注冊會員

QQ登錄

只需一步,快速開始

搜索
查看: 3261|回復: 3
打印 上一主題 下一主題

將BOM表中零件的數(shù)量寫入到零件圖的屬性中的VBA程序

[復制鏈接]
跳轉到指定樓層
1#
發(fā)表于 2019-3-2 12:47:00 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
思路是將SW的BOM表導入到EXCEL,然后將EXCEL的數(shù)據(jù)(零件名+數(shù)量)寫入到字典,然后通過文件名來匹配到字典里存的數(shù)據(jù)(數(shù)量)寫入到零件的數(shù)量屬性。其中提示請輸入數(shù)據(jù)時需要粘帖數(shù)據(jù)進來。Myr = 500 '需人工設定。歡迎大家進行補充、使程序更智能。$ C* }& C1 S) k9 Q' H3 P
$ m- J; g& j5 J+ |/ X& b9 ?. W/ _
Sub main()2 h$ L+ b+ ^7 I- l
'打開EXCEL表格開始/ g' M3 J! b$ m9 q8 u5 |5 e" j
Dim ExcelSheet As Object1 Q0 y) C# S* p  q% R8 \/ M
Set ExcelSheet = CreateObject("Excel.Sheet")# ^2 k3 U; P: V' k
ExcelSheet.Application.Visible = True
4 t# A7 [+ v- i' x% V  v6 Y7 ]'結束
0 f1 l8 E1 t/ P: f
9 A, @0 d4 h; W4 t, @'填入數(shù)據(jù)開始/ X2 b" L- }8 F% T$ F' P
Dim d
+ Y3 `- S; f1 t7 F3 x: q8 QSet d = CreateObject("Scripting.Dictionary")
/ Y/ h( L! R# u( f  |MsgBox "請輸入數(shù)據(jù)"9 J1 X- O5 _; Z( Z' L! m6 `5 M5 I
'結束4 C5 t" N; U% |* D. _" N

4 E) ^* n# a: w1 b% G'數(shù)據(jù)寫入字典開始
: b- D7 s- `, q& yDim Myr&3 ], B( H- L! w( H, L: Y- n. \  I
Myr = 500 '需人工設定/ J" c4 Y  Y8 ]) U, s6 m
For i = 1 To Myr6 n% l5 V9 O: [; R
d(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value$ Z# i# i. K  n/ C
Next
3 ]- J7 t% A" n0 A' D'結束
0 g- j4 ?; ^, t% Z/ f( |4 `% j) `. S& ^
'將字典數(shù)據(jù)逐個寫入到零件開始, X4 c- F  E2 p5 D+ g
Dim swApp As Object( i) t4 C. c* I) J! y' p0 x
Dim Part As Object
. ~6 L2 I" x9 O& H. b7 k$ @5 h5 _Dim longstatus As Long, longwarnings As Long
' l# a' H# _6 g" a1 I+ @# oDim myPath$, myFile$2 n0 k( w* ]9 L6 H  E6 \

9 g! E* y0 k; [* WSet swApp = _2 s, Q+ D- C, H6 y$ \% l* i: A
Application.SldWorks1 R8 v- {: H5 X! S! @9 f
myPath = "C:\Users\Administrator\Desktop\1\" '..........................重點:把文件路徑定義給變量
. C" E: t" W% X! ^/ [4 z1 dmyFile = Dir(myPath & "*.sldprt") '依次找尋指定路徑中的*.文件
, R# Z" \2 i$ a6 S9 ZDo While myFile <> ""$ a2 K' ~7 V, r& ?/ T7 i# H
Set Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)7 Q. @; z  k+ [
3 _7 H  {- Z$ r9 J; P
    '單個零件寫入數(shù)據(jù)開始( R; j; X0 @6 X1 |# x
'Dim swApp As Object1 A4 M9 r9 I# W) ?1 Z
Dim c As String; a; H9 ^% D2 c8 S/ @
Set swApp = Application.SldWorks/ X" B8 d1 d8 `. R
Set Part = swApp.ActiveDoc
, M3 ]+ w5 A% q  D# cc = swApp.ActiveDoc.GetTitle() '零件名
0 Q3 [0 R! b/ O: U/ d+ x6 n5 U7 nblnretval = Part.AddCustomInfo3("", "數(shù)量", swCustomInfoText, d.Item(c))7 }9 C# p' g$ }) D
    '單個零件寫入數(shù)據(jù)結束
6 ~) W4 t& N- g9 \! i/ m7 t$ ]. G$ J+ W  l8 @% T
Part.Save
2 x6 e2 [) _% `; EswApp.CloseDoc myPath & myFile
: X2 h& T; ~7 l  }4 ]8 qmyFile = Dir '找尋下一個*.文件
& ]0 W9 M' f& f! `Loop
+ U4 s( q: \$ f! }'將字典數(shù)據(jù)逐個寫入到零件結束6 a" L0 D/ L6 _( t) p& w. z
End Sub: L! M2 V  l% h& w( S% ?

評分

參與人數(shù) 1威望 +1 收起 理由
Miles_chen + 1 思想深刻,見多識廣!

查看全部評分

回復

使用道具 舉報

2#
發(fā)表于 2019-3-2 13:13:18 | 只看該作者
謝謝樓主分享,期待高手進來進一步完善
回復 支持 反對

使用道具 舉報

3#
發(fā)表于 2019-3-25 15:56:53 | 只看該作者
樓主這個,數(shù)量寫入 需要是都改為一個數(shù)量吧 不然容易出錯
& S( f! A, f+ f2 S& W+ s我之前選擇的方式是:excel 內(nèi)輸入bom表,零件名稱 及 需要寫入的屬性
( U. A  ?9 w6 B9 S' L# M- A然后通過excel 調(diào)用SW,逐個打開part,寫入cell內(nèi)的數(shù)量 或者 其他屬性,再關閉
回復 支持 反對

使用道具 舉報

4#
發(fā)表于 2019-3-25 16:05:20 | 只看該作者
哦 剛開始沒看清7 F1 ^& V/ C5 w
你是全部寫到 數(shù)組里,然后做對比……,以裝配體樹結構為準5 ~, X1 o( v2 y/ l0 y" `/ w
我是直接按excel 零件名,順序調(diào)用打開文件 ,以excel為準
回復 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 注冊會員

本版積分規(guī)則

小黑屋|手機版|Archiver|機械社區(qū) ( 京ICP備10217105號-1,京ICP證050210號,浙公網(wǎng)安備33038202004372號 )

GMT+8, 2024-9-23 01:34 , Processed in 0.052472 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表