找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 李邈

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

[复制链接]
发表于 2024-11-21 19:55:25 | 显示全部楼层
faker558 发表于 2024-11-21 16:35
" \3 }) P& ^/ [/ N* u# R$ t8 s  k在开元没有看到这个功能啊

/ A4 w& z" U( J) L7 N$ L$ Z有的呀,BOM工具里面
$ V; v- {' U* f2 H8 Z* e( h8 X7 G我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟插件的数量对比,如果不一样,就改成和插件统计的一样,这样零件属性里面就有数量了
: ^5 W! V) P% S9 m# L

本帖子中包含更多资源

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

×
发表于 2024-11-21 20:34:27 | 显示全部楼层
本帖最后由 faker558 于 2024-11-21 20:44 编辑
4 l" j2 c  W) w' `+ ~; G8 j+ E
看前方 发表于 2024-11-21 19:55. T8 i1 h- v2 D( ]8 _: l
有的呀,BOM工具里面. ?) m) Q# g) h  i9 b+ r
我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟 ...

1 K9 R' I, T; a% F感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定义属性里也没变化,没有自动写入数量,有什么注意事项吗
 楼主| 发表于 2024-11-22 08:08:00 | 显示全部楼层
土豆土豆442 发表于 2024-10-7 16:38: _: x$ ~# v, f! g+ N+ ?
楼主,能求个宏吗?不会搞
4 [1 R' K$ |' l) s7 \
一楼就是
& h5 e  s+ @1 W* k- l
 楼主| 发表于 2024-11-22 08:08:56 | 显示全部楼层
faker558 发表于 2024-11-21 16:360 B2 L1 B/ B( n) t) x  T+ r+ Y
刷个威望下附件

