机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
楼主: 李邈

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

[复制链接]
发表于 2024-11-21 19:55:25 | 显示全部楼层
faker558 发表于 2024-11-21 16:35
# a" j! R" r& B0 t/ Q3 ]1 u# C; I" E在开元没有看到这个功能啊

2 `* I2 t; A" Q/ [9 q有的呀,BOM工具里面
" ], s8 B1 K1 E! I; h我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟插件的数量对比,如果不一样,就改成和插件统计的一样,这样零件属性里面就有数量了5 K% Q( a9 Z: D

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2024-11-21 20:34:27 | 显示全部楼层
本帖最后由 faker558 于 2024-11-21 20:44 编辑 0 s4 C( f, n* P% b2 G
看前方 发表于 2024-11-21 19:55" J. \  y8 q8 n1 l' I
有的呀,BOM工具里面! J* f8 L% G4 B$ u
我这个后面自定义了一个数量的项目,这个项是写到零件属性里面的,所以加在后面跟 ...
+ `5 m1 F, b! ?8 ?! l% k. p
感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定义属性里也没变化,没有自动写入数量,有什么注意事项吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-22 08:08:00 | 显示全部楼层
土豆土豆442 发表于 2024-10-7 16:38
7 y( U1 l' K3 U; P5 o5 v7 l楼主,能求个宏吗?不会搞
  Q, O( K( p: R9 @/ o
一楼就是% ~: c% ~: z4 n2 E  w8 \) Y
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-11-22 08:08:56 | 显示全部楼层
faker558 发表于 2024-11-21 16:364 U1 R6 @) }' G; E# z9 T
刷个威望下附件
+ u- m& Z8 Z. Y1 {" X4 R
就怕你威望不够,代码都给你了
# c3 {4 [( ^+ W: p! y
回复 支持 反对

使用道具 举报

发表于 2024-11-22 08:48:09 | 显示全部楼层
faker558 发表于 2024-11-21 20:34
( [9 B' Y! |, q/ O1 W& C5 ^4 K感谢楼主,找到了。但是是付费项目,我下载了你的宏文件压缩包,运行了这个宏,怎么毫无反应,零件自定 ...
) U9 Z4 r4 s( g# ?" k# x7 u- @9 g
那个宏不是我写的,我没有用宏/ B0 k5 x" ?- y# y0 @$ t
我截的那个图里面,前面那个总数量就是插件统计的,但是那个数量写不到零件属性里面,所以我在后面加了一个数量的项,这个项是可以链接到零件属性里面去的。然后按照插件统计的总数量手动填上去,零件数量上就有显示了7 P" _$ W; _# G4 A$ J: _0 u
回复 支持 反对

使用道具 举报

发表于 2024-11-22 11:30:19 | 显示全部楼层
李邈 发表于 2024-11-22 08:08& Z% Q" U% o5 M% M1 f
就怕你威望不够,代码都给你了

4 y2 s" X- x5 I% g楼主,我用了你那个宏,怎么属性列表里的数量没有变化5 ]6 R9 Z+ Y& ]4 i, p9 b
回复 支持 反对

使用道具 举报

发表于 2024-11-22 11:31:39 | 显示全部楼层
李邈 发表于 2024-11-22 08:089 C# A0 P9 F7 {; [
就怕你威望不够,代码都给你了
/ |2 S* z/ T$ B* c- A" X: |& j5 N3 J& f
压缩包的我试了,复制代码也试了
回复 支持 反对

使用道具 举报

发表于 2024-11-22 11:49:02 | 显示全部楼层
感谢楼主分享,很不错!
0 I5 v. l% x6 I& ]0 C+ Y楼主辛苦了!

点评

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

使用道具 举报

发表于 2024-11-22 11:49:20 | 显示全部楼层
李邈 发表于 2024-11-22 08:08
* z/ y" s1 I6 \7 r+ B9 R就怕你威望不够,代码都给你了

% T8 _3 s& t: p8 f3 S8 p0 Y十分感谢楼主,可以用了,我的SW版本是2020,把库改成2020就可以用了,十分感谢
/ b8 t  x, e" n9 j
回复 支持 1 反对 0

使用道具 举报

发表于 2024-11-22 11:58:45 | 显示全部楼层
我用手机助手写了一个宏程序,不知道为什么用不了,语法错误,楼主可以帮忙看看吗
7 q! d) N2 y/ K9 @! t以下是一个用于SolidWorks(SW)的向装配体里面写入零件总数量的宏的示例。此宏使用VBA(Visual Basic for Applications)编写,可以在SolidWorks的宏环境中运行。请按照以下步骤操作:
  s( d: E7 d- G3 \& U& I  ?' ^
; B# r# @/ _, E6 Z! t# \1. 打开SolidWorks并启用宏环境4:
% j+ M! b* a1 _确保你的SolidWorks已经安装了VBA宏支持。
' B& V3 Z3 D, z$ v2 h0 d# N打开SolidWorks,并启用宏录制和运行功能(通常在“工具”或“选项”菜单中可以找到)。! A" ]. U. c1 O5 j
2. 编写宏代码:4 \+ S/ t% X2 v/ D& D
 & ~6 F) E+ U0 O0 u+ e" @
Dim swApp As SldWorks.SldWorks
& j9 H0 O) ?- K: R7 w* I* t1 UDim swAssy As SldWorks.AssemblyDoc
- P) l4 A6 w* ~8 HDim swComp As SldWorks.Component20 e/ r0 I6 n& L$ d, K0 ?
Dim vComps As Variant$ t9 M& ~# Q) `5 z" ?
Dim i As Long, totalQty As Long
, u7 C$ i' k8 _: KDim customPropMgr As SldWorks.CustomPropertyManager
# _/ `5 L) u# I: Z+ rDim customPropName As String
' X( W. R) I+ A- t3 ^9 v3 R
, z' a5 `# s, k' C& s' 初始化SolidWorks应用程序对象
6 o! E$ a- Z1 e; ~' Y' eSet swApp = Application.SldWorks
" E8 b+ k+ h! {; O( Q* D# T
+ V. a, a3 N, Y# t1 M' 获取当前活动的装配体文档, f2 C* F% d+ X! c' ^
Set swAssy = swApp.ActiveDoc
8 |) g: G2 S. H/ m) q
% w6 y  ?1 l) Z% k  F' 检查是否为装配体文档: i! L/ x, [* t7 a- I* v9 S
If swAssy Is Nothing Or swAssy.GetType <> swDocASSEMBLY Then
( ~  n3 d+ Q" \" k- t3 r    MsgBox "请打开一个装配体文档。", vbExclamation
: T+ L+ _, k% l! h' i    Exit Sub3 p% z1 O: P3 v
End If% d! B9 \2 W, ]" N; Q
2 l" N. C: X, a5 s0 L
' 初始化零件总数量
  u1 V7 p$ O/ P0 l3 o: [: y6 B6 rtotalQty = 0
# I& o( e! t9 r* ]( J) `. p9 B7 D# O1 S8 p' \7 e
' 自定义属性名称,用于存储零件总数量6 Z0 i6 F$ f0 d( z( g
customPropName = "TotalQty"
" N% |) m; f# x6 I$ p5 U
0 z9 M$ O. d* q( J5 U. S/ S0 o. d: m' 遍历装配体中的所有组件! Z/ R1 A' f) ^9 I( o5 f
With swAssy.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)$ O) `7 O. w7 v: G
    Set vComps = .GetChildren) u, R% [  ~+ h9 D# e
    If Not IsEmpty(vComps) Then( n/ @, J* X  d* g0 W8 y( A  z- B
        For i = 0 To UBound(vComps)' b1 [5 \3 d6 z9 d
            Set swComp = vComps(i)- d* H( `/ r8 |# e0 `! w2 w1 |
