机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 李邈

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

[复制链接]
发表于 2024-11-21 19:55:25 | 显示全部楼层
faker558 发表于 2024-11-21 16:35- |0 g  E9 d' j, v3 j( v2 I
在开元没有看到这个功能啊

7 X; d; E0 W9 \有的呀,BOM工具里面
# G5 ?5 G% y; v! X6 ?我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟插件的数量对比,如果不一样,就改成和插件统计的一样,这样零件属性里面就有数量了9 Z* _1 p0 }7 a

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2024-11-21 20:34:27 | 显示全部楼层
本帖最后由 faker558 于 2024-11-21 20:44 编辑
* E6 l. m0 B  U) J$ Q
看前方 发表于 2024-11-21 19:55
$ Y. t; A2 ~2 s6 [0 L/ V有的呀,BOM工具里面2 m/ b7 I# y( V( M" C1 i& Z$ F
我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟 ...
2 G# j; G  s8 u2 i* f
感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定义属性里也没变化,没有自动写入数量,有什么注意事项吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-22 08:08:00 | 显示全部楼层
土豆土豆442 发表于 2024-10-7 16:38
' I* Y: G, s4 _0 q& b楼主,能求个宏吗?不会搞
, a& D, b$ c5 a- ?" k  t
一楼就是
- A5 o% ?3 x) N: c, h$ P- y* }
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-22 08:08:56 | 显示全部楼层
faker558 发表于 2024-11-21 16:366 P" K  M/ W7 T+ a6 B
刷个威望下附件

& b/ x) C$ a4 V( a8 {/ d就怕你威望不够,代码都给你了
, m/ p8 Q7 ~* O4 g1 @6 ?
回复 支持 反对

使用道具 举报

发表于 2024-11-22 08:48:09 | 显示全部楼层
faker558 发表于 2024-11-21 20:34
1 K. u2 ?) J" m感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定 ...
5 l* l2 U7 w9 A/ ?# W& @) u3 a6 j" {
那个宏不是我写的,我没有用宏5 N. K; u2 \% e! x3 N% ~
我截的那个图里面,前面那个总数量就是插件统计的,但是那个数量写不到零件属性里面,所以我在后面加了一个数量的项,这个项是可以链接到零件属性里面去的。然后按照插件统计的总数量手动填上去,零件数量上就有显示了
6 ^0 g# O& N4 j/ v0 K: G; w2 @
回复 支持 反对

使用道具 举报

发表于 2024-11-22 11:30:19 | 显示全部楼层
李邈 发表于 2024-11-22 08:08" W% f' [+ j9 o3 y+ J
就怕你威望不够,代码都给你了
* T( a4 {* B  I% u; M  v
楼主,我用了你那个宏,怎么属性列表里的数量没有变化
) U2 v  b' i6 b) S
回复 支持 反对

使用道具 举报

发表于 2024-11-22 11:31:39 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
9 v2 t* z, O/ D4 v( C$ X; N+ L就怕你威望不够,代码都给你了

1 B) B9 G/ K% i3 i1 Z/ Z" l压缩包的我试了,复制代码也试了
回复 支持 反对

使用道具 举报

发表于 2024-11-22 11:49:02 | 显示全部楼层
感谢楼主分享,很不错!$ h3 G( Z8 c3 D0 }5 O# ?* s  [
楼主辛苦了!

点评

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

使用道具 举报

发表于 2024-11-22 11:49:20 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
- J; d9 c* ]* I* }! D) B$ E就怕你威望不够,代码都给你了

, E9 G' j1 n( M  r, t十分感谢楼主,可以用了,我的SW版本是2020,把库改成2020就可以用了,十分感谢$ ^" ^/ Q" Y# G2 i
回复 支持 1 反对 0

使用道具 举报

