找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4255|回复: 3

将BOM表中零件的数量写入到零件图的属性中的VBA程序

[复制链接]
发表于 2019-3-2 12:47:00 | 显示全部楼层 |阅读模式
思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。) M% O0 r* C5 H  W8 `' t2 w- a
# x: g# y  _& P% x
Sub main()
7 O/ x8 W0 i& B+ e: B  t5 R4 s5 c'打开EXCEL表格开始
: g5 V5 D+ J& ^Dim ExcelSheet As Object0 v; m6 V2 o9 {6 \" n1 S
Set ExcelSheet = CreateObject("Excel.Sheet"): v! u. W; h$ K
ExcelSheet.Application.Visible = True
  U/ B& v) P2 l+ E7 W% X'结束
1 }3 w2 c! j6 d( |% s% ?
3 f: ^( W7 l3 v+ F- J8 T9 U5 i'填入数据开始. U$ N2 i# `! E# x4 B& n
Dim d8 M0 C. s& S- \
Set d = CreateObject("Scripting.Dictionary")
% v; c. z( x! `( nMsgBox "请输入数据"
# E9 E1 X5 ?  m8 @/ g- T'结束1 h  Z0 a( Q9 `) Y- v6 X

+ Z- D  C) z/ T9 J* D" B'数据写入字典开始% n* o0 }; S- Q+ b$ r' H
Dim Myr&; w9 }: `, e  n; k
Myr = 500 '需人工设定
( Z# b2 C9 X) ^9 Q% V0 q, K# |For i = 1 To Myr) ?( c: Q" r( c: f* L5 a
d(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value
( C; ?& c! Y/ \7 ]Next
% h3 U/ w' C0 o9 H'结束4 W& V$ |; y* T* R+ C

8 c% a  V- ~, h! G7 a5 P'将字典数据逐个写入到零件开始9 Z& O6 E/ b. @% _$ _
Dim swApp As Object
2 }* ^* c' D' I4 G  y. M. |: B- `Dim Part As Object0 ~( A4 Q6 h& w  T  f
Dim longstatus As Long, longwarnings As Long
# }3 [2 [2 q+ v; q4 MDim myPath$, myFile$
1 F7 A4 L$ x3 z; |/ [  J
: G& d1 ?; E, ~: p1 hSet swApp = _  z" v$ Y' W8 z( z& [; g
Application.SldWorks+ n$ u6 i; r( N3 e
myPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量" z- G; \3 K% K# k
myFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件$ W# F0 W7 f% K
Do While myFile <> ""
2 q% g' N% w& Z, G) b- [Set Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)! P; y$ }5 B+ ~7 z$ \6 k

" I2 f# W2 m7 C    '单个零件写入数据开始0 Z7 i4 ?' ?" X1 A  l; @1 a0 H- o% |! P
'Dim swApp As Object2 w1 Z' H* g# O( Y5 I7 g/ L
Dim c As String
! q6 z" _* g  q& ASet swApp = Application.SldWorks. k8 F2 h7 l& N6 h8 a/ P; O  }
Set Part = swApp.ActiveDoc
2 \% K* y9 @- Z. A! Y" |7 S1 I: [c = swApp.ActiveDoc.GetTitle() '零件名+ M( L! x; J+ ]1 k4 L
blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c))
7 G5 ^8 h: D* X* T, P5 d+ k& ?    '单个零件写入数据结束
$ e, b% S! V3 i0 Z- a, \% S6 Y0 F4 H$ i; p. A
Part.Save
3 _3 M/ i2 m7 e* lswApp.CloseDoc myPath & myFile
! |: ]( R* K  r( o0 T+ gmyFile = Dir '找寻下一个*.文件
! U& T# D/ f6 H- FLoop$ Q) G: b1 Q# F
'将字典数据逐个写入到零件结束0 y) h2 Q8 ^$ u1 C: |7 q* N
End Sub
1 B4 k6 A) O! `% s

评分

参与人数 1威望 +1 收起 理由
Miles_chen + 1 思想深刻,见多识广!

查看全部评分

回复

使用道具 举报

发表于 2019-3-2 13:13:18 | 显示全部楼层
谢谢楼主分享,期待高手进来进一步完善
发表于 2019-3-25 15:56:53 | 显示全部楼层
楼主这个,数量写入 需要是都改为一个数量吧 不然容易出错
' \8 ^, [$ q6 S' q我之前选择的方式是:excel 内输入bom表,零件名称 及 需要写入的属性
8 H" j3 W/ ^' A! D$ P6 o9 n4 S然后通过excel 调用SW,逐个打开part,写入cell内的数量 或者 其他属性,再关闭
发表于 2019-3-25 16:05:20 | 显示全部楼层
哦 刚开始没看清! X8 T. Y* Q3 B/ s
你是全部写到 数组里,然后做对比……,以装配体树结构为准% ]) t  G; ~$ L% `" d
我是直接按excel 零件名,顺序调用打开文件 ,以excel为准
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Archiver|手机版|小黑屋|机械社区 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-8-10 14:03 , Processed in 0.058476 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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