机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 李邈

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

[复制链接]
发表于 2024-11-21 19:55:25 | 显示全部楼层
faker558 发表于 2024-11-21 16:35
+ k6 A7 _$ P8 S5 p1 o在开元没有看到这个功能啊
. C) |& o3 V* Y8 G
有的呀,BOM工具里面
  u4 V" w# @9 p+ g/ K我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟插件的数量对比,如果不一样,就改成和插件统计的一样,这样零件属性里面就有数量了
3 W0 ~* o6 l9 D  U  y4 o

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2024-11-21 20:34:27 | 显示全部楼层
本帖最后由 faker558 于 2024-11-21 20:44 编辑
$ l1 m2 E3 O# r1 ^% \
看前方 发表于 2024-11-21 19:55
. f- {2 `. W" N, [3 T" M有的呀,BOM工具里面
& S' R. ?) b8 |7 y8 ]: o  ^' a我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟 ...

7 b- k* D" r+ B' d7 D感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定义属性里也没变化,没有自动写入数量,有什么注意事项吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-22 08:08:00 | 显示全部楼层
土豆土豆442 发表于 2024-10-7 16:38
& C5 w% j. z* r' p" H" x% Q: X楼主,能求个宏吗?不会搞

. p# f% N! C4 X( p0 |. I一楼就是  J: g1 v4 i% r  I, u( x4 i: l
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-22 08:08:56 | 显示全部楼层
faker558 发表于 2024-11-21 16:36; N5 u' u  ~$ k+ q1 X) q
刷个威望下附件

5 ]0 T! U5 N4 ?( B就怕你威望不够,代码都给你了9 V' Z# j: G2 n, A6 N- ?) i
回复 支持 反对

使用道具 举报

发表于 2024-11-22 08:48:09 | 显示全部楼层
faker558 发表于 2024-11-21 20:34/ s; Y( H8 P: P! X' F
感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定 ...

: q% }) m6 R6 Y! L那个宏不是我写的,我没有用宏4 |) p! m5 B, _+ I6 L- J
我截的那个图里面,前面那个总数量就是插件统计的,但是那个数量写不到零件属性里面,所以我在后面加了一个数量的项,这个项是可以链接到零件属性里面去的。然后按照插件统计的总数量手动填上去,零件数量上就有显示了
' j8 N: v& M* s8 p, ^2 Q
回复 支持 反对

使用道具 举报

发表于 2024-11-22 11:30:19 | 显示全部楼层
李邈 发表于 2024-11-22 08:08# B$ P/ l( }$ b1 Y
就怕你威望不够,代码都给你了

4 H1 f( M# i8 v' N! Y& B! r/ s楼主,我用了你那个宏,怎么属性列表里的数量没有变化6 w6 d- U4 z) w% P/ y, j8 b
回复 支持 反对

使用道具 举报

发表于 2024-11-22 11:31:39 | 显示全部楼层
李邈 发表于 2024-11-22 08:08: |6 W8 l( P4 h7 Y0 s
就怕你威望不够,代码都给你了
, r: R( {7 h) u6 S" {  w! n
压缩包的我试了,复制代码也试了
回复 支持 反对

使用道具 举报

发表于 2024-11-22 11:49:02 | 显示全部楼层
感谢楼主分享,很不错!7 H2 U# i4 \, h% U
楼主辛苦了!

点评

应该的xixi  发表于 2024-11-23 08:30
回复 支持 反对

使用道具 举报

发表于 2024-11-22 11:49:20 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
) ?( j1 l# v2 a就怕你威望不够,代码都给你了
; h. ?; b* ?# P
十分感谢楼主,可以用了,我的SW版本是2020,把库改成2020就可以用了,十分感谢. D5 G# R1 t/ G5 u8 e: C2 Y
回复 支持 1 反对 0

使用道具 举报

发表于 2024-11-22 11:58:45 | 显示全部楼层
我用手机助手写了一个宏程序,不知道为什么用不了,语法错误,楼主可以帮忙看看吗- i; u/ {7 T3 R1 h4 b5 |  ?
以下是一个用于SolidWorks(SW)的向装配体里面写入零件总数量的宏的示例。此宏使用VBA(Visual Basic for Applications)编写,可以在SolidWorks的宏环境中运行。请按照以下步骤操作:+ s/ o( U0 T! [: g4 m& u

& h' a1 h, [- x: h  n" U4 {1. 打开SolidWorks并启用宏环境4:; h7 v3 B4 w6 O' o' _5 W
确保你的SolidWorks已经安装了VBA宏支持。5 c5 ]$ E  q, E' N) z; Z
打开SolidWorks,并启用宏录制和运行功能(通常在“工具”或“选项”菜单中可以找到)。: ~# P5 U9 l- g6 O7 c' l. W" y# Z
2. 编写宏代码:
$ \# _  {2 e  m 
8 R" H$ }4 \- bDim swApp As SldWorks.SldWorks
' `* K& Z/ G5 bDim swAssy As SldWorks.AssemblyDoc
5 y9 P' ?+ k. }Dim swComp As SldWorks.Component2- \# L4 y7 P3 L: I; P, _
Dim vComps As Variant: A9 a( x& n* V: ~
Dim i As Long, totalQty As Long# l3 C$ M$ a( q! o/ w# P: V
Dim customPropMgr As SldWorks.CustomPropertyManager/ f3 C7 O7 E/ B+ G' z% H
Dim customPropName As String: D6 D: K- N* C! R& _5 O/ E6 f
+ b! ~: M2 ~7 y) b  X2 {
' 初始化SolidWorks应用程序对象
, V' j) U0 D  q# \* m# ISet swApp = Application.SldWorks+ {+ r: x( B) F4 o5 P! P2 A

2 |; ^  U" d5 q) t# \0 @  O' 获取当前活动的装配体文档
' u0 q% ~% F& E$ ]' ~Set swAssy = swApp.ActiveDoc# {) J, `$ H% U( A6 }& U2 U% a7 @
! l+ J, l$ @$ ~- B
' 检查是否为装配体文档' @5 H! A4 O+ c0 ~
If swAssy Is Nothing Or swAssy.GetType <> swDocASSEMBLY Then
4 P# J+ T7 c  \/ j! |( W8 A    MsgBox "请打开一个装配体文档。", vbExclamation  B2 k3 ^, G( r6 f) Q
    Exit Sub" q, |! ~0 _/ Y8 G( x. T
End If$ ]  H6 f: {& J* D/ R5 R1 `! [

) T2 w! H) ~" Y( ?# P' 初始化零件总数量1 U- m# B# p9 M) Y8 M2 [
totalQty = 0
' W3 v  \8 B. r" j( U! m- @/ m8 c- U1 o9 f. ~9 g' w/ m1 |
' 自定义属性名称,用于存储零件总数量  ^( X5 c1 j9 x" T* }/ A; r" p
customPropName = "TotalQty"4 T0 w5 \1 _4 R8 P$ m

: f% F2 }8 [& o. N/ p2 S; C# S" T' 遍历装配体中的所有组件: V1 Q# \; N) X/ {- P' p5 Q7 j
With swAssy.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
& U# f5 i. z& R    Set vComps = .GetChildren
: N6 M- V% |2 e( ^1 x8 ?$ W6 Z! @    If Not IsEmpty(vComps) Then
8 s+ J) s/ ^, t/ N. @/ L        For i = 0 To UBound(vComps)8 K5 W$ s- j( O/ }3 n5 A
            Set swComp = vComps(i)
  E: _: z) x2 o5 r' P# D! M
; G0 W: {/ C& f. H            ' 检查组件是否被抑制,如果没有被抑制,则计入总数
+ W7 @7 J. W5 k+ I; R# J; A; p            If swComp.GetSuppression() = swComponentSuppression_e.swComponentNotSuppressed Then* e7 h; m" q4 f4 A: u8 d
                ' 如果组件是零件,则数量加1; \0 s9 t# V( j& C0 _( _1 X
                If swComp.GetType = swDocPART Then
$ F0 @, m/ Y$ s4 W                    totalQty = totalQty + 12 C% w" A8 D/ k9 {
                ElseIf swComp.GetType = swDocASSEMBLY Then) F+ K8 Z8 i* H9 Z3 s9 V8 {
                    ' 如果组件是子装配体,则递归计算子装配体中的零件数量5 [7 S8 N4 K6 ]2 M! W* [* \
                    ' 这里为了简化示例,不递归计算子装配体中的零件数量2 w: C2 A8 t# e- A2 _
                    ' 你可以根据需要添加递归函数来处理子装配体6 I; U6 j+ N" E
                End If- H. R8 Z2 ]: u1 G# \4 V' J3 j
            End If+ P  L9 ?4 y( F9 O4 l  Z
        Next i5 f2 V4 V3 I& W* E
    End If! N) H$ D3 [. A$ C
End
. d$ V+ q' j, k1 Q) iWith
& c' j% v2 B$ E6 }2 ^1 a' 创建或更新自定义属性以存储零件总数量  W; B$ U8 j5 c+ C2 P
Set customPropMgr = swAssy.Extension.CustomPropertyManager("")
5 m. K+ c6 J, bcustomPropMgr.Add2 customPropName, "系统", CStr(totalQty), swCustomPropertyInfo_e.swCustomPropText& [0 A" q* D2 Z, A: m. w. ~
' 注意:如果属性已存在,Add2 方法会更新其值,而不是创建新属性。+ o* S- `- g1 P
' 如果你想要确保属性总是被更新(即使值没有变化),可以使用Set2方法代替Add2。3 U! e& r) L6 l* G( T3 s8 a4 p

# O! s4 e, L* l% t! F* [5 p$ |7 K9 z2 D' 清理对象
* q: [+ f' o  L$ y' v/ m2 pSet swComp = Nothing1 Z( Z0 c, l. Q* N
Set swAssy = Nothing
# U! t$ N4 N0 Q1 q1 C; B+ f( uSet swApp = Nothing
) i( S7 Q) e; p' J/ d/ o/ Z+ q/ U0 A
' 提示用户操作完成
; ?2 x9 _. [  P- _( uMsgBox "零件总数量已写入到自定义属性 """ & customPropName & """ 中,总数为:" & totalQty, vbInformation- p  v; k  j1 Z$ [) g& w  f
 : [8 \' r5 I: P
3. 运行宏4:
+ s. z: t. L: R( R7 F在SolidWorks中,打开一个装配体文档。3 ?% S* \* t) C5 W9 W
通过宏管理器(通常在“工具”菜单下)找到并运行你编写的宏。+ D8 p% y9 c6 o
4. 验证结果:
5 F- }8 s# N) ^运行宏后,你应该会在装配体的自定义属性中找到一个名为“TotalQty”的属性,其值应该等于装配体中零件的总数量。
. u1 d3 \/ p* ~* ^$ S5 \5 p' G**注意事项 **:
* D6 F( L3 O8 j6 D0 J/ G! s( H此宏仅计算装配体中的顶层零件数量,不包括子装配体中的零件数量。如果你需要计算包括子装配体在内的所有零件数量,你需要添加递归函数来处理子装配体。
" |4 _1 w5 h3 C2 P; g: c+ C在运行宏之前,请确保你的SolidWorks文档没有未保存的更改,以防宏运行过程中发生意外导致数据丢失。
0 y- ?8 p! p% F9 N宏代码中的错误处理部分可以根据你的需求进行扩展和完善,以提高宏的健壮性和可靠性。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-1 15:46 , Processed in 0.082085 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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