机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3436|回复: 3

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

[复制链接]
发表于 2019-3-2 12:47:00 | 显示全部楼层 |阅读模式
思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。
" \2 ?0 U- t. Z9 A
' }+ I: g2 h' i, v! k# oSub main(): M$ P: }6 X2 V' ^
'打开EXCEL表格开始. T* ?2 ~0 W+ T+ }
Dim ExcelSheet As Object
7 V( P8 R5 g! w8 \2 I" qSet ExcelSheet = CreateObject("Excel.Sheet")8 v/ N& ~5 r' y. p1 U0 v
ExcelSheet.Application.Visible = True
3 o! F- F8 b% y1 l% L( u% H  d'结束# |! r; Y. l) I, u' F
' i1 F# z% U% C1 m  r. c
'填入数据开始
& g" [5 D6 c& R2 |. ]8 SDim d
/ V& x( {& S4 ~6 B5 F7 z: ?- uSet d = CreateObject("Scripting.Dictionary"); w: K, r3 U9 S1 \; _* q6 N
MsgBox "请输入数据"
9 g) K' F2 C) g'结束. N& b6 j. U3 m/ n; N6 o

8 t0 [2 F2 d6 a7 U9 j'数据写入字典开始, Y# ?( {% I; W; B/ {
Dim Myr&
5 x0 E# y* P# J5 m# T8 f! wMyr = 500 '需人工设定
) c( ?) f1 C0 t4 F1 d( m) VFor i = 1 To Myr# Y3 X/ A# m( t% b: f; ^+ U! e% _
d(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value8 k8 {5 q% l4 j6 ]
Next
7 a4 b+ c0 i7 s! f- J. U'结束
% d, G" ~9 I( o- F8 O  s# G5 V( h5 U; M$ S) ^$ ?; D: C$ k, T
'将字典数据逐个写入到零件开始
% X* h# A: h. ?, zDim swApp As Object
' D" L% g! M) r( x2 dDim Part As Object% _' [+ M  Q/ y( M0 V# Y- A
Dim longstatus As Long, longwarnings As Long
5 e" ]5 R: X8 Q9 [- cDim myPath$, myFile$
3 k5 Z  e5 |! t- A& r" \
4 n& H. @, N" z) K! ^0 y; KSet swApp = _! f% F  o% b) `9 d- d9 {
Application.SldWorks" Z4 X& p/ m# q0 k1 O/ F$ g
myPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量
+ l! p1 n  L8 Y0 X$ wmyFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件
7 s2 \6 h2 V* i* U+ t  VDo While myFile <> ""0 T5 ~2 m- U/ c0 f* K5 e
Set Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings): s( g$ D3 @; R4 Z" v; m

# ?% I0 u/ s" P0 _0 `9 u3 s    '单个零件写入数据开始
7 j6 n5 r2 w% X4 x" |( O- O# ?/ j'Dim swApp As Object5 b7 u  p7 k: i  n6 P
Dim c As String
% `2 e: B: O$ n, |Set swApp = Application.SldWorks& v' o$ n/ F  ~
Set Part = swApp.ActiveDoc0 ^8 V! N; t* V- ~  `3 ]2 ]! \
c = swApp.ActiveDoc.GetTitle() '零件名. v% [! k: e! ~1 |1 e
blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c))
# q2 z5 x4 W. A! k. j    '单个零件写入数据结束
/ N. Y$ M: L4 ]! K2 t4 Z5 l% B5 `: u% K
Part.Save
4 E; [& |/ t" m$ O# f* i* eswApp.CloseDoc myPath & myFile/ }& y! h9 M3 ^: D5 k, Y" B6 P
myFile = Dir '找寻下一个*.文件( ]+ g+ R6 s- ]+ L* F
Loop! T$ a7 t9 a, c
'将字典数据逐个写入到零件结束
5 F8 m/ `" q" i. l9 L' c9 [6 pEnd Sub& W3 _! m' K6 T) e+ y" d2 N

评分

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

查看全部评分

回复

使用道具 举报

发表于 2019-3-2 13:13:18 | 显示全部楼层
谢谢楼主分享,期待高手进来进一步完善
回复 支持 反对

使用道具 举报

发表于 2019-3-25 15:56:53 | 显示全部楼层
楼主这个,数量写入 需要是都改为一个数量吧 不然容易出错
6 Q/ Q5 j2 C) P, J) O我之前选择的方式是:excel 内输入bom表,零件名称 及 需要写入的属性5 `. [: E: F/ P  H0 H  V
然后通过excel 调用SW,逐个打开part,写入cell内的数量 或者 其他属性,再关闭
回复 支持 反对

使用道具 举报

发表于 2019-3-25 16:05:20 | 显示全部楼层
哦 刚开始没看清* q! m4 {, |! W' D
你是全部写到 数组里,然后做对比……,以装配体树结构为准
; n4 e+ p, Q3 l8 b! L! ^我是直接按excel 零件名,顺序调用打开文件 ,以excel为准
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2024-11-26 02:33 , Processed in 0.053251 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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