找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 李邈

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

  [复制链接]
发表于 2024-11-21 19:55:25 | 显示全部楼层
faker558 发表于 2024-11-21 16:35; w& ]+ {3 d% ]4 ]# c, x3 D, D
在开元没有看到这个功能啊

5 H) {, |; k$ i% ?有的呀,BOM工具里面8 }; ]* l% A! T3 f# Y* D$ l) E
我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟插件的数量对比,如果不一样,就改成和插件统计的一样,这样零件属性里面就有数量了% A0 E: _( u: z& b8 e/ k/ A+ a3 l

本帖子中包含更多资源

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

×
发表于 2024-11-21 20:34:27 | 显示全部楼层
本帖最后由 faker558 于 2024-11-21 20:44 编辑 + d7 `& Q" z; J
看前方 发表于 2024-11-21 19:55# t+ o0 o2 h, V0 }  i
有的呀,BOM工具里面1 ^6 n% K, \6 F3 b$ `% o7 J) |
我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟 ...
( O) c1 T4 b+ p( a2 H( X$ Z
感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定义属性里也没变化,没有自动写入数量,有什么注意事项吗
 楼主| 发表于 2024-11-22 08:08:00 | 显示全部楼层
土豆土豆442 发表于 2024-10-7 16:38
, r) o1 e8 d" u8 w楼主,能求个宏吗?不会搞

8 f2 w; r. ~, u$ Y一楼就是
7 x) z% a0 L1 W; U! V$ A1 ]! q
 楼主| 发表于 2024-11-22 08:08:56 | 显示全部楼层
faker558 发表于 2024-11-21 16:36
% P$ w. U+ S8 y1 \5 a9 b7 A' `+ h& I! o刷个威望下附件

" E- Q3 H7 Y6 d+ z3 b就怕你威望不够,代码都给你了
# U5 j9 g5 D9 t& K
发表于 2024-11-22 08:48:09 | 显示全部楼层
faker558 发表于 2024-11-21 20:34; W/ Z$ Q, C7 z$ r( z
感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定 ...

7 L' y/ E9 j; N( K% P6 H- \7 h- n那个宏不是我写的,我没有用宏
( `* c9 O* X5 K+ b我截的那个图里面,前面那个总数量就是插件统计的,但是那个数量写不到零件属性里面,所以我在后面加了一个数量的项,这个项是可以链接到零件属性里面去的。然后按照插件统计的总数量手动填上去,零件数量上就有显示了2 N1 D( B1 F. d; F+ c) J% ~& I& D
发表于 2024-11-22 11:30:19 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
. |) X1 E$ Q$ g; a" e就怕你威望不够,代码都给你了
2 G2 T9 D1 V* y1 C4 W
楼主,我用了你那个宏,怎么属性列表里的数量没有变化
* v0 [9 W$ N/ o6 @6 @; a
发表于 2024-11-22 11:31:39 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
: {$ x1 D, S' i  Z! X9 K9 x0 Z. o就怕你威望不够,代码都给你了

) E. j6 Y$ ]; U6 |3 T4 f压缩包的我试了,复制代码也试了
发表于 2024-11-22 11:49:02 | 显示全部楼层
感谢楼主分享,很不错!# q; U$ N( Y) ?0 _
楼主辛苦了!

点评

应该的xixi  发表于 2024-11-23 08:30
发表于 2024-11-22 11:49:20 | 显示全部楼层
李邈 发表于 2024-11-22 08:08) x* g  T/ z: y3 |
就怕你威望不够,代码都给你了

$ }0 `4 ]1 S/ U& M5 P十分感谢楼主,可以用了,我的SW版本是2020,把库改成2020就可以用了,十分感谢- B" L0 i' y- y: K
发表于 2024-11-22 11:58:45 | 显示全部楼层
我用手机助手写了一个宏程序,不知道为什么用不了,语法错误,楼主可以帮忙看看吗- h0 E* U" e( R+ v- @
以下是一个用于SolidWorks(SW)的向装配体里面写入零件总数量的宏的示例。此宏使用VBA(Visual Basic for Applications)编写,可以在SolidWorks的宏环境中运行。请按照以下步骤操作:
& T; b3 j% T1 c* S  ~. ]5 h9 r0 X3 M; g( x. t: L
1. 打开SolidWorks并启用宏环境4:2 U0 @9 f- l9 K3 L% X2 |+ E
确保你的SolidWorks已经安装了VBA宏支持。
% z! `7 v/ l: `3 j7 J打开SolidWorks,并启用宏录制和运行功能(通常在“工具”或“选项”菜单中可以找到)。
: M9 k% z$ e; d2 d; X6 `" u3 ^2. 编写宏代码:
2 e# |; k% D* F) q% A8 f8 S 
& s+ L: z, a! {Dim swApp As SldWorks.SldWorks
4 _. H! D% Z+ CDim swAssy As SldWorks.AssemblyDoc- k  r* H% H1 O( r" a( H
Dim swComp As SldWorks.Component2
, e4 ^5 `& F  gDim vComps As Variant% }, N& ?% k) K2 u+ q
Dim i As Long, totalQty As Long
& I1 u) f+ Q/ R; S9 \Dim customPropMgr As SldWorks.CustomPropertyManager
3 K& p6 P  T, k) _* y% L& @Dim customPropName As String
  S7 Y9 l; n# Q/ r! m/ x9 x. s. A  _( C6 t; ]. F
' 初始化SolidWorks应用程序对象
; ^8 o4 C3 x2 Y' N- @, Z7 wSet swApp = Application.SldWorks. [# O5 [2 j/ h% |# {9 o; ~
' `: ?5 a! m' Y1 y
' 获取当前活动的装配体文档
  Z9 W* b  y7 }# l) ]Set swAssy = swApp.ActiveDoc. x1 I1 P; I9 {# a
