机械必威体育网址

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3582|回复: 3
打印 上一主题 下一主题

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

[复制链接]
跳转到指定楼层
1#
发表于 2019-3-2 12:47:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。
+ j9 D5 q5 n6 V1 M1 [2 J2 K% K0 Q* U0 S1 W/ ^) D/ T
Sub main()& _5 v0 x* N1 `9 o
'打开EXCEL表格开始
% |" ^) Q; U, t+ y+ ]Dim ExcelSheet As Object5 [3 M/ X: D% E/ j8 N" R
Set ExcelSheet = CreateObject("Excel.Sheet")
% y( [( `& f4 \ExcelSheet.Application.Visible = True, y8 H+ \& M' j
'结束5 k: Z. A: M8 m) W

1 {- C8 V/ k# F' n5 M, A9 p* L'填入数据开始+ b' c3 O* P& Q$ T7 \, [5 N! q9 q. {
Dim d
) K; O1 m4 I% g8 `! f9 v) jSet d = CreateObject("Scripting.Dictionary")" \5 |" M6 a" p% W: U; E( f' f
MsgBox "请输入数据"! m. t# |! v/ W6 U  r
'结束1 _$ D0 f8 H% t7 V9 S8 R
3 n: Q% Q8 v" d* a- b
'数据写入字典开始3 @. o7 Z+ a4 `0 t/ ~
Dim Myr&* W( D" k% E# _1 Y+ l: P- d
Myr = 500 '需人工设定
! h! o# {: Y2 R  OFor i = 1 To Myr1 i& w2 O% h) k" S8 Z5 ~
d(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value
; R$ q9 d5 _2 b' R" A  \& L' DNext; R- o; Z/ Q: b6 i' F7 q! R
'结束
! z4 f7 }; H( {1 N2 ~5 M: v' M
0 K: K7 @# J2 w2 e0 S! L'将字典数据逐个写入到零件开始
4 r3 C4 e) c, d" M: A. H$ k- X* CDim swApp As Object8 ~2 a5 ~6 [3 N' ]( H( e& C, u
Dim Part As Object+ u' B$ L0 p3 ]* j" z& K
Dim longstatus As Long, longwarnings As Long
! T: q4 y( A4 ~7 K$ M# YDim myPath$, myFile$8 X! T* S! V1 \+ k7 `

7 v! n& A3 [) m+ h; uSet swApp = _
4 w- r7 I. _  OApplication.SldWorks
3 X2 G4 w; Q" B. x8 PmyPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量: t# C2 D: ~8 D; }* z
myFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件
2 y+ P$ f3 }# j: {" rDo While myFile <> ""
: B. X3 S( |1 z/ TSet Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)
- W8 [7 ^. X" m6 i+ @
5 {8 P6 B" X" v    '单个零件写入数据开始+ t+ F- r* [% v* r. [, m
'Dim swApp As Object
0 \8 B3 e9 F( L4 e7 S3 qDim c As String8 n" O$ s4 v2 T2 K" H4 y% [; K9 W
Set swApp = Application.SldWorks
$ T8 `, p4 I9 G7 p, B( zSet Part = swApp.ActiveDoc
% }& \  x5 h! _' p/ rc = swApp.ActiveDoc.GetTitle() '零件名' B" r6 M, D  ]3 u2 [$ Y
blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c))
3 ^9 b) J& J9 t! }7 _    '单个零件写入数据结束' I* R. k/ g  \$ B
% V5 N0 }! t- v2 t, G9 F, b) i
Part.Save  x4 f0 A3 a. h' d
swApp.CloseDoc myPath & myFile' w  X, f8 [" F
myFile = Dir '找寻下一个*.文件
0 U0 p1 Y  l$ l1 C! nLoop& w/ \* T6 s; N+ J0 r1 R1 ~
'将字典数据逐个写入到零件结束
7 w' C) ~5 p6 s# o7 `End Sub/ M8 I* t( z  G' l) I8 E

评分

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

查看全部评分

回复

使用道具 举报

2#
发表于 2019-3-2 13:13:18 | 只看该作者
谢谢楼主分享,期待高手进来进一步完善
回复 支持 反对

使用道具 举报

3#
发表于 2019-3-25 15:56:53 | 只看该作者
楼主这个,数量写入 需要是都改为一个数量吧 不然容易出错8 C( ^( S! z0 d5 G3 r
我之前选择的方式是:excel 内输入bom表,零件名称 及 需要写入的属性
6 F0 r2 v6 x. G+ r0 k然后通过excel 调用SW,逐个打开part,写入cell内的数量 或者 其他属性,再关闭
回复 支持 反对

使用道具 举报

4#
发表于 2019-3-25 16:05:20 | 只看该作者
哦 刚开始没看清
% h" L& _$ v' _, e! Y4 w你是全部写到 数组里,然后做对比……,以装配体树结构为准
& i' z/ c  n7 S8 ?9 T% S我是直接按excel 零件名,顺序调用打开文件 ,以excel为准
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|机械必威体育网址 ( 京ICP备10217105号-1,京ICP证050210号,浙公网安备33038202004372号 )

GMT+8, 2025-1-10 16:30 , Processed in 0.054281 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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