找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4124|回复: 3

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

[复制链接]
发表于 2019-3-2 12:47:00 | 显示全部楼层 |阅读模式
思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。
0 V; }- U: `( x: y. ]& e' A2 |! u; x, T. L
Sub main()
/ z8 F7 j/ u) F( t5 o7 W3 n* s# z'打开EXCEL表格开始
9 i& p; L" G/ }, T' @" pDim ExcelSheet As Object
, q9 b! i7 Q' r4 o7 `# v3 \, QSet ExcelSheet = CreateObject("Excel.Sheet")
: f( f+ i# t6 F) mExcelSheet.Application.Visible = True
+ x5 C0 h6 W8 |% s'结束
2 t1 I3 u; n$ Z" F* `" d6 [7 i* F
'填入数据开始
" n! T' @  `$ l; G- r  q5 |/ \Dim d( {, N8 @& v# Y0 ?/ g% [
Set d = CreateObject("Scripting.Dictionary")
8 t8 g& W3 H8 c8 R2 sMsgBox "请输入数据"& z  U! n2 D: H0 \5 K, T- @
'结束- Y( H2 _# Z9 C# B
( C: R7 Q# e8 Q+ B
'数据写入字典开始# S- E$ M& v. G3 W  X  s% W( G
Dim Myr&
4 E$ T# f# k% R& EMyr = 500 '需人工设定
5 [0 ~/ {; m3 FFor i = 1 To Myr
3 n$ V4 h9 H7 {d(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value0 R0 v  _, C4 H, |
Next; j( e* p8 B2 l2 `+ x9 U; b- ^6 Z1 f
'结束
) M- X8 d4 _7 H4 z, D" N6 n
+ j& X; D6 |6 ]+ m% n5 T'将字典数据逐个写入到零件开始
7 Y  i% s& Y9 w; aDim swApp As Object0 i# |% k# t1 q, Z$ h9 X3 Y4 A
Dim Part As Object
4 Q  }5 q& @* y/ S: t0 j* [# mDim longstatus As Long, longwarnings As Long, Y9 I) A% ]9 {" N! r) l( x
Dim myPath$, myFile$& G; _- D3 C2 ?4 G$ ]

2 M& p" {7 i' i& K6 }2 O+ aSet swApp = _3 V% e! i& o& @1 e# Q
Application.SldWorks
& e- ^9 B. D9 O  v9 VmyPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量0 v* B: u" G. S9 J3 q/ q
myFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件
' Q' l8 X  m/ E3 R! FDo While myFile <> ""
  g# D7 C, c( |9 j6 h4 p7 X9 U; w8 OSet Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)
: y' Y& u# y9 J! G/ W- c" F- Y3 x- h2 [- n( ?
    '单个零件写入数据开始
( ^7 Z" _1 m+ C% r: I% A; w2 G'Dim swApp As Object- D2 u0 V+ @# V7 Z5 n
Dim c As String
: T; V7 c, b# ^9 A- j5 Z3 s/ l" ASet swApp = Application.SldWorks7 E! p8 k2 ~3 H
Set Part = swApp.ActiveDoc
6 ^/ Z9 O- X8 ]" p2 f: Q' Dc = swApp.ActiveDoc.GetTitle() '零件名( e/ o8 F- ]; Z1 c6 z$ E
blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c))
; g& w& I* ]! i; ]. ?4 e    '单个零件写入数据结束1 _$ h" r. [6 ^$ e! Z$ s
5 t' d2 b5 l! T5 r! h) k. t
Part.Save% _) ]" U, z! Z  l& L( }
swApp.CloseDoc myPath & myFile. H# `0 U/ N! b( i6 O+ X
myFile = Dir '找寻下一个*.文件
9 A  w; L3 Y2 \; V. c' I  J1 ~Loop/ I" M, y" s, Z
'将字典数据逐个写入到零件结束
# k! Y3 {8 U$ s/ dEnd Sub
# _5 B) u9 q, v

评分

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

查看全部评分

回复

使用道具 举报

发表于 2019-3-2 13:13:18 | 显示全部楼层
谢谢楼主分享,期待高手进来进一步完善
发表于 2019-3-25 15:56:53 | 显示全部楼层
楼主这个,数量写入 需要是都改为一个数量吧 不然容易出错1 J  ~0 u+ K6 [
我之前选择的方式是:excel 内输入bom表,零件名称 及 需要写入的属性
& d9 Q2 B7 Q- i9 y3 I然后通过excel 调用SW,逐个打开part,写入cell内的数量 或者 其他属性,再关闭
发表于 2019-3-25 16:05:20 | 显示全部楼层
哦 刚开始没看清) ^! k( L4 h9 L2 Z+ f# G
你是全部写到 数组里,然后做对比……,以装配体树结构为准' [( k- b3 a4 M
我是直接按excel 零件名,顺序调用打开文件 ,以excel为准
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-6-22 15:54 , Processed in 0.064997 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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