找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 李邈

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

[复制链接]
发表于 2024-11-21 19:55:25 | 显示全部楼层
faker558 发表于 2024-11-21 16:35% W, q- l0 m  X; R8 h
在开元没有看到这个功能啊

# j# J2 u! b! K% v9 ~; P9 ~有的呀,BOM工具里面
4 U5 F0 Z( w5 z, U+ h我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟插件的数量对比,如果不一样,就改成和插件统计的一样,这样零件属性里面就有数量了5 n% a$ ^7 V8 c. L) I9 y3 o0 k( K$ Q: V

本帖子中包含更多资源

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

×
发表于 2024-11-21 20:34:27 | 显示全部楼层
本帖最后由 faker558 于 2024-11-21 20:44 编辑 ' _* b* f% u+ D+ p; ]
看前方 发表于 2024-11-21 19:55
2 F# s* [4 q0 i- ~6 \; |: i有的呀,BOM工具里面0 e. M$ j* h# C2 A( y7 D7 U
我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟 ...
0 ?5 g: D: W5 N7 Y$ o
感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定义属性里也没变化,没有自动写入数量,有什么注意事项吗
 楼主| 发表于 2024-11-22 08:08:00 | 显示全部楼层
土豆土豆442 发表于 2024-10-7 16:38
; M4 V5 |7 Q4 T% o3 n楼主,能求个宏吗?不会搞

7 n1 s! r  C2 d" O一楼就是
3 n6 ?1 H4 i8 u* N1 L# b: t$ J
 楼主| 发表于 2024-11-22 08:08:56 | 显示全部楼层
faker558 发表于 2024-11-21 16:361 i' c& O5 O2 s4 c! f
刷个威望下附件

. d( l3 W, ]/ F* r! f就怕你威望不够,代码都给你了- ^9 X( t9 {8 g7 K& B+ ^
发表于 2024-11-22 08:48:09 | 显示全部楼层
faker558 发表于 2024-11-21 20:34
; K) W4 B" A1 j: A6 n( i, f( G感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定 ...
* l6 [1 }5 L3 M
那个宏不是我写的,我没有用宏2 c3 m4 p  f/ X
我截的那个图里面,前面那个总数量就是插件统计的,但是那个数量写不到零件属性里面,所以我在后面加了一个数量的项,这个项是可以链接到零件属性里面去的。然后按照插件统计的总数量手动填上去,零件数量上就有显示了; o9 E4 }$ h; {& E' T9 R1 L
发表于 2024-11-22 11:30:19 | 显示全部楼层
李邈 发表于 2024-11-22 08:085 }! l6 |6 Q+ `2 c# S% S. o4 q
就怕你威望不够,代码都给你了
8 `: |1 I$ \6 _2 K4 _4 S, j$ x
楼主,我用了你那个宏,怎么属性列表里的数量没有变化. Z6 g0 j5 n( N
发表于 2024-11-22 11:31:39 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
& c. L  [# R3 k' `就怕你威望不够,代码都给你了
4 d+ ]# _6 C1 T8 i) e
压缩包的我试了,复制代码也试了
发表于 2024-11-22 11:49:02 | 显示全部楼层
感谢楼主分享,很不错!/ {8 B. ]: b* W
楼主辛苦了!

点评

应该的xixi  发表于 2024-11-23 08:30
发表于 2024-11-22 11:49:20 | 显示全部楼层
李邈 发表于 2024-11-22 08:08* g6 _7 X- D# P7 Q8 V
就怕你威望不够,代码都给你了
' Q  p8 v. D$ v( e
十分感谢楼主,可以用了,我的SW版本是2020,把库改成2020就可以用了,十分感谢
& D1 \  q5 w6 L4 v2 g
发表于 2024-11-22 11:58:45 | 显示全部楼层
我用手机助手写了一个宏程序,不知道为什么用不了,语法错误,楼主可以帮忙看看吗
  [" w- ]( }& x! B2 Y以下是一个用于SolidWorks(SW)的向装配体里面写入零件总数量的宏的示例。此宏使用VBA(Visual Basic for Applications)编写,可以在SolidWorks的宏环境中运行。请按照以下步骤操作:) I* I( W! G& a/ E/ ]1 K

5 ^$ S( g9 z$ ]7 K% m1. 打开SolidWorks并启用宏环境4:
6 B7 I+ f/ p, U4 H9 Z0 |4 m确保你的SolidWorks已经安装了VBA宏支持。$ h5 n4 H# F4 ?( S0 ^. C1 _
打开SolidWorks,并启用宏录制和运行功能(通常在“工具”或“选项”菜单中可以找到)。
. \- M# }2 K3 J2 \3 Y1 J2. 编写宏代码:. _+ Z; U& K7 A$ |3 F2 S& e: L$ R
 
! ~' ~: D& S" E" ]3 h5 sDim swApp As SldWorks.SldWorks6 L1 F% Z7 u# I( v# o
Dim swAssy As SldWorks.AssemblyDoc
7 p4 @( B4 Y3 F+ zDim swComp As SldWorks.Component2* f. C8 C: R* I* g3 ?
Dim vComps As Variant
: @0 q: K( _! z. zDim i As Long, totalQty As Long
3 H9 c8 g3 ^0 s* |; YDim customPropMgr As SldWorks.CustomPropertyManager
1 @# }: @" V$ o  x0 TDim customPropName As String
- a4 n' c" \- a+ _) _, n  x: F4 \6 h5 K0 n$ n
' 初始化SolidWorks应用程序对象
6 J* m( H) m8 M) l) {Set swApp = Application.SldWorks
$ X8 a( w: u4 I6 S. X+ i/ K
, V- `" x. v! r9 C; M5 @( ?' 获取当前活动的装配体文档
0 _! G& ?0 G. j0 M2 Q7 ~1 p& [Set swAssy = swApp.ActiveDoc" u9 m( i! N) j7 d
2 X0 G' U" B8 P5 F0 x) [/ M( `( L
' 检查是否为装配体文档" B. v0 K- S. A! N7 B! h" a
If swAssy Is Nothing Or swAssy.GetType <> swDocASSEMBLY Then+ p( u# ~2 m" B( t$ B2 q
    MsgBox "请打开一个装配体文档。", vbExclamation- x: X" Z/ d9 W! H) V, B
    Exit Sub  H' T, x! \7 I0 a4 w& u! Z; E
End If1 D! I% Q7 J1 }( F( G8 P6 K

+ A4 L7 W+ }  \/ F0 c' 初始化零件总数量5 L" ^/ B& X+ Q" g0 y3 c$ h
totalQty = 06 S( s) d% P1 c2 d: u7 Y
/ f+ x- [( o' S' h1 R4 S4 c" z
' 自定义属性名称,用于存储零件总数量$ }0 g' Y! t% q9 Q2 D' n) H" P' j
customPropName = "TotalQty"
+ _% v1 s8 A+ A, n( A7 R$ m! c% G- o
' 遍历装配体中的所有组件3 K1 A$ q& @  s, w
With swAssy.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
: c% Q/ y& J$ B* g  Q7 L8 M    Set vComps = .GetChildren
/ g; k! }  K( S  ^" L    If Not IsEmpty(vComps) Then* j9 Q: q& G3 l
        For i = 0 To UBound(vComps)
5 P: S; `) `& ?# ~, {4 {) a            Set swComp = vComps(i)
  G3 q; H0 I" p* E
2 w3 M! O6 ?' m- H6 n            ' 检查组件是否被抑制,如果没有被抑制,则计入总数$ K. c3 D5 P! O7 U7 a" L0 z2 L% C
            If swComp.GetSuppression() = swComponentSuppression_e.swComponentNotSuppressed Then. c' K# q* Z( V, S
                ' 如果组件是零件,则数量加1
. z; E5 r5 j' R& V                If swComp.GetType = swDocPART Then
: F% |8 A# j1 f; A% h                    totalQty = totalQty + 1( R1 A0 ?0 _( m  s( p4 Q
                ElseIf swComp.GetType = swDocASSEMBLY Then( N3 M2 K7 A4 P
                    ' 如果组件是子装配体,则递归计算子装配体中的零件数量
3 _" @* l$ r; f' p2 e5 n                    ' 这里为了简化示例,不递归计算子装配体中的零件数量
1 j. a! v! e" G( F+ g5 I" }+ ~4 [                    ' 你可以根据需要添加递归函数来处理子装配体5 z4 l/ h) Z- n6 n, M2 J
                End If
2 J  \& c+ J0 ~8 C9 W  }            End If
% P7 j* L5 [: T! Y' x, o9 W        Next i
; j2 w. |. p' G2 [' M! ?3 r    End If2 g* B+ ?2 ?/ S) U  a* l: |5 k
End
3 ]- }# L$ ~+ g$ e* Z! JWith1 G- [7 ]) m- o: F: `
' 创建或更新自定义属性以存储零件总数量
; i  h/ h( c( ]" P/ |Set customPropMgr = swAssy.Extension.CustomPropertyManager("")" E% @$ N* h3 w( `) n
customPropMgr.Add2 customPropName, "系统", CStr(totalQty), swCustomPropertyInfo_e.swCustomPropText8 T: b# a1 I% H4 a, Z1 G3 {
' 注意:如果属性已存在,Add2 方法会更新其值,而不是创建新属性。
) V7 P, f- A9 p- p" W' 如果你想要确保属性总是被更新(即使值没有变化),可以使用Set2方法代替Add2。, E, W9 h& c# K, T$ q5 n3 o

% a) R$ v" t. x' q- u! `% V: R' 清理对象
4 A2 H, V' y; H% a$ K5 ^5 kSet swComp = Nothing
) F) r; G* F* m- w, q4 ]; uSet swAssy = Nothing& \; f( {& Y4 X! g; t) T
Set swApp = Nothing2 n; n( J1 Q) \  Q' Q

/ R6 p# M0 u5 C* t1 t  \# [' 提示用户操作完成
' @7 h8 F) W2 s  `MsgBox "零件总数量已写入到自定义属性 """ & customPropName & """ 中,总数为:" & totalQty, vbInformation6 u& p* x  J( q  T- a* r0 w
&#160;
% L: k6 R# R8 h* \3. 运行宏4:
) A8 }/ Q' z0 ?+ A1 R在SolidWorks中,打开一个装配体文档。2 ]& u- L) c$ R8 s  f3 @6 x& u9 q3 [
通过宏管理器(通常在“工具”菜单下)找到并运行你编写的宏。
. n0 l( H8 t$ n- V+ T8 N) I- C9 P4. 验证结果:: l% j7 P# _3 I7 L1 J
运行宏后,你应该会在装配体的自定义属性中找到一个名为“TotalQty”的属性,其值应该等于装配体中零件的总数量。  L6 W( F2 h5 T, B
**注意事项 **:
( J5 o# V; `& s) r3 i此宏仅计算装配体中的顶层零件数量,不包括子装配体中的零件数量。如果你需要计算包括子装配体在内的所有零件数量,你需要添加递归函数来处理子装配体。3 r$ m3 U/ X  |, E  r' U0 N# V
在运行宏之前,请确保你的SolidWorks文档没有未保存的更改,以防宏运行过程中发生意外导致数据丢失。
9 v: `) o  R8 ]+ S6 c& w' H宏代码中的错误处理部分可以根据你的需求进行扩展和完善,以提高宏的健壮性和可靠性。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-7-2 11:17 , Processed in 0.066678 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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