机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 3707|回复: 3

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

[复制链接]
发表于 2019-3-2 12:47:00 | 显示全部楼层 |阅读模式
思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。& A5 U; g6 X) T4 F, S

5 e: }% c$ s8 z. h* |# hSub main()
' m; m& j3 W% J'打开EXCEL表格开始! k' D& A7 g& t9 z/ {# S3 P- }. ?
Dim ExcelSheet As Object4 w" |& B" E7 k" ]# F$ L, C+ }$ ]
Set ExcelSheet = CreateObject("Excel.Sheet")
9 w4 N( M! h" P; OExcelSheet.Application.Visible = True
7 u  x7 P; D. e% \8 n1 U  z- g" h: E'结束
# p' k2 D) L3 e' i
& J# f. z& ~% H# O: J7 K- v% e1 L'填入数据开始
! K. I6 f1 b1 k8 dDim d& e4 B# o  x* t3 X& M4 H# j" i( n
Set d = CreateObject("Scripting.Dictionary")$ G- {) K4 W* N4 e: b
MsgBox "请输入数据"
" t2 O4 B% c, T. `7 F6 |$ O; I# W'结束5 P1 F, P  C5 L1 Q" O4 ]7 P

  f3 t3 R3 I7 o  ]4 G  t3 L'数据写入字典开始
0 _5 t* W+ v$ h5 P/ A7 F* fDim Myr&/ Z/ j7 f' P) C" ^# t; r% P- J
Myr = 500 '需人工设定- n% A. Z0 V. P9 W5 z$ p
For i = 1 To Myr, y- }6 U5 b) g$ Y
d(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value
/ ], Q. p; H* M& b1 L4 y  Q; [Next5 p( Y- h, H( i( H
'结束
/ Y6 y) ?3 B) M# A7 h7 {4 d
; H4 `# C, U! J4 e( A- J'将字典数据逐个写入到零件开始
* j! C- v# k- i3 O" ~Dim swApp As Object
$ Q1 y: E6 Y/ l6 q+ vDim Part As Object4 T6 E: P) u1 n; u, c! O
Dim longstatus As Long, longwarnings As Long
( J, _! l" s' k& pDim myPath$, myFile$1 G+ h9 U9 g" D+ Z- t% W, L  {

; c  E! ]: a; @7 X* T$ T2 ASet swApp = _; i& \4 m. D& N2 R/ l
Application.SldWorks8 I( o" {' T. `( f3 n9 Z1 B
myPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量& E) ]& E8 @$ P5 l4 ?. I# _( T% o# d
myFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件- S! D) \0 N: V/ w$ K" j) m
Do While myFile <> ""
/ w" o- G$ F7 R( R0 }& CSet Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)( a* u7 J; I6 p! d1 U* q# f
) z4 d8 w' t- @( t
    '单个零件写入数据开始; V& F% F7 [2 F4 @; F% e
'Dim swApp As Object, r, h4 h$ d8 N. o9 O4 `
Dim c As String: z! G, l3 s* U* U% t" T: B9 F; s
Set swApp = Application.SldWorks& H% G9 A/ L; O' f, Y
Set Part = swApp.ActiveDoc
% w; e* h7 T5 q+ P( n3 Mc = swApp.ActiveDoc.GetTitle() '零件名9 n0 F( x$ Y8 j
blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c))
4 e. y/ E% {: c$ w. @2 S9 N    '单个零件写入数据结束+ K/ w$ J6 o! _2 g6 `0 B; H# X

9 R, b+ X' [1 d* o* L3 `5 W5 L" i7 c) ]Part.Save
* U5 m- K. N/ c, a9 Z- BswApp.CloseDoc myPath & myFile
9 R) c7 `% ^$ g- P7 o" AmyFile = Dir '找寻下一个*.文件
6 M7 K* {' O9 K  C: pLoop3 w' O4 v& y" i- M: B) ~- F
'将字典数据逐个写入到零件结束7 t! X1 n" E6 w& G) D
End Sub7 v$ N$ R# V0 O  K8 @

评分

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

查看全部评分

回复

使用道具 举报

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

使用道具 举报

发表于 2019-3-25 15:56:53 | 显示全部楼层
楼主这个,数量写入 需要是都改为一个数量吧 不然容易出错' C+ U9 q% g: r6 ~
我之前选择的方式是:excel 内输入bom表,零件名称 及 需要写入的属性0 ?) r8 m9 `+ t% V' E
然后通过excel 调用SW,逐个打开part,写入cell内的数量 或者 其他属性,再关闭
回复 支持 反对

使用道具 举报

发表于 2019-3-25 16:05:20 | 显示全部楼层
哦 刚开始没看清
: s& r' q6 Q9 L/ b/ y1 h+ G你是全部写到 数组里,然后做对比……,以装配体树结构为准# B' d# z  |; D" h4 }7 c0 N
我是直接按excel 零件名,顺序调用打开文件 ,以excel为准
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-25 13:06 , Processed in 0.069053 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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