找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 4126|回复: 3

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

[复制链接]
发表于 2019-3-2 12:47:00 | 显示全部楼层 |阅读模式
思路是将SW的BOM表导入到EXCEL,然后将EXCEL的数据(零件名+数量)写入到字典,然后通过文件名来匹配到字典里存的数据(数量)写入到零件的数量属性。其中提示请输入数据时需要粘帖数据进来。Myr = 500 '需人工设定。欢迎大家进行补充、使程序更智能。& r! y7 h+ I# I% k- ^
5 J# m! _) @9 M4 t1 D& h
Sub main()  L6 d, g6 f& v
'打开EXCEL表格开始
' S+ x+ d# S% D* gDim ExcelSheet As Object/ ~5 n/ J& b( g  i! @/ o( z5 f& }
Set ExcelSheet = CreateObject("Excel.Sheet")$ h. ?4 E3 f7 _
ExcelSheet.Application.Visible = True
: L' B; N. K# o* D( B  Z'结束' L0 p! N: N, z8 P/ u& F, P

7 C& y0 }# R. s: |'填入数据开始4 H" t' @( e1 }, Y  ]
Dim d# D( x- ]3 d3 P, h/ Y
Set d = CreateObject("Scripting.Dictionary")5 [4 M, `/ F; M" ?. @" d
MsgBox "请输入数据"
& Z4 U) Y- O! u2 N& J1 ]'结束
3 U5 I% X/ ]/ f9 U( L+ i
6 W# |( C4 E5 N2 n9 h3 P( {& ~: ^'数据写入字典开始
9 y$ e) ^: h: W: TDim Myr&
! D2 e7 K; d# z# h8 k# `0 hMyr = 500 '需人工设定9 D( C2 f" r, O0 Z3 U" F4 h
For i = 1 To Myr
0 V9 }1 r) d/ Z) R! W( `d(ExcelSheet.Application.Cells(i, 1).Value) = ExcelSheet.Application.Cells(i, 2).Value
6 W0 h0 w) V$ B. k% O: k" oNext
/ O% Z. a- k* u* s3 M" B  h1 ?'结束$ u: L6 H$ z8 N) V# G, E0 k, P

, e2 l# E' v# y# F# m1 a'将字典数据逐个写入到零件开始
/ G5 Z/ M0 t5 o1 {1 n& iDim swApp As Object
3 K4 T- L* _4 i7 eDim Part As Object" j5 ?8 `/ ^9 j6 \$ D3 q
Dim longstatus As Long, longwarnings As Long: _" Y- ~* O5 ^; ^0 j
Dim myPath$, myFile$4 z% m4 ^/ X' d8 j- Y, ?( J
3 ~+ K* p6 Q5 M4 e# m9 m" X. Q
Set swApp = _
2 ~; O6 P! ~: n6 x4 [  Y% I4 sApplication.SldWorks4 U2 n) Q3 C2 t9 ^- P& X1 X& k
myPath = "C:\Users\Administrator\Desktop\1\" '..........................重点:把文件路径定义给变量. W. y" m5 n& I# y- a
myFile = Dir(myPath & "*.sldprt") '依次找寻指定路径中的*.文件
; Z  @5 g# W& @1 k! H( F* pDo While myFile <> ""
( }, d8 L# J) V( S$ ASet Part = swApp.OpenDoc6(myPath & myFile, 1, 0, "", longstatus, longwarnings)
* G; t2 }: ]* S/ W7 I( L6 f/ ?1 K; c3 m, w9 v% I
    '单个零件写入数据开始
6 j" Z# J. o$ \6 C/ {( F: l- m'Dim swApp As Object
. |# {6 W3 }6 D! dDim c As String
4 [; A. H8 K- Z5 T8 bSet swApp = Application.SldWorks
! W/ U- s% |* v! v9 K# pSet Part = swApp.ActiveDoc( g. Z+ I  P# p) K0 V, @
c = swApp.ActiveDoc.GetTitle() '零件名2 m* }! \7 k( i! g( ?' J$ {/ J
blnretval = Part.AddCustomInfo3("", "数量", swCustomInfoText, d.Item(c))
4 f! w' m0 z+ p    '单个零件写入数据结束, A2 U7 z: r3 ], R0 }, Z

: {4 D4 Y: d& z" B' |  f  p5 J% _Part.Save5 l' B! W3 S( N! g6 `; C
swApp.CloseDoc myPath & myFile
( `  ]% S5 A. x9 W# e3 T& gmyFile = Dir '找寻下一个*.文件& |' h4 f1 m; D
Loop
; m( V9 d; z  W0 O0 c! t'将字典数据逐个写入到零件结束
4 x5 |# W! V: z  i4 C: t( x0 KEnd Sub
# M/ A% U9 e9 S* H

评分

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

查看全部评分

回复

使用道具 举报

发表于 2019-3-2 13:13:18 | 显示全部楼层
谢谢楼主分享,期待高手进来进一步完善
发表于 2019-3-25 15:56:53 | 显示全部楼层
楼主这个,数量写入 需要是都改为一个数量吧 不然容易出错" \' G/ y0 v( P. L( v% T5 F
我之前选择的方式是:excel 内输入bom表,零件名称 及 需要写入的属性  r- q3 G; e# B9 K4 i) _
然后通过excel 调用SW,逐个打开part,写入cell内的数量 或者 其他属性,再关闭
发表于 2019-3-25 16:05:20 | 显示全部楼层
哦 刚开始没看清
# \% Z  r4 V  b- `8 t! t, ]$ F你是全部写到 数组里,然后做对比……,以装配体树结构为准
" X  U2 ?) f' Q7 i4 k9 \我是直接按excel 零件名,顺序调用打开文件 ,以excel为准
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-6-22 19:05 , Processed in 0.086186 second(s), 16 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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