找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4478|回复: 3

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

[复制链接]
发表于 2019-3-2 12:47:00 | 显示全部楼层 |阅读模式
思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。
+ ]" E( _6 X, W  u
8 c5 a' L& a5 E; BSub main()
: l( j, M, |4 E6 h7 {'打开EXCEL表格开始
6 N& I$ Y: T. \5 I8 {4 aDim ExcelSheet As Object
! K% p  u3 J' b7 J, gSet ExcelSheet = CreateObject("Excel.Sheet")
4 }+ m. T+ F8 ]& z( p" a+ iExcelSheet.Application.Visible = True9 C$ l- e. B# d1 O, T" ~$ K5 F
'结束
' r' I/ I4 m8 t9 P
$ F2 R3 k3 R- D8 k'填入数据开始
; B: K9 p& u2 eDim d, @3 Q- v# N& f5 F4 C
Set d = CreateObject("Scripting.Dictionary")
4 B5 w* g" G: r/ ?  O4 HMsgBox "请输入数据"; R- O. \" ]- w" [
'结束7 }7 a4 h2 P! h7 @' o4 v8 y

2 ?# f$ Z" U/ c'数据写入字典开始/ P. O& A2 |2 d; d1 f
Dim Myr&: W  w7 s  v) g! E& J. ^9 Z5 I7 ]
Myr = 500 '需人工设定
' ^( E  V* T! |9 O7 g6 R( bFor i = 1 To Myr! N* \; p6 Z2 L" @/ r) F0 m4 K. S
d(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value. V/ U5 s2 M4 s5 ^9 h) c# Y, C
Next8 w8 D' [8 R! I- t
'结束
) B- B1 M* v* }0 M0 r, j- \/ \4 v: a! `9 S7 _+ M
'将字典数据逐个写入到零件开始3 v& U. ~4 `+ q, d
Dim swApp As Object  N; b; ^9 R* W7 I  d
Dim Part As Object
" X* [, X& m( K! e- R; f# ~0 R4 \Dim longstatus As Long, longwarnings As Long5 V# b% o& i9 z1 x" l% R
Dim myPath$, myFile$2 m& P' ~5 U& j6 |6 a
* q- w5 z# h' U9 O* f" Q
Set swApp = _
$ A+ y0 F) Z8 m. x; j* yApplication.SldWorks
$ I- |" ?, M- U- b" S5 q4 cmyPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量
7 s& ~* |" G5 p$ n5 X/ B$ Y8 r% hmyFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件
+ K7 l' D3 n( n* {; HDo While myFile <> ""2 e7 `& {% p! F6 O$ y# b
Set Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)  a% o" u& r# S3 a0 r2 W
& ^8 ]0 X- [) x, n# m) p+ M
    '单个零件写入数据开始8 Z, t, Q0 L/ r/ a: c5 |
'Dim swApp As Object9 A6 u* r* c3 B, ~2 K  a' y  K
Dim c As String' ]4 |  h  C4 d* C* q% l) F$ {
Set swApp = Application.SldWorks
8 P9 X2 [- o7 ^0 O# }0 L: ?Set Part = swApp.ActiveDoc, ^, }& E3 s' S7 f
c = swApp.ActiveDoc.GetTitle() '零件名
5 f$ t$ X3 x9 d3 v. S" N; ?blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c))9 ?* z, [6 z5 _
    '单个零件写入数据结束
3 b) w' _, P" I5 ~0 V( j% w% x) U: w* k9 o6 \: n3 G
Part.Save) u5 w9 \( s2 @
swApp.CloseDoc myPath & myFile& _+ h( d/ o/ A% q- ~. W
myFile = Dir '找寻下一个*.文件
  Y* B9 \" @: @, h3 H4 `1 DLoop9 q( _! f$ S8 i4 {: y  q
'将字典数据逐个写入到零件结束
5 r& P; U: r7 o+ i& rEnd Sub( A7 v6 P( o. H/ y8 c

评分

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

查看全部评分

回复

使用道具 举报

发表于 2019-3-2 13:13:18 | 显示全部楼层
谢谢楼主分享,期待高手进来进一步完善
发表于 2019-3-25 15:56:53 | 显示全部楼层
楼主这个,数量写入 需要是都改为一个数量吧 不然容易出错( h" p: F! D2 s
我之前选择的方式是:excel 内输入bom表,零件名称 及 需要写入的属性
, y, R$ b, z; N/ h. K然后通过excel 调用SW,逐个打开part,写入cell内的数量 或者 其他属性,再关闭
发表于 2019-3-25 16:05:20 | 显示全部楼层
哦 刚开始没看清, b; c% s+ ?* \- R' J  p0 Y" ?
你是全部写到 数组里,然后做对比……,以装配体树结构为准' k2 @0 X$ ?( I* ^' o/ N% [0 _2 {8 i
我是直接按excel 零件名,顺序调用打开文件 ,以excel为准
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-10-23 06:18 , Processed in 0.074437 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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