: \2 N9 p8 f$ B& C- O就怕你威望不够,代码都给你了+ y4 o% l: Z4 x: e; }& R( B3 b. `
发表于 2024-11-22 08:48:09 | 显示全部楼层
faker558 发表于 2024-11-21 20:34
! y5 O" H5 [0 V+ R. N. q感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定 ...
' G/ q- k$ e: @0 z2 Z2 o8 u. ]
那个宏不是我写的,我没有用宏0 d7 ^# Y" Q: O' r- v
我截的那个图里面,前面那个总数量就是插件统计的,但是那个数量写不到零件属性里面,所以我在后面加了一个数量的项,这个项是可以链接到零件属性里面去的。然后按照插件统计的总数量手动填上去,零件数量上就有显示了" h) c, t8 I9 ~3 L/ \' y( [" |2 n
发表于 2024-11-22 11:30:19 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
* D3 g( W/ f2 g6 F( m4 G% e就怕你威望不够,代码都给你了
- ~1 @  M: W- I  {! V/ O
楼主,我用了你那个宏,怎么属性列表里的数量没有变化- j- ]& N# A2 ?
发表于 2024-11-22 11:31:39 | 显示全部楼层
李邈 发表于 2024-11-22 08:081 S! |2 ~& Z. ~# Q) z( R3 N- `
就怕你威望不够,代码都给你了
6 V$ q5 M1 K; q
压缩包的我试了,复制代码也试了
发表于 2024-11-22 11:49:02 | 显示全部楼层
感谢楼主分享,很不错!
& V1 o* Q/ g, P2 M. J8 d" \+ P) ^楼主辛苦了!

点评

应该的xixi  发表于 2024-11-23 08:30
发表于 2024-11-22 11:49:20 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
3 l$ n( g" }: h7 H就怕你威望不够,代码都给你了
( p* a, [0 F' O. E/ f( T
十分感谢楼主,可以用了,我的SW版本是2020,把库改成2020就可以用了,十分感谢5 ]2 R) h/ z/ O* F# A) x
发表于 2024-11-22 11:58:45 | 显示全部楼层
我用手机助手写了一个宏程序,不知道为什么用不了,语法错误,楼主可以帮忙看看吗
2 Z3 i5 r- w3 u3 Z# z4 F2 T/ J1 e以下是一个用于SolidWorks(SW)的向装配体里面写入零件总数量的宏的示例。此宏使用VBA(Visual Basic for Applications)编写,可以在SolidWorks的宏环境中运行。请按照以下步骤操作:
/ |/ \0 q( Z/ [5 L  y
3 G+ e9 N$ D) v8 m1 N  `1. 打开SolidWorks并启用宏环境4:
/ U, [/ n4 [; x. a* v( P确保你的SolidWorks已经安装了VBA宏支持。! H) \; T' m6 k  X. p, L" h
打开SolidWorks,并启用宏录制和运行功能(通常在“工具”或“选项”菜单中可以找到)。
  E% V1 Q: C( |  g2 `: r2. 编写宏代码:
+ Z7 P& B& S3 O& Y: B" E  c $ M# v8 X! f) L5 f0 l
Dim swApp As SldWorks.SldWorks
4 p6 c+ s; K7 u9 dDim swAssy As SldWorks.AssemblyDoc
0 i: ]* N1 Q- W  e" Q" zDim swComp As SldWorks.Component2
# }% g- n" a5 i+ ADim vComps As Variant$ i( U8 k+ h# ~+ N4 ^2 |! l
Dim i As Long, totalQty As Long
! B. ]$ F- j  z1 ?! xDim customPropMgr As SldWorks.CustomPropertyManager
* n3 C. L, U  yDim customPropName As String
& h/ g8 }" z: {0 T" F) p: H# C# L0 {4 @. N: ~" {9 i# u
' 初始化SolidWorks应用程序对象
- \. F; ?# l" W7 Q5 n5 WSet swApp = Application.SldWorks4 S; m! e; o4 M4 X$ H  Z& e! A4 ~( ]
5 ~/ W4 s, J. h, Z5 O* p
' 获取当前活动的装配体文档/ o7 Y. Z6 A& S2 p& y
Set swAssy = swApp.ActiveDoc
$ T! Q# c" b' ]8 q6 y( b6 {( F. Z7 b& Y' ^, @
' 检查是否为装配体文档% [, F( X! U5 a5 w& H$ C1 W( B
If swAssy Is Nothing Or swAssy.GetType <> swDocASSEMBLY Then4 {, L. y7 z& w4 s  K2 [8 P2 Q
    MsgBox "请打开一个装配体文档。", vbExclamation& ^& L7 Z# X+ n& J% \2 o1 Y$ ~% S
    Exit Sub; i6 u. _  c. q. q  z4 h. P
End If
7 R8 B4 `6 ]& l; Z$ l" D' t- v1 ]- P( f, a  r  ]
' 初始化零件总数量
9 m4 [& E6 i9 D  ZtotalQty = 0
$ T& n+ r7 _  ?' ]* m- A$ R/ k0 O" b( Y5 Q& s" \1 R
' 自定义属性名称,用于存储零件总数量: _6 i  z+ I5 W/ e) K$ b( k
customPropName = "TotalQty"9 `  F7 ]% b: h. p
: ~$ e, R+ ~3 t- I2 r- ~4 I" Z9 Q* Z
' 遍历装配体中的所有组件
6 ?( h4 A' F7 Z  g2 x' CWith swAssy.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
, W# {) M; x! ~: b; a" G6 M    Set vComps = .GetChildren9 j" H6 j6 u! z8 h  Y1 _$ j8 l
    If Not IsEmpty(vComps) Then9 \1 \0 V/ t8 I5 {) o. |3 x  R7 v% B
        For i = 0 To UBound(vComps)
0 _5 U+ V) J  V8 m+ z. Q  n9 c$ @            Set swComp = vComps(i)
( E, ~+ I# k: x  ^! X( _% F  ?: A1 p7 }( x: i. k- H, p5 h
            ' 检查组件是否被抑制,如果没有被抑制,则计入总数5 s; {( j. V& u8 `6 _- q
            If swComp.GetSuppression() = swComponentSuppression_e.swComponentNotSuppressed Then
" h, [! F3 N2 e; B$ T                ' 如果组件是零件,则数量加1! m, ]; h: M' \
                If swComp.GetType = swDocPART Then
' l4 @' u3 _# r$ |; u                    totalQty = totalQty + 1! F7 U9 _0 |6 F4 n  _) ~
                ElseIf swComp.GetType = swDocASSEMBLY Then
, k1 S  z) e* w+ J" G3 l                    ' 如果组件是子装配体,则递归计算子装配体中的零件数量
3 @* a; k1 {$ {/ [7 F                    ' 这里为了简化示例,不递归计算子装配体中的零件数量/ m5 f6 d' e' Z+ `& B8 ~# @
                    ' 你可以根据需要添加递归函数来处理子装配体! @  s: s0 E: x, y/ X+ R
                End If
* p- D' m# e1 v/ v6 ?$ Y, g& T            End If
0 B* B* n) |! q+ Q        Next i& s. I% u' E/ B8 Q2 w0 r
    End If
: X8 v) \0 l7 b* _. QEnd ' `% @' }+ m5 ?) Q
With$ ~; q" D, s' M! d! g. Z& L
' 创建或更新自定义属性以存储零件总数量3 e! i8 S( _/ L
Set customPropMgr = swAssy.Extension.CustomPropertyManager("")8 z; \& G3 Q: @, [
customPropMgr.Add2 customPropName, "系统", CStr(totalQty), swCustomPropertyInfo_e.swCustomPropText1 |3 ^' v& {/ I
' 注意:如果属性已存在,Add2 方法会更新其值,而不是创建新属性。
! I1 {% h* P1 l" L) G- Y% }8 F' 如果你想要确保属性总是被更新(即使值没有变化),可以使用Set2方法代替Add2。
- f. u$ \! r! @( U% G- l2 P+ j+ z! n( R6 @
' 清理对象" F1 m6 F: [# p. C" C: Z6 P0 i  P3 N% h& z
Set swComp = Nothing" x3 a+ r' c! M
Set swAssy = Nothing. Z$ ^- j4 R( _* t( C* f2 Y/ z
Set swApp = Nothing
' ?. y: ]5 |2 x  }+ Y% u4 X6 F1 B6 G, }4 T6 ~9 ]
' 提示用户操作完成
5 @5 n, p) t+ v& g4 r' h- `MsgBox "零件总数量已写入到自定义属性 """ & customPropName & """ 中,总数为:" & totalQty, vbInformation2 l) K) w6 s, W
&#160;
" q6 Q: f8 j6 n' r5 c1 U3 K3. 运行宏4:8 ~, M, R: B( i. ?! Q- v
在SolidWorks中,打开一个装配体文档。
( r3 @. k4 X* \  f8 s* }1 ]6 J通过宏管理器(通常在“工具”菜单下)找到并运行你编写的宏。3 j) q' M; F% z* N
4. 验证结果:
7 L6 b) l! c! a; U运行宏后,你应该会在装配体的自定义属性中找到一个名为“TotalQty”的属性,其值应该等于装配体中零件的总数量。1 I# i) x# K: Q4 _6 V; h! B5 v7 _
**注意事项 **:
7 J" ~3 k% n5 b2 v此宏仅计算装配体中的顶层零件数量,不包括子装配体中的零件数量。如果你需要计算包括子装配体在内的所有零件数量,你需要添加递归函数来处理子装配体。5 X* q7 q# B1 z9 S2 \2 ~1 C9 g
在运行宏之前,请确保你的SolidWorks文档没有未保存的更改,以防宏运行过程中发生意外导致数据丢失。% ?3 }9 i6 z/ I/ Z) N
宏代码中的错误处理部分可以根据你的需求进行扩展和完善,以提高宏的健壮性和可靠性。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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