机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: 李邈

SW宏-零件数量自动写入自定义属性表

[复制链接]
发表于 前天 19:55 | 显示全部楼层
faker558 发表于 2024-11-21 16:356 p, i1 j" \2 [7 J5 f
在开元没有看到这个功能啊
2 N: n/ T4 @) F6 L
有的呀,BOM工具里面3 O+ H; g7 Q  G& I# X
我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟插件的数量对比,如果不一样,就改成和插件统计的一样,这样零件属性里面就有数量了8 S/ |$ b6 C: \* G. s: D

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
回复 支持 反对

使用道具 举报

发表于 前天 20:34 | 显示全部楼层
本帖最后由 faker558 于 2024-11-21 20:44 编辑
4 t0 R$ O9 o7 f5 h  S) Z
看前方 发表于 2024-11-21 19:550 u4 I6 @3 o3 P1 ]" T- d; Z
有的呀,BOM工具里面
+ e1 W$ Y. o4 O( {5 T. R我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟 ...
: S. P. V0 f, r# S6 \1 b
感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定义属性里也没变化,没有自动写入数量,有什么注意事项吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 08:08 | 显示全部楼层
土豆土豆442 发表于 2024-10-7 16:38" ^$ j% G" C$ J) a- e
楼主,能求个宏吗?不会搞

+ `; F" ^) A3 ^2 @( W一楼就是9 U* {5 u7 C* d/ Q  o
回复 支持 反对

使用道具 举报

 楼主| 发表于 昨天 08:08 | 显示全部楼层
faker558 发表于 2024-11-21 16:36. |; i% q# u2 x' L( {4 E$ ]2 M% l
刷个威望下附件
/ s# l! g! ]) s" @! _  }
就怕你威望不够,代码都给你了
/ L  I' {; n# S; S# t# ^! _; T
回复 支持 反对

使用道具 举报

发表于 昨天 08:48 | 显示全部楼层
faker558 发表于 2024-11-21 20:34
, W+ i+ q$ @$ i$ U7 w; t; ~感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定 ...
2 `- _9 i, H0 N0 n6 ]1 i2 J+ \
那个宏不是我写的,我没有用宏
9 v9 L6 D! C- R3 P5 @6 [! H0 [我截的那个图里面,前面那个总数量就是插件统计的,但是那个数量写不到零件属性里面,所以我在后面加了一个数量的项,这个项是可以链接到零件属性里面去的。然后按照插件统计的总数量手动填上去,零件数量上就有显示了9 n4 h+ Q! c) \& L* I
回复 支持 反对

使用道具 举报

发表于 昨天 11:30 | 显示全部楼层
李邈 发表于 2024-11-22 08:083 N9 l# x1 ?& E- _4 m% Q
就怕你威望不够,代码都给你了

4 q$ I) y- f9 N- p) f楼主,我用了你那个宏,怎么属性列表里的数量没有变化8 j% H1 |2 r$ F3 A  l6 D
回复 支持 反对

使用道具 举报

发表于 昨天 11:31 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
1 c& |3 Y$ }/ j+ j/ g就怕你威望不够,代码都给你了
7 f6 C0 j' w0 r9 D
压缩包的我试了,复制代码也试了
回复 支持 反对

使用道具 举报

发表于 昨天 11:49 | 显示全部楼层
感谢楼主分享,很不错!
& N0 F$ h: t, w  _楼主辛苦了!
回复 支持 反对

使用道具 举报

发表于 昨天 11:49 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
& z& t! A7 n% a. ]5 t- d: Y5 q就怕你威望不够,代码都给你了
0 J! s- c' D4 U6 m) o3 {4 v
十分感谢楼主,可以用了,我的SW版本是2020,把库改成2020就可以用了,十分感谢
+ D) w  r* o4 U' r$ l) [! T
回复 支持 反对

使用道具 举报

