机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 2769|回复: 3

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

[复制链接]
发表于 2019-3-2 12:47:00 | 显示全部楼层 |阅读模式
思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。7 V2 X7 d. O7 T4 F
* r0 z  l6 H9 Q1 F9 _
Sub main()  m9 f8 S$ ]) O  b  W, q- Q
'打开EXCEL表格开始; |- ?' O: j! D4 R$ a
Dim ExcelSheet As Object/ }. G9 r3 N) P6 B6 \
Set ExcelSheet = CreateObject("Excel.Sheet")
' u4 b) ]+ H* ^3 k* QExcelSheet.Application.Visible = True& T  o- }* A' ^* ~% F& s
'结束2 U" ~3 _1 P! P! r$ x6 }# ^
9 M/ ?* v+ \) E4 @  b4 Z
'填入数据开始
; p( P" I# m' WDim d
) {+ @: g0 F" tSet d = CreateObject("Scripting.Dictionary")
* i) z: f) N' @* lMsgBox "请输入数据"
( [" a- ?- _; F' {& N) q  J'结束% `1 D, D8 \( o. |
7 o" P* q$ T" X8 ]6 n1 N- f6 c
'数据写入字典开始: T1 R& ?! G" c0 J( w. s
Dim Myr&( Z& b6 T7 I/ }  V- o3 B
Myr = 500 '需人工设定) X9 `. C5 Y: _* r8 m$ ]% L
For i = 1 To Myr
- y  T. [9 v' md(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value
" M5 `& n4 D4 R( r' eNext
6 h& z, y- @$ q7 m7 p: C'结束& j, i* c4 ^6 v  V2 _. A7 y2 w0 V

2 I1 p& D4 x3 R( ?" ['将字典数据逐个写入到零件开始
- h. l6 e) W7 x' C( N4 j$ jDim swApp As Object
# K) i" b0 l" u+ s2 W6 E7 oDim Part As Object" }* B, l0 Q* ~- C1 ^
Dim longstatus As Long, longwarnings As Long5 F; C& E' Z1 ?
Dim myPath$, myFile$* Y  e. P8 O6 S& R& f' d
8 j5 ?" B4 v  \: O. _% k4 ~0 i
Set swApp = _* N. m3 w2 J% v0 z: X/ r' N! L
Application.SldWorks
2 }7 w' R6 ]# z/ c- A4 G0 ]4 A7 ymyPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量
% Y! P3 w* n" \4 W) a/ @* g8 `: TmyFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件
5 E- g. ?  M7 y4 ]# sDo While myFile <> ""6 ?& \) f4 M* y0 `6 B
Set Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)
! \' E9 \+ P  y  x8 R2 {
( O% g$ m! I  t+ g9 f7 H* u; T* V    '单个零件写入数据开始
. {( F4 o$ l0 P  n% a8 Q'Dim swApp As Object
0 r8 M! |4 ~+ F! q3 x" eDim c As String7 _& R+ Y: C% Q5 @7 E
Set swApp = Application.SldWorks
: b. H: G6 w: ZSet Part = swApp.ActiveDoc! b% Y1 J# }# M5 Z+ v
c = swApp.ActiveDoc.GetTitle() '零件名( z. p9 \# E" W* p
blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c)); D- k3 b& u# ?9 h) y5 V
    '单个零件写入数据结束
6 ]3 F+ A( l/ e/ N; G" e* w4 N" Y) K9 f2 `" ?
Part.Save3 M6 X- a( I5 r4 z, U/ u6 k  @
swApp.CloseDoc myPath & myFile
9 P6 C- M2 ^/ ~- J! {myFile = Dir '找寻下一个*.文件
& a: A0 L$ r1 ?2 TLoop* S  D6 }9 y8 `4 p7 b
'将字典数据逐个写入到零件结束! M" o- r: s+ u' C( Z/ _
End Sub: \' x( m, \5 S: N6 W/ @

评分

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

查看全部评分

回复

使用道具 举报

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

使用道具 举报

发表于 2019-3-25 15:56:53 | 显示全部楼层
楼主这个,数量写入 需要是都改为一个数量吧 不然容易出错
3 Y1 Q2 o4 Y9 v0 u我之前选择的方式是:excel 内输入bom表,零件名称 及 需要写入的属性
( O+ i; p9 m8 x7 U8 x然后通过excel 调用SW,逐个打开part,写入cell内的数量 或者 其他属性,再关闭
回复 支持 反对

使用道具 举报

发表于 2019-3-25 16:05:20 | 显示全部楼层
哦 刚开始没看清
" P% v) Q/ d- a5 [你是全部写到 数组里,然后做对比……,以装配体树结构为准  q% {8 x7 i# p- F* l% T3 c
我是直接按excel 零件名,顺序调用打开文件 ,以excel为准
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 11:17 , Processed in 0.054129 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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