找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4374|回复: 3

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

[复制链接]
发表于 2019-3-2 12:47:00 | 显示全部楼层 |阅读模式
思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。0 V! {/ t8 N2 y8 m, @; t' K4 _
  U$ t2 e3 i: N* {& o' J  n  E
Sub main()
  p2 r( m9 S% H) R& L! V0 ?'打开EXCEL表格开始) U$ z% F( t( S4 V
Dim ExcelSheet As Object6 i' L% N. H/ C$ Z
Set ExcelSheet = CreateObject("Excel.Sheet")% b! G1 o' b1 g1 J9 `. U$ H
ExcelSheet.Application.Visible = True4 q4 U5 S6 ]  B; g$ W3 {
'结束3 w3 G! e: q0 D' ?+ _% |& ~
7 g5 h6 C0 B, t
'填入数据开始
# Z( Q8 n$ Y8 C( m/ e' [Dim d4 M8 e* N- D6 Z3 {
Set d = CreateObject("Scripting.Dictionary")  s6 ]$ [2 g( _4 O5 i, Y1 a
MsgBox "请输入数据"( m' v9 I) Q2 ]/ ^1 k+ X3 G
'结束
3 @, t3 t2 G$ Z7 ]+ ~8 L( P* q6 r4 |0 c8 S( K7 \2 l& N* H
'数据写入字典开始
( h- T' Z) {' Z" X' ~: h) aDim Myr&; [( `5 v5 k5 X4 |
Myr = 500 '需人工设定
8 I3 j  p1 G1 \5 |/ O! A, JFor i = 1 To Myr
  s6 _1 s) p& S) wd(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value6 ]& j+ ]( p9 Y7 c) q$ Y1 N) D
Next8 O! `9 i1 K" W! g( Y- V! H4 d( m+ E9 O
'结束- B2 P$ E1 p1 R2 d; @" r' I' s
4 B/ |" e! Y) K, l& K
'将字典数据逐个写入到零件开始
% e2 W4 Z. G  m4 s3 X/ ~0 s1 _Dim swApp As Object* y- a. A6 w& D
Dim Part As Object
+ H" W! b! K. U( `Dim longstatus As Long, longwarnings As Long
& e: F; G- j; D1 w  w  TDim myPath$, myFile$
9 R. K# N5 h! l9 s+ b  z* ~  N% j5 }( M
Set swApp = _7 K! C  x$ k0 x. t4 C3 G
Application.SldWorks7 g0 ^; v) p) K
myPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量  D: L# E; G. Q0 ]) A* Y
myFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件" j, t  M* T/ v! M  S1 n7 y9 U
Do While myFile <> ""( Z# A0 t2 R* m6 ]" a
Set Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)
; ^+ |" f# v2 V, Y, R- O& M$ W9 Q
  b- R: h$ j: Y9 X# [4 @" l    '单个零件写入数据开始9 H8 b0 y6 x. F. R4 u
'Dim swApp As Object
, s# k: ~7 p1 x2 x) W) [Dim c As String4 Q3 [7 T8 s+ d! e& j3 g+ j
Set swApp = Application.SldWorks, P' O* ]" Y/ \' b5 Z7 B; |
Set Part = swApp.ActiveDoc$ G* ~# o4 [+ v$ K1 f
c = swApp.ActiveDoc.GetTitle() '零件名
( Q8 h" }: Q% n+ eblnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c))
1 K. \5 a3 M; S( e! |    '单个零件写入数据结束. ~! i) |- {1 n& ]
$ A: \; w+ Y1 w$ t2 {: V9 e7 J
Part.Save4 G0 l: {+ q- P  s  ^* c, z
swApp.CloseDoc myPath & myFile
# }4 E0 T$ S' q# GmyFile = Dir '找寻下一个*.文件
& p( h; [5 i4 f' z2 qLoop( }( `: U' K+ G9 n
'将字典数据逐个写入到零件结束
6 g' L7 g; Y& R. [End Sub
: k5 v6 `+ l+ ?$ G

评分

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

查看全部评分

回复

使用道具 举报

发表于 2019-3-2 13:13:18 | 显示全部楼层
谢谢楼主分享,期待高手进来进一步完善
发表于 2019-3-25 15:56:53 | 显示全部楼层
楼主这个,数量写入 需要是都改为一个数量吧 不然容易出错/ w% P1 \$ R& c# S. |& A, `
我之前选择的方式是:excel 内输入bom表,零件名称 及 需要写入的属性( _, @. c, T. \8 i4 q3 @1 x7 y
然后通过excel 调用SW,逐个打开part,写入cell内的数量 或者 其他属性,再关闭
发表于 2019-3-25 16:05:20 | 显示全部楼层
哦 刚开始没看清* A1 f. \  j% k+ V& c
你是全部写到 数组里,然后做对比……,以装配体树结构为准
! J' b' e0 Q$ t7 m0 E我是直接按excel 零件名,顺序调用打开文件 ,以excel为准
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-9-17 03:24 , Processed in 0.062906 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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