发表于 昨天 11:58 | 显示全部楼层
我用手机助手写了一个宏程序,不知道为什么用不了,语法错误,楼主可以帮忙看看吗) T" ~" N1 P8 q" }, ?7 h1 l4 ~
以下是一个用于SolidWorks(SW)的向装配体里面写入零件总数量的宏的示例。此宏使用VBA(Visual Basic for Applications)编写,可以在SolidWorks的宏环境中运行。请按照以下步骤操作:
1 w$ |0 E9 n% M: S2 s5 Y. B, I% u$ x& G) X; |
1. 打开SolidWorks并启用宏环境4:# C( `  V( G  i0 c! F# k: V, \8 p
确保你的SolidWorks已经安装了VBA宏支持。' p  g9 ?; s% O- @% O' W% e& Y
打开SolidWorks,并启用宏录制和运行功能(通常在“工具”或“选项”菜单中可以找到)。" c& H$ S1 J  y. F6 ^3 I6 n( {- e
2. 编写宏代码:; o$ b- L& ^* O3 K- ?0 ~
 
4 @, c' e! T& I+ N* U$ q$ }" _6 Z  vDim swApp As SldWorks.SldWorks
8 e5 R0 W# M2 DDim swAssy As SldWorks.AssemblyDoc
, X) C. a) m) q% I# iDim swComp As SldWorks.Component2
: Z4 _- ?8 c5 [6 ~0 l( t4 sDim vComps As Variant
5 G- j/ o0 f0 \Dim i As Long, totalQty As Long3 {! ]. [0 B) W& ]
Dim customPropMgr As SldWorks.CustomPropertyManager
) f, |  x" f5 g% Q" s9 x- B5 ?8 MDim customPropName As String3 A7 L3 v& L1 m, Z
1 q8 x/ a* K" o' F; P
' 初始化SolidWorks应用程序对象
* Q4 t; {6 b3 J3 X& u2 n% o) B2 OSet swApp = Application.SldWorks
) w# c7 W2 V/ @3 ?, O/ i
2 P$ ?5 L  n. ~3 T  O# t! ~0 R' 获取当前活动的装配体文档
/ g$ f+ F: A3 g2 q4 ^Set swAssy = swApp.ActiveDoc
0 G) T: {; ~1 ]- f
! P2 Q2 u9 |* B, o, f! [6 c' 检查是否为装配体文档
  B5 }4 [- l( R. I) ~' U8 Y3 SIf swAssy Is Nothing Or swAssy.GetType <> swDocASSEMBLY Then
, N% J; l: a! w) A7 [5 c. n    MsgBox "请打开一个装配体文档。", vbExclamation
) b+ d; B1 Y9 G" F    Exit Sub4 Y3 B8 B2 x5 f
End If! r  O0 J- @$ g$ b6 b' M8 {