2 Q1 i! o& _# H  s. c1 y* c( Q& ?
' 检查是否为装配体文档* M( O# b- y, J" M# o$ Q
If swAssy Is Nothing Or swAssy.GetType <> swDocASSEMBLY Then4 H, G% @& p; B  K+ O1 L4 Z
    MsgBox "请打开一个装配体文档。", vbExclamation
2 {4 b! G1 W2 J9 r% D, {    Exit Sub" `5 {" A) G$ H7 `: h3 [. t# ^) q
End If
1 ~# k) \3 U# T% E- j: Y/ c: ]  c' L+ t
' 初始化零件总数量% L% M3 ]# ]. l  R$ E  ]
totalQty = 0* D* T( o- J4 a, K# t
/ j% m( y6 x# e" E$ y) a; o& u
' 自定义属性名称,用于存储零件总数量4 r. t2 J4 Z$ L1 F
customPropName = "TotalQty"' ^6 l6 A- c# h. h6 D7 U" q1 V5 T
+ Y2 ]6 H! C& O" k9 w. m
' 遍历装配体中的所有组件
$ a9 v+ b' M2 h- D5 g- l$ s3 o$ `With swAssy.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
1 [" A8 h/ L+ t    Set vComps = .GetChildren( P7 g9 Z! k) E9 \
    If Not IsEmpty(vComps) Then, A$ B" z  c0 W8 U
        For i = 0 To UBound(vComps)
6 J# K+ j# `' U            Set swComp = vComps(i)
' X. J" V& Q# q5 ]8 K& i4 [2 O7 G* V1 A' x3 _$ Z
            ' 检查组件是否被抑制,如果没有被抑制,则计入总数
5 u% t4 k6 K: g            If swComp.GetSuppression() = swComponentSuppression_e.swComponentNotSuppressed Then
3 u  e2 f: a5 y3 e                ' 如果组件是零件,则数量加1
& q, P6 n" k2 f" p5 i0 k0 n                If swComp.GetType = swDocPART Then
( _; q) r  q7 l- u' h' V: M                    totalQty = totalQty + 1
& \' @: q. f/ S3 {* R                ElseIf swComp.GetType = swDocASSEMBLY Then
. W6 ?3 k! Z. o1 p6 `% q: O6 ~, b                    ' 如果组件是子装配体,则递归计算子装配体中的零件数量, k: h% D. J0 }4 I/ U3 F* K
                    ' 这里为了简化示例,不递归计算子装配体中的零件数量" w% \6 |6 S6 @) }" w# a7 _* V
                    ' 你可以根据需要添加递归函数来处理子装配体# {) t4 \4 k* ~
                End If- d1 Z3 t! K! g, l
            End If
9 l4 W, P% i% P% T: Z1 \" \' D+ R        Next i
0 ?: n" L9 g, F2 d    End If. L5 m$ i$ Q/ W- a7 ~* ?1 v
End
1 V; f- C% S% }6 m% o& \& _With
# l' U4 o: S, c* S# B' 创建或更新自定义属性以存储零件总数量
9 d  h8 R) C1 pSet customPropMgr = swAssy.Extension.CustomPropertyManager("")0 Z2 ~, v8 F$ Y4 z# h3 Q; ?/ K
customPropMgr.Add2 customPropName, "系统", CStr(totalQty), swCustomPropertyInfo_e.swCustomPropText+ }- F/ X: m+ ]$ m+ E* L6 |
' 注意:如果属性已存在,Add2 方法会更新其值,而不是创建新属性。
6 e0 C$ o8 ^+ L7 M' 如果你想要确保属性总是被更新(即使值没有变化),可以使用Set2方法代替Add2。' L4 n# J9 K" I4 T, _4 R
, w# F8 ^9 }! L# I2 v; a* ]* I
' 清理对象, I8 h7 X% D9 F# h% ^& Q
Set swComp = Nothing. W2 U3 y6 u& c! i) K  ?) g. P
Set swAssy = Nothing
+ y; q" l% o/ S) s' @! r6 d' U* v3 p6 KSet swApp = Nothing
& t! {% i9 v) U7 E- N; i6 i7 h) g' M: J1 d$ W& h
' 提示用户操作完成# V; ^( H/ R+ A' B3 W4 i5 V" O
MsgBox "零件总数量已写入到自定义属性 """ & customPropName & """ 中,总数为:" & totalQty, vbInformation0 h9 ^( E* u7 U' F5 `
&#160;: s6 q0 B7 e" _1 @. Y
3. 运行宏4:$ ~4 b7 X4 j. V+ E! r
在SolidWorks中,打开一个装配体文档。. y# [3 T0 B0 `, b
通过宏管理器(通常在“工具”菜单下)找到并运行你编写的宏。
1 U) d; o! L5 ], s0 o4. 验证结果:: e( ?4 i" Z& |' `6 B1 T/ d
运行宏后,你应该会在装配体的自定义属性中找到一个名为“TotalQty”的属性,其值应该等于装配体中零件的总数量。3 y' b) Q6 b" _# q3 B" o- U7 I
**注意事项 **:
4 u4 t! L) w  ?; [9 a2 X此宏仅计算装配体中的顶层零件数量,不包括子装配体中的零件数量。如果你需要计算包括子装配体在内的所有零件数量,你需要添加递归函数来处理子装配体。0 `9 r. x. j8 }6 ]. g
在运行宏之前,请确保你的SolidWorks文档没有未保存的更改,以防宏运行过程中发生意外导致数据丢失。, f- e5 V2 s1 ]& v
宏代码中的错误处理部分可以根据你的需求进行扩展和完善,以提高宏的健壮性和可靠性。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-9-16 22:17 , Processed in 0.074997 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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