8 E2 b( h" j' R* y2 P
            ' 检查组件是否被抑制,如果没有被抑制,则计入总数
, E# E; m/ f1 E. w' a            If swComp.GetSuppression() = swComponentSuppression_e.swComponentNotSuppressed Then
, M: T. T; s" x3 ^                ' 如果组件是零件,则数量加1
6 i" c* y. c+ l$ ^  a1 u) Q& ?' o1 B0 Y                If swComp.GetType = swDocPART Then% {& M$ s& Z8 g: ^! ]* n, `4 h5 \
                    totalQty = totalQty + 17 O9 @1 K+ D$ f0 o7 \( J
                ElseIf swComp.GetType = swDocASSEMBLY Then+ [8 h1 S0 T3 E) f
                    ' 如果组件是子装配体,则递归计算子装配体中的零件数量. Y+ J3 {3 a: K+ ?2 U3 s8 ~8 `. H7 A, O
                    ' 这里为了简化示例,不递归计算子装配体中的零件数量( T% s6 G& ]* s4 D. S) z
                    ' 你可以根据需要添加递归函数来处理子装配体5 @. J# p5 {9 W2 g
                End If% h$ [2 V. L& _1 g
            End If
! d( s+ f' y- A) G6 d1 Y9 W3 S# h        Next i
- |! w; S' ^5 H  W    End If
% y" Y7 W5 e' u4 Q& `End 3 v5 m" x2 L4 ?
With& l: N2 o0 e6 W9 n
' 创建或更新自定义属性以存储零件总数量
2 H; m6 y7 ^' g. F( d+ fSet customPropMgr = swAssy.Extension.CustomPropertyManager("")
# |( P, e  J/ n/ |5 S% U1 K4 vcustomPropMgr.Add2 customPropName, "系统", CStr(totalQty), swCustomPropertyInfo_e.swCustomPropText# n- ?* w# E  K
' 注意:如果属性已存在,Add2 方法会更新其值,而不是创建新属性。
. N; I6 `& F+ k* w" c/ T' 如果你想要确保属性总是被更新(即使值没有变化),可以使用Set2方法代替Add2。5 }$ z, g. |. Q3 l

& ^. E7 r& T1 I$ e1 w7 O$ _/ g- ^' 清理对象
) N' n& s  Q4 E8 z: \Set swComp = Nothing
* |. o3 ?' W/ l; T1 `5 mSet swAssy = Nothing
" ~% J$ W; z8 `' r( N0 H! ISet swApp = Nothing
3 K7 F- i/ {5 V9 I) D! g2 y( t3 u# |- _( ]! H" B( `1 y  a
' 提示用户操作完成( @8 ?: A5 A5 ^- V: J8 G; O) {
MsgBox "零件总数量已写入到自定义属性 """ & customPropName & """ 中,总数为:" & totalQty, vbInformation0 [- _; b  F' e# |7 b
 3 @! D! R/ h( B* Y6 s* ^
3. 运行宏4:
9 K( e$ ^! h6 l& {在SolidWorks中,打开一个装配体文档。7 d  h, u" k& j4 y1 I! B3 x# D, v
通过宏管理器(通常在“工具”菜单下)找到并运行你编写的宏。
4 x' n1 R0 s& V: G( \1 o; E4. 验证结果:0 C8 s: h0 w- Z2 n- c) W, p) G
运行宏后,你应该会在装配体的自定义属性中找到一个名为“TotalQty”的属性,其值应该等于装配体中零件的总数量。
4 q! R& K; B4 k6 ~  U0 Q7 y4 Z**注意事项 **:
3 _" I& e& @! P此宏仅计算装配体中的顶层零件数量,不包括子装配体中的零件数量。如果你需要计算包括子装配体在内的所有零件数量,你需要添加递归函数来处理子装配体。
- Q1 b- l0 v: |$ L: y5 ]$ A- F+ q在运行宏之前,请确保你的SolidWorks文档没有未保存的更改,以防宏运行过程中发生意外导致数据丢失。& a2 h# W6 Q' b: W" v* ]5 N& F
宏代码中的错误处理部分可以根据你的需求进行扩展和完善,以提高宏的健壮性和可靠性。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-23 05:35 , Processed in 0.064705 second(s), 15 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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