2 [& Q: t5 J5 f& g) [, D( X1 {2 n' 初始化零件总数量& N# b$ }, M; c: I/ h/ X: ^1 ]" J
totalQty = 0
+ K4 e: o, V- W! A1 L9 i7 h( `9 o* k. Z' R) n; p" O* b: c* o
' 自定义属性名称,用于存储零件总数量0 I- M' k9 j8 F* f  ^, B
customPropName = "TotalQty"
: l) x1 G! D- m" K" d
- V/ \6 w' w( w' 遍历装配体中的所有组件" y2 X. X) ]. h3 @3 J# O0 @7 e6 z
With swAssy.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True): n0 M$ {1 R1 y- x+ C
    Set vComps = .GetChildren4 a; |) G8 ^) f) x; k# R; P4 X
    If Not IsEmpty(vComps) Then! G' \+ x2 [* T
        For i = 0 To UBound(vComps)
+ G. {! t; {) ~2 o5 a            Set swComp = vComps(i)* i; W7 @; C" e& @/ \9 b

( S# q, x  ~3 X" {- ^* }: ~            ' 检查组件是否被抑制,如果没有被抑制,则计入总数
$ ^3 P. e% H7 e; p7 l/ j            If swComp.GetSuppression() = swComponentSuppression_e.swComponentNotSuppressed Then2 N! B" X4 @2 y" d8 ?
                ' 如果组件是零件,则数量加1
: e( T0 F8 ?& E0 t6 Q9 A3 m                If swComp.GetType = swDocPART Then
! L# f6 J: x# @! K7 A3 w                    totalQty = totalQty + 1, ~" Z/ N: r8 T
                ElseIf swComp.GetType = swDocASSEMBLY Then
. N4 z- [" I0 Z+ |% n                    ' 如果组件是子装配体,则递归计算子装配体中的零件数量/ |8 c2 d& A1 F. z$ M" H- @
                    ' 这里为了简化示例,不递归计算子装配体中的零件数量) i* G5 w" [9 ]$ g2 ]7 {7 A1 C
                    ' 你可以根据需要添加递归函数来处理子装配体- `! ?  R7 d6 {  D5 A  i# J
                End If" Z' O: P( \7 g( l4 g4 _
            End If
1 p4 Y3 }. i; g  h, `. D        Next i
1 N) \. f6 u2 T/ O. }2 n    End If/ w2 P( r# u9 S. i- g  ?
End
) n/ _3 Z, X9 ^With; P9 b/ \. V8 O) ^( f  h" d
' 创建或更新自定义属性以存储零件总数量
$ e. C- {3 c& W& B" XSet customPropMgr = swAssy.Extension.CustomPropertyManager("")7 e7 G. N3 f3 \# q. u  ]
customPropMgr.Add2 customPropName, "系统", CStr(totalQty), swCustomPropertyInfo_e.swCustomPropText4 M, n6 [1 ^  }
' 注意:如果属性已存在,Add2 方法会更新其值,而不是创建新属性。
2 m) |/ ?. l/ l' 如果你想要确保属性总是被更新(即使值没有变化),可以使用Set2方法代替Add2。4 H8 m0 E: {0 F0 _
  d0 r7 {  u) i% f3 u. @
' 清理对象: Z& d$ e( u; }+ f$ Q1 R5 E
Set swComp = Nothing
* E  s0 c, m' ~" @. r. GSet swAssy = Nothing6 H  W6 |  x7 }6 M- w7 w
Set swApp = Nothing
5 u# p% p/ G0 x: V8 v$ H; q7 \  B8 ?! z, F& R& [
' 提示用户操作完成
" ~  J+ ~# _+ ?; S) p  GMsgBox "零件总数量已写入到自定义属性 """ & customPropName & """ 中,总数为:" & totalQty, vbInformation
: L' v0 \; T& K  S) g; w 
' g) @6 Z" i8 t3 W# L# Q4 ^3. 运行宏4:
0 a  j% v) y: c在SolidWorks中,打开一个装配体文档。
  t  H5 S* t1 E+ L& Z通过宏管理器(通常在“工具”菜单下)找到并运行你编写的宏。
1 m; l, k0 B8 h; J. Y; o' O+ |4. 验证结果:! S9 h" p% N: C4 F2 }1 U
运行宏后,你应该会在装配体的自定义属性中找到一个名为“TotalQty”的属性,其值应该等于装配体中零件的总数量。
6 I0 g1 T9 W$ y" c' B**注意事项 **:
5 S7 H7 _2 l  l; r7 f此宏仅计算装配体中的顶层零件数量,不包括子装配体中的零件数量。如果你需要计算包括子装配体在内的所有零件数量,你需要添加递归函数来处理子装配体。0 |, A' G1 ?1 B" f9 P/ q: [2 _  D
在运行宏之前,请确保你的SolidWorks文档没有未保存的更改,以防宏运行过程中发生意外导致数据丢失。
8 o% l, f  F$ P3 P. M2 i宏代码中的错误处理部分可以根据你的需求进行扩展和完善,以提高宏的健壮性和可靠性。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 00:14 , Processed in 0.055228 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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