找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4191|回复: 3

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

[复制链接]
发表于 2019-3-2 12:47:00 | 显示全部楼层 |阅读模式
思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。# M) @! ~6 @. X) b
* I( P* ]6 w( P
Sub main()
/ q2 O/ y/ r( G7 ?& i8 U, g% \, m'打开EXCEL表格开始
5 s' n8 F5 V# b0 i" dDim ExcelSheet As Object
) t5 ~* w6 k, p1 i2 p; ?/ {Set ExcelSheet = CreateObject("Excel.Sheet")2 @7 Y" `$ X+ C+ j
ExcelSheet.Application.Visible = True
& N6 T; g* q. l5 V. g'结束
  h. g2 ~1 {4 J9 x0 f) l) u8 J- A& \$ G( c. c. j
'填入数据开始9 Y  G; e4 C$ F( u. Y4 y
Dim d
) S+ `. Q- F1 u- H3 ]Set d = CreateObject("Scripting.Dictionary")& g; k9 R+ b2 k9 q
MsgBox "请输入数据"
3 u* \8 X, i4 }! K1 q; y( s'结束
( r6 y, }, m: D! j, U' A
7 U4 Y! l* Y: ]" L* \$ W'数据写入字典开始
9 L  S$ y7 A) o  {Dim Myr&
9 r) e) @; T. Q3 X4 HMyr = 500 '需人工设定9 r2 @: m9 `  ^: t" {. @1 j- E% O
For i = 1 To Myr
3 N( c7 @( j/ }0 C, f* Yd(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value/ t9 i# g- r! H$ U+ Q: Y* _. g1 R
Next* s! Y; ]% o# q
'结束
+ g! i) B: m4 B; K; N: p5 `& x3 s9 M% s; @% L" g
'将字典数据逐个写入到零件开始
8 D) R# ?+ a, G, m8 H1 A, `Dim swApp As Object
7 g7 f  t% J2 j. y4 QDim Part As Object
: ~; c  _; I7 S+ r# ]Dim longstatus As Long, longwarnings As Long! P: T  @+ P+ k7 T; I. Q
Dim myPath$, myFile$
/ k$ c- H0 p# u" t) H8 t7 Y) Y( }9 Y5 g
Set swApp = _
9 Z" Q7 E$ m6 h8 P! W) A( EApplication.SldWorks
$ U. m0 x6 g, H+ `myPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量0 S9 {' ?: \5 f1 x1 ]
myFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件
% Y& H) t) w- F/ i" Q* v3 ^" YDo While myFile <> ""
; f# l" Q3 z8 u8 d$ k* {/ ?; hSet Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)
4 R# p9 c8 {" x" l9 ]; a
; y1 B0 ?0 u, w' [5 M, Q6 o    '单个零件写入数据开始! Z" K" D4 [+ U! o- y5 ?7 G
'Dim swApp As Object+ ^5 D/ I8 V' J' S4 X! A! @0 a
Dim c As String9 O+ K, G" D1 {
Set swApp = Application.SldWorks# i& ?' e! f+ T7 O
Set Part = swApp.ActiveDoc6 \/ g% g6 l; ?1 K) c# e4 m
c = swApp.ActiveDoc.GetTitle() '零件名" [" R: x, H) K
blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c))
1 r7 I  {9 Y  `' `2 n    '单个零件写入数据结束
7 E$ n5 t+ W8 j  ^/ }
/ t" ]! N8 E* I% ]Part.Save" a5 \8 J' T+ P: ]9 O& B# P1 L8 l
swApp.CloseDoc myPath & myFile% y: d! T/ ^* J# C! _
myFile = Dir '找寻下一个*.文件/ |, d9 R5 S  L$ F) z2 \
Loop8 I8 k5 U! e3 N  R% T# ^: R: {
'将字典数据逐个写入到零件结束
1 b* ]) x3 h1 W. g( q& @End Sub( s( b- w) O' q: L0 G2 a

评分

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

查看全部评分

回复

使用道具 举报

发表于 2019-3-2 13:13:18 | 显示全部楼层
谢谢楼主分享,期待高手进来进一步完善
发表于 2019-3-25 15:56:53 | 显示全部楼层
楼主这个,数量写入 需要是都改为一个数量吧 不然容易出错0 z3 _( l6 g2 `0 N
我之前选择的方式是:excel 内输入bom表,零件名称 及 需要写入的属性( E8 v9 S5 d0 G
然后通过excel 调用SW,逐个打开part,写入cell内的数量 或者 其他属性,再关闭
发表于 2019-3-25 16:05:20 | 显示全部楼层
哦 刚开始没看清$ i% ~- @, F- V1 Q$ {
你是全部写到 数组里,然后做对比……,以装配体树结构为准
- X5 J7 b# t" d* I; L! k我是直接按excel 零件名,顺序调用打开文件 ,以excel为准
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-7-12 11:21 , Processed in 0.065383 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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