发表于 2024-11-22 11:58:45 | 显示全部楼层
我用手机助手写了一个宏程序,不知道为什么用不了,语法错误,楼主可以帮忙看看吗9 C9 r8 Q0 C5 B+ @5 ~  j$ X2 h
以下是一个用于SolidWorks(SW)的向装配体里面写入零件总数量的宏的示例。此宏使用VBA(Visual Basic for Applications)编写,可以在SolidWorks的宏环境中运行。请按照以下步骤操作:7 W9 ^8 e% e; q1 X$ l

. [0 @, Z: n) i- T1. 打开SolidWorks并启用宏环境4:5 q) j3 ?  h4 N' ^8 B, r9 i8 @8 }) v
确保你的SolidWorks已经安装了VBA宏支持。
$ K1 f4 V( {# x7 a  G4 K打开SolidWorks,并启用宏录制和运行功能(通常在“工具”或“选项”菜单中可以找到)。
5 _( A# h+ w" R, a' y4 N' N  F2. 编写宏代码:
, e& w: @2 z% h  C4 y0 X% y) ` 
6 q6 H# S$ S  F2 W( {: qDim swApp As SldWorks.SldWorks* j" _! v. J: z1 m% \
Dim swAssy As SldWorks.AssemblyDoc% h6 e' a. K2 t1 O5 u1 I
Dim swComp As SldWorks.Component2" z" i  U6 x" `2 I$ n
Dim vComps As Variant% r$ W  s2 |. ^
Dim i As Long, totalQty As Long) N: s7 M1 M& a" l
Dim customPropMgr As SldWorks.CustomPropertyManager, h% h9 _1 Z' W5 Z2 k+ @( v
Dim customPropName As String1 w" n4 o) k1 }

4 X, P7 M4 X! F+ V8 q) A! \' 初始化SolidWorks应用程序对象
, \! a, q5 f- {8 m8 c; tSet swApp = Application.SldWorks
+ R! o6 L2 j/ }" f1 m, _( b4 }/ q( o' Q# S" k0 t
' 获取当前活动的装配体文档  e" b$ s4 B7 @6 [: y6 n  w7 K
Set swAssy = swApp.ActiveDoc; L* p( ^& |- c8 e& E2 F
2 y; m  c. C; w: n) W+ Q
' 检查是否为装配体文档
- p4 H: h; W; g% _- H# G; S# kIf swAssy Is Nothing Or swAssy.GetType <> swDocASSEMBLY Then
5 ~; |- L7 H% Z/ |    MsgBox "请打开一个装配体文档。", vbExclamation/ j7 `( G4 X3 ^7 J- ^3 v  t, B
    Exit Sub3 ~  S' U. ?% H6 \0 x2 e
End If6 o1 m( C( m2 F0 Y9 i

4 G& @$ _' }9 `. l( C- _; X! z4 w' 初始化零件总数量5 _0 v& G& R5 Q/ I$ D
totalQty = 01 k# y' P4 ^& x% s

/ X0 K+ P( X8 h$ j; B' 自定义属性名称,用于存储零件总数量: v6 S( S$ O+ f" @) D5 m$ r
customPropName = "TotalQty"1 i2 R* Q0 E4 O* s' q

  o- W4 C1 t3 i  i6 _' 遍历装配体中的所有组件
. G, k5 _/ n9 W& b9 zWith swAssy.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
, ^, q) G: |& O5 c( q+ {    Set vComps = .GetChildren
0 a. O$ S0 u. r7 b! f1 P; n# Z    If Not IsEmpty(vComps) Then" H- s0 L, D. k0 u
        For i = 0 To UBound(vComps)
% [1 G" e; e$ W* i" L. p+ w  `& v            Set swComp = vComps(i)
! }9 C2 y  Z3 ^( ~& K9 Y; y! B/ {) e' k$ H- E( \, ]
            ' 检查组件是否被抑制,如果没有被抑制,则计入总数  X6 Z% ^4 g4 e2 l1 x* i
            If swComp.GetSuppression() = swComponentSuppression_e.swComponentNotSuppressed Then
- v% M8 M0 m  Z. J5 r$ B! v, h                ' 如果组件是零件,则数量加12 k* m2 i' _3 w* y
                If swComp.GetType = swDocPART Then
4 F& Z/ a: ~; z% _" _! W( F1 G: y                    totalQty = totalQty + 1! i' s3 z+ I& T: j  ~; m# l: J
                ElseIf swComp.GetType = swDocASSEMBLY Then
& _! _! Z3 T  k7 P0 [0 U1 G: g8 k) d                    ' 如果组件是子装配体,则递归计算子装配体中的零件数量$ O  `/ M* y1 E) O- A/ t$ p' A# J
                    ' 这里为了简化示例,不递归计算子装配体中的零件数量
: M* K9 ]3 _, V$ [1 S; P% L                    ' 你可以根据需要添加递归函数来处理子装配体8 ~9 ^" ~+ j, Z/ b0 a% x
                End If
& t# Y# V8 Q2 l& G4 z            End If
+ W. K( f# @" h  w6 }        Next i7 \8 i  F4 U7 X/ c3 T
    End If' f) @7 V; M2 z' Z$ H
End
, L" N4 M9 i5 |7 T& I7 v2 N) R4 M) fWith
5 R. E& c( u3 |  \; e) h' 创建或更新自定义属性以存储零件总数量
! t) u) _5 w, gSet customPropMgr = swAssy.Extension.CustomPropertyManager("")" M1 a" R; K" O' I$ ?8 d
customPropMgr.Add2 customPropName, "系统", CStr(totalQty), swCustomPropertyInfo_e.swCustomPropText9 c+ E6 U0 p  ]; H+ G* S: ?$ S% a( p
' 注意:如果属性已存在,Add2 方法会更新其值,而不是创建新属性。8 r& p( Z' D& h4 m
' 如果你想要确保属性总是被更新(即使值没有变化),可以使用Set2方法代替Add2。& m7 |) h$ `; i/ j* |1 |# g
: v6 v3 o; A: w1 x/ ^* ^
' 清理对象
2 Y; Q. ^# T6 Y3 {Set swComp = Nothing
* N9 B- I1 m6 `. W( u/ ?+ F5 r- pSet swAssy = Nothing
6 U5 w2 F; e$ M  z% I/ n- BSet swApp = Nothing+ k2 D$ C' E  O0 C
# r: v0 `1 L: X8 j; d* Q
' 提示用户操作完成& y. j: s& N9 Y& q
MsgBox "零件总数量已写入到自定义属性 """ & customPropName & """ 中,总数为:" & totalQty, vbInformation
( Q* p8 V3 o) }: t. J 3 L5 Y& ^' J( C
3. 运行宏4:
) G/ f% F$ g: ]3 R1 D在SolidWorks中,打开一个装配体文档。
2 X; O1 m" }7 U通过宏管理器(通常在“工具”菜单下)找到并运行你编写的宏。
, o/ o9 }1 Q: b9 S; D8 N4. 验证结果:
6 W" z4 Y/ _& H  ?" g4 |运行宏后,你应该会在装配体的自定义属性中找到一个名为“TotalQty”的属性,其值应该等于装配体中零件的总数量。
6 p3 o8 Y3 ]; m  P**注意事项 **:
$ `* ^. L5 w" t( I此宏仅计算装配体中的顶层零件数量,不包括子装配体中的零件数量。如果你需要计算包括子装配体在内的所有零件数量,你需要添加递归函数来处理子装配体。
# y1 L  y# M' k0 H; Z: r在运行宏之前,请确保你的SolidWorks文档没有未保存的更改,以防宏运行过程中发生意外导致数据丢失。8 N; j& e: r  M1 d8 @
宏代码中的错误处理部分可以根据你的需求进行扩展和完善,以提高宏的健壮性和可靠性。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-4 20:17 , Processed in 0.056912 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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