久久久国产一区二区_国产精品av电影_日韩精品中文字幕一区二区三区_精品一区二区三区免费毛片爱

機械社區

標題: SW宏-零件數量自動寫入自定義屬性表 [打印本頁]

作者: 李邈    時間: 2024-8-14 13:30
標題: SW宏-零件數量自動寫入自定義屬性表
本帖最后由 李邈 于 2024-8-14 13:41 編輯
# u* f: O; U& ~3 m% A* l- y+ r( p( i0 a
加工那邊要求圖紙上要有數量,我之前都是給圖紙和清單的,圖紙上不寫數量,因為同一個零件我可能會用到不同的設備上,數量不一樣,工程圖忘記改的話就麻煩了?,F在這邊加工不習慣看清單。問了同事,之前確實出現過數量寫錯導致零件做多了和做少了的情況。; R; F$ U1 l9 g: u
和加工簡單交涉無果只得乖乖寫數量。
, o7 d: K! \0 E6 w; I- u6 w我想要是能在裝配體里自動把數量填到零件屬性表里就好了,這樣每次出圖前在裝配體里刷一下數量,工程圖里的數量鏈接到零件屬性就行。
; k8 }( u* ~  _8 M) V' v# ^; k網上一番搜索還真找到有人寫了這個功能。+ }+ s& e9 H7 E4 r& t! D& O/ x
分享給大家
" j' u0 ]6 E$ z* B5 T7 x1 C/ |6 I% o
$ A3 H1 e+ r6 a; t6 \7 V

7 A% ]6 V4 B; |  `補充內容 (2024-9-7 15:24):
+ e# a! e3 W8 r' n9 C  m9 K這個宏文件引用庫是2024的,不是相同版本需要改下引用庫。代碼直接放14樓了,不會改的直接復制代碼吧
作者: shengyz    時間: 2024-8-14 13:35
我都是建模時候,直接在屬性表寫需要多少
作者: 李邈    時間: 2024-8-14 13:35
Const PRP_NAME As String = "數量". B- a  m/ ]* E/ z' `9 I
'雙引號內是自定義屬性的名稱,你可以自己改成你想要的
& Z% t. H# a# J( V% j2 O/ X
' d3 u% _$ P3 I9 @* p6 yConst MERGE_CONFIGURATIONS As Boolean = True
5 j- _0 b- q5 V2 [8 ~( `0 y1 v0 V! \'True改為False的話,會把數量寫到配置屬性里而不是自定義屬性5 \9 e  o8 n/ X
% D" M$ `  p2 Z( Y
Const INCLUDE_BOM_EXCLUDED As Boolean = False& m$ o+ M  }+ |4 T
'如果你要把封套的零件也算進去,這里改為 True
作者: 李邈    時間: 2024-8-14 13:36
shengyz 發表于 2024-8-14 13:353 L; M$ t- n$ [% U3 ]; Z; p# y9 ~5 _
我都是建模時候,直接在屬性表寫需要多少
! ?. I; S' a) G9 }$ l
我做非標,設計完成之前不能確定零件數量
( E. J& D$ @9 L# R" @5 ~# U
作者: 看前方    時間: 2024-8-14 19:12
一直都是用凱元,自帶了這個功能
作者: sycfj    時間: 2024-9-7 09:24
這個在工程圖,裝配體,零件哪個環境中使用
9 r4 r4 ]) O  n# Y0 n% R$ L
作者: 李邈    時間: 2024-9-7 09:25
sycfj 發表于 2024-9-7 09:24  V6 P1 T4 G/ t9 a* k, Q7 ^* |
這個在工程圖,裝配體,零件哪個環境中使用
0 a# u4 a/ u/ B- j$ F( \) V2 @* p
裝配體中使用9 Q9 v4 T5 o; [+ w) K6 Y

作者: sycfj    時間: 2024-9-7 09:27
能詳細說明怎么使用嗎?我在裝配體中使用這個宏以后,工程圖中不會出現數量
' z* I+ s$ W/ b6 W6 H
作者: 李邈    時間: 2024-9-7 09:29
sycfj 發表于 2024-9-7 09:27
( D' ]. R: }: h能詳細說明怎么使用嗎?我在裝配體中使用這個宏以后,工程圖中不會出現數量
. N7 q4 k# k: T3 y8 L: p! ~: c/ m# {
你需要設置一下工程圖的模板,讓工程圖里數量那一欄鏈接到零件體自定義屬性里的數量
( ?7 p7 i2 X8 k7 h' D5 ^+ z
作者: sycfj    時間: 2024-9-7 09:36
李邈 發表于 2024-9-7 09:29
: D9 v3 ^+ ?  U3 L# i8 h你需要設置一下工程圖的模板,讓工程圖里數量那一欄鏈接到零件體自定義屬性里的數量

( U6 b; p, j( j  V' i也就是說零件模板中要自定義屬性 數量
, c$ ~! O3 D+ C: U( @# Y' k( X. I7 s# s
作者: 李邈    時間: 2024-9-7 09:38
本帖最后由 李邈 于 2024-9-7 09:41 編輯
0 `6 y& q! t6 c$ \
sycfj 發表于 2024-9-7 09:27
& z' n. o6 ~$ k4 N1 d  y; Q% T7 |能詳細說明怎么使用嗎?我在裝配體中使用這個宏以后,工程圖中不會出現數量
0 u& q# E; h3 x2 Y. W4 w
https://baijiahao.baidu.com/s?id=1796657905732909661&wfr=spider&for=pc
: i0 h7 }* k: _  D9 C  C: U1 Z按照這個方法設置,他鏈接的是倉庫 你連接數量那一欄就行了4 c* c, Y& d* l3 E
設置好之后,把工程圖文件另存為工程圖模板,刪掉上面的視圖,下次新建就會直接出現
( m  L+ G: `* Z' W6 W3 ]以前出的工程圖,用批量替換模板的工具,全部替換成新的工程圖模板就好啦
' V+ R! P2 z/ e9 X) W% V& D9 K
作者: 李邈    時間: 2024-9-7 09:40
sycfj 發表于 2024-9-7 09:36
4 N2 i, E- M" k% d! X- Y% ?也就是說零件模板中要自定義屬性 數量

% z6 e* @$ z  O這個宏會在每個零件體里添加了自定義屬性數量這一欄,并且把數量填好了
/ m7 i# K: i" x. I& n6 h0 D4 h你只要工程圖去連接就行了
! X) A5 \4 r  ?) v9 _- H
作者: sycfj    時間: 2024-9-7 14:50
李邈 發表于 2024-9-7 09:25
6 i& H6 f, m/ n: {1 P+ U; u. j# l$ a裝配體中使用

: {0 S2 X* Y9 D+ i3 r7 G# z還是不會用,加個微sycfj2
, w% _' s2 [2 p! v$ u; y; i
作者: 李邈    時間: 2024-9-7 15:22
Type BomPosition
" B# R/ s2 E; ~; n' H    model As SldWorks.ModelDoc2
. M( S3 x6 C! }0 Z$ k( }3 o, v: Z    Configuration As String
! A5 v4 F* B; m    Quantity As Double, o: c7 R0 v) g" [2 e
End Type% }, \' r/ E* d
; p, H  ]* D) ?5 g8 ?) @9 C
Const PRP_NAME As String = "數量"7 R; h9 S1 [6 u. _! y  H/ h8 q
Const MERGE_CONFIGURATIONS As Boolean = True
3 I+ k2 `3 b- |) Y# wConst INCLUDE_BOM_EXCLUDED As Boolean = False% B3 w7 j' R: k# Q
# r4 x! Z7 [2 r" j* ~
Dim swApp As SldWorks.SldWorks
+ `; N( j4 R7 F2 R% c2 V( wSub main()7 ~! N$ Y- ?( d( I& a
    Set swApp = Application.SldWorks; ]1 r, E  g" u% K: N4 Q
try_:
) `2 F* u, {/ k+ O9 q5 m% @" ?" ^    On Error GoTo catch_
9 x6 u  ^0 s3 M4 w) X+ x( o    Dim swAssy As SldWorks.AssemblyDoc* {* {. x! E5 q
    Set swAssy = swApp.ActiveDoc
- U( ]2 A! Q$ x    If swAssy Is Nothing Then
. h; y8 _" C% B, n$ K: @        Err.Raise vbError, "", "Assembly is not opened", ~5 h) ~* B' J  k: |* b
    End If2 r9 v' g7 J* X: ?* w
    swAssy.ResolveAllLightWeightComponents True
1 D9 Q$ E2 p. {    Dim swConf As SldWorks.Configuration9 j; Q# w8 K' X* L  p
    Set swConf = swAssy.ConfigurationManager.ActiveConfiguration% p# l! N0 @. o: I6 N
    Dim bom() As BomPosition
9 a5 Z1 Q; U# B* C4 D0 u- L' z/ f    ComposeFlatBom swConf.GetRootComponent3(True), bom
) ^$ X- y4 Q  K    If (Not bom) <> -1 Then" [: x0 M% D5 W# P2 O2 Z+ s1 g# Z" I
        WriteBomQuantities bom7 ~, H( _: I2 G3 v/ R) k: `& f5 o
    End If8 c- ?9 D1 |/ Y, V1 E
    GoTo finally_
: W( |+ z$ c. `catch_:$ P2 h  Y* D/ S* Q  o. \9 d' x
    MsgBox Err.Description, vbCritical, "Count Components"
2 q+ W8 F7 G) M( [) ]3 \2 Sfinally_:2 q9 l2 K+ m/ Z# V+ O! k# I* M+ n
End Sub2 }% u" K8 Y' L" [
0 m. l7 d% s& a1 Y
Sub ComposeFlatBom(swParentComp As SldWorks.Component2, bom() As BomPosition)
% ~5 K4 t- T% F. C% f7 O    Dim vComps As Variant2 h' V3 j3 m7 B+ |+ |% T: O9 S
    vComps = swParentComp.GetChildren
7 P$ L, c  {( L, Y% z' [! H. h8 v    If Not IsEmpty(vComps) Then0 m& o( k* }$ w' W
        Dim i As Integer' L9 `/ y- F2 Q) F$ i& ~- @5 g4 \! o
        For i = 0 To UBound(vComps)' Z; w# i3 w' J  o1 F* A' \( i/ i0 `
            Dim swComp As SldWorks.Component2& O6 y* h6 k2 ]7 S2 k% h, z* l
            Set swComp = vComps(i)
. I) j' o! y6 g& T2 r7 X            If swComp.GetSuppression() <> swComponentSuppressionState_e.swComponentSuppressed And (False = swComp.ExcludeFromBOM Or INCLUDE_BOM_EXCLUDED) Then
4 ]  g5 R4 S+ u+ D4 t# g' g' P                Dim swRefModel As SldWorks.ModelDoc2
. i; v4 q4 c5 U, L; I+ S! r- |* w                Set swRefModel = swComp.GetModelDoc2()
& W( v5 P/ k$ v                If swRefModel Is Nothing Then
% d3 i) I9 o2 A, X                    Err.Raise vbError, "", swComp.GetPathName() & " model is not loaded"
5 ?" X5 [' x6 s. v% x                End If8 }# b" u/ u- |2 b
                Dim swRefConf As SldWorks.Configuration. F) a) |& L2 Y8 K$ n" Y/ K: U
                Set swRefConf = swRefModel.GetConfigurationByName(swComp.ReferencedConfiguration)
, @/ J7 B$ m3 Q( L& q, U" y4 d7 }1 x                Dim bomChildType As Integer' P1 _  K/ w" U
                bomChildType = swRefConf.ChildComponentDisplayInBOM, Z  ]9 N* ^5 K2 P: Q3 E/ o- l
                If bomChildType <> swChildComponentInBOMOption_e.swChildComponent_Promote Then, W' T6 D: ~* _4 S' |
                    Dim bomPos As Integer. y+ i+ g& w2 b  R7 Z$ V8 u9 J
                    bomPos = FindBomPosition(bom, swComp)
- A0 u3 ~  ^" f                    If bomPos = -1 Then
( Z# ?# B! ^. @5 N+ w; o                        If (Not bom) = -1 Then
5 U4 _3 a$ Z; z8 v% G6 y2 j5 P$ H( d9 M                            ReDim bom(0), e" Z5 E1 \& ?1 L2 ^; W/ U  A
                        Else
5 Z9 ]  b" o, I" p/ `$ S+ `; e                            ReDim Preserve bom(UBound(bom) + 1)# F1 [0 ~% s; C( D3 L+ S/ S/ e9 h
                        End If
. W0 Y. R! d  X+ j: E8 q; i8 T                        bomPos = UBound(bom)+ \1 O$ m$ c) E# j6 g
                        Dim refConfName As String
9 F" k/ X+ |* s                        If MERGE_CONFIGURATIONS Then
) z; Y: ^/ e& C# w                            refConfName = ""
! f4 v5 o( X) z$ N; `; S                        Else
% _- z+ q5 V; ?  P) E8 d3 ]6 W                            refConfName = swComp.ReferencedConfiguration' G* j2 I6 C" T8 M( y
                        End If( w' e; N* E; ]2 Q1 T' K
                        Set bom(bomPos).model = swRefModel
" }$ F1 c6 ^2 E, |, u                        bom(bomPos).Configuration = refConfName8 ~" K7 l% b7 g3 \8 f
                        bom(bomPos).Quantity = GetQuantity(swComp)3 t7 g; l. V; i* @) u$ o" E
                    Else* P0 o9 k) P3 n
                        bom(bomPos).Quantity = bom(bomPos).Quantity + GetQuantity(swComp)
& X! C% L5 g5 [                    End If
9 r6 w0 r+ I7 Q- p) j                End If/ H& F% _2 V1 M. g: p% ]
                If bomChildType <> swChildComponentInBOMOption_e.swChildComponent_Hide Then
- P  @# M, K5 P0 Q8 ]0 [                    ComposeFlatBom swComp, bom& v' j6 J; Q5 g; K; M
                End If
5 r  M- O+ P: [) @$ s            End If$ k; _  ?; w5 u4 |
        Next
9 d5 y4 e# L" ?4 M0 p4 U+ M; f$ `    End If$ X7 B6 ~- c) m" m" K
End Sub( X  U: W; L; U3 ]
* z9 L2 Q  X) u
Function FindBomPosition(bom() As BomPosition, comp As SldWorks.Component2) As Integer
  j9 j6 p, Z3 O9 P    FindBomPosition = -1
+ T: Z3 [, E+ R" P. h; M    Dim i As Integer' h9 m! T* ?6 l- n
    If (Not bom) <> -1 Then
( h( A, y7 Q" H' ]1 g7 w        Dim refConfName As String
( |, M1 I- F- Y/ z2 F% W        If MERGE_CONFIGURATIONS Then- h0 a3 s- N- L' C) \- a5 R8 w' b
            refConfName = ""* M' v5 C7 Q4 G2 Z* ~
        Else
8 t+ Y! ?& [5 O! s            refConfName = comp.ReferencedConfiguration0 @& Z" O6 u( I2 }9 ]5 }
        End If
/ t3 p3 L% A+ ]! K        For i = 0 To UBound(bom)( _8 a; J; K( ^4 T( X" E4 r) Q: c
            If LCase(bom(i).model.GetPathName()) = LCase(comp.GetPathName()) And LCase(bom(i).Configuration) = LCase(refConfName) Then
& A+ a, k/ R$ }; N/ \1 u                FindBomPosition = i
3 ]. p- x9 G0 H7 d+ a& {! a                Exit Function% X# H" f  a+ x: l! \( H
            End If- q# u4 o7 b2 L) K2 ~
        Next% T( W1 g: f& a& ]6 X6 p
    End If
/ l, e: O2 ]+ g9 R( wEnd Function  r0 p' j% g2 M1 K% b+ e% r

1 P" f1 q- V2 u5 t; FFunction GetQuantity(comp As SldWorks.Component2) As Double1 p+ I0 n9 ?- z  W" s" {8 a
On Error GoTo err_! r! G4 {; e: _' {' u4 k$ \9 k5 u
    Dim refModel As SldWorks.ModelDoc2
* U8 n$ Y6 }; {3 v    Set refModel = comp.GetModelDoc21 Z- o! b, Z; s8 \; Q, x
    Dim qtyPrpName As String
( o- G2 D6 ?/ l! r) V6 Y    qtyPrpName = GetPropertyValue(refModel, comp.ReferencedConfiguration, "UNIT_OF_MEASURE")  |0 t) R9 [+ F8 c7 m! L/ ^
    If qtyPrpName <> "" Then. ]% y2 f' G1 ^# H2 E
        GetQuantity = CDbl(GetPropertyValue(refModel, comp.ReferencedConfiguration, qtyPrpName))
5 P' G) L0 M/ F4 a7 j# ~    Else3 v& M+ v6 G0 l0 H- L$ i  Q! Z
        GetQuantity = 1
, N9 k* }9 q# }0 g0 d    End If
* X0 t0 _0 Q1 V. I5 p    Exit Function
) `& s5 O" L6 Jerr_:$ K+ A" U5 S3 h0 c. L. W
    Debug.Print "Failed to extract quantity of " & comp.Name2 & ": " & Err.Description9 {' u9 a0 `& ?, z8 h1 k* g- D" Q
    GetQuantity = 1
: j3 V5 G! {9 m0 }: O' d1 ]End Function, C# k* Y1 Q. Y1 i  M7 ^7 W0 n
0 d$ t/ i  q: L' n0 z
Function GetPropertyValue(model As SldWorks.ModelDoc2, conf As String, prpName As String) As String) Y1 e: i9 v( }6 a5 d, s
    Dim confSpecPrpMgr As SldWorks.CustomPropertyManager& ?. Y' B/ V% a8 N) N  i: E$ U
    Dim genPrpMgr As SldWorks.CustomPropertyManager$ }, ]; _: ?( ?  q) P7 J7 k
    Set confSpecPrpMgr = model.Extension.CustomPropertyManager(conf)% ]3 ^# _6 |+ l3 Z( g7 t# a
    Set genPrpMgr = model.Extension.CustomPropertyManager("")
8 T6 o- E$ @% _+ g0 d3 \% `    Dim prpResVal As String3 y8 H/ N  A# t% L6 D( z# q
    confSpecPrpMgr.Get3 prpName, False, "", prpResVal# m% \9 l1 w+ |! y. {+ G2 x
    If prpResVal = "" Then+ ~' R( e  l8 `( [  j% _
        genPrpMgr.Get3 prpName, False, "", prpResVal9 P& ~1 R% g! G+ |& ~3 p
    End If
1 N* l7 f& c& l3 ?    GetPropertyValue = prpResVal% ^2 v  ^9 x( ]+ u, E; b# G
End Function$ N2 T/ M% W3 K' @- y& g0 e" d% e

+ d2 m4 X6 E) Q1 G0 P* M! RSub WriteBomQuantities(bom() As BomPosition)5 `$ E9 L3 S" d9 |$ l8 f# u% q
    Dim i As Integer
! d. d9 J9 }3 F0 ?. _    If (Not bom) <> -1 Then
! o& |; X) |+ d        For i = 0 To UBound(bom)# E: A2 n, u* B3 D* q
            Dim refConfName As String7 o* ~: W; _9 T
            Dim swRefModel As SldWorks.ModelDoc2
9 s& ?( Z! Q6 k7 s% o! r0 C            Set swRefModel = bom(i).model: ~# C/ C, q4 g& A0 o' }
            If MERGE_CONFIGURATIONS Then4 c2 U) v+ \$ ~' D5 c$ x
                refConfName = ""
1 c4 ~, U$ Z# [( o; C0 @            Else
7 e6 x9 ^; `: K; ?1 E# C* e0 \$ H                refConfName = bom(i).Configuration
9 D) E* I9 B) H  ?- E1 j) e                If swRefModel.GetBendState() <> swSMBendState_e.swSMBendStateNone Then; Y  _$ s; t; W
                    Dim swConf As SldWorks.Configuration# ]! l4 k( |; z, V7 M' U/ s
                    Set swConf = swRefModel.GetConfigurationByName(refConfName)
) ], n" S, J+ m" T                    Dim vChildConfs As Variant. F8 ~& L. H0 @3 \  k: O& j7 G! c
                    vChildConfs = swConf.GetChildren()! |3 c4 M- d( ]4 q( w
                    If Not IsEmpty(vChildConfs) Then  L, ?! T* \( j! `, V
                        Dim j As Integer  t- ~  p: M/ ?1 b; b
                        For j = 0 To UBound(vChildConfs)
* K2 ^7 F0 L" |/ a7 ~) @/ \                            Dim swChildConf As SldWorks.Configuration
2 O( \9 m% U3 s( T$ K6 z+ C- {                            Set swChildConf = vChildConfs(j)6 ]  S. B3 H! m2 H' c6 ^
                            If swChildConf.Type = swConfigurationType_e.swConfiguration_SheetMetal Then9 O4 B2 h6 f" e. X, s
                                SetQuantity swRefModel, swChildConf.Name, bom(i).Quantity. F- O2 U! e( X" P: a/ Y- v/ `" v
                            End If
) D6 P8 W% Q5 o5 `0 w                        Next, o7 m3 J! X4 U9 N6 ~0 [9 G  |
                    End If; T1 b3 P2 r# `8 |( c$ f
                End If6 N, H7 w3 v% i1 Q
            End If$ \+ K% ~2 ~6 }, N1 s; z
            SetQuantity swRefModel, refConfName, bom(i).Quantity1 W+ o$ R4 k8 G) @
        Next( m! F8 h1 v1 y5 t" E  ?
    End If$ C) Q6 \3 V4 _6 n- Y; T4 H3 i2 c
End Sub
2 A& X. z# J7 C( `  w: w. t2 K* j! I" B* R
Sub SetQuantity(model As SldWorks.ModelDoc2, confName As String, qty As Double)/ v2 m5 o3 D: C$ S
    Dim swCustPrpsMgr As SldWorks.CustomPropertyManager
/ X) e  _( e. `+ l, ^    Set swCustPrpsMgr = model.Extension.CustomPropertyManager(confName)" x6 i2 r$ W: ], d) ]
    swCustPrpsMgr.Add3 PRP_NAME, swCustomInfoType_e.swCustomInfoText, qty, swCustomPropertyAddOption_e.swCustomPropertyReplaceValue' {+ v# m, \$ Y) Z! o
    swCustPrpsMgr.Set2 PRP_NAME, qty
0 h& |  J* h( E* d( x: L+ Z1 g4 S% u, WEnd Sub3 t2 b, T3 t: H: S9 [% j2 a

作者: 我是小劉    時間: 2024-9-14 12:31
感謝樓主的分享 找了好久了
作者: 土豆土豆442    時間: 2024-10-7 16:38
樓主,能求個宏嗎?不會搞
0 }( r# ~: I9 V& a& _5 W
作者: faker558    時間: 2024-11-21 16:35
看前方 發表于 2024-8-14 19:12
! o: Y3 o9 `; H0 k一直都是用凱元,自帶了這個功能

9 k5 ~' }. A! n" i在開元沒有看到這個功能啊' i) e5 R, T/ Q5 r4 \6 U; N7 D

$ R# r# E* `% m' W
作者: faker558    時間: 2024-11-21 16:35
sycfj 發表于 2024-9-7 09:367 z% G7 o& }4 a3 c1 y- J
也就是說零件模板中要自定義屬性 數量
/ t& F# N( I6 M2 Q
刷個威望下附件6 H! R1 y) R/ S" ~9 y- L

作者: faker558    時間: 2024-11-21 16:36
李邈 發表于 2024-9-7 09:40* M% A4 m1 ~3 T' o% U
這個宏會在每個零件體里添加了自定義屬性數量這一欄,并且把數量填好了
* l$ Q7 A; L- t- B7 T% ^0 }0 W你只要工程圖去連接就行了
1 s$ w7 d' n* T& C* h4 |; h5 p6 Z: P8 Z! B5 D
刷個威望下附件3 a, H7 h+ F! d( A

作者: faker558    時間: 2024-11-21 16:53
sycfj 發表于 2024-9-7 09:24
1 L$ ~0 E2 F3 p這個在工程圖,裝配體,零件哪個環境中使用

  w6 v/ B) ]2 O/ F裝配體環境中使用
/ R* x  y9 q9 \0 B* Z/ V3 J' ~
作者: 看前方    時間: 2024-11-21 19:55
faker558 發表于 2024-11-21 16:35
( z- ^0 d7 v: ]) `0 T* a8 q% u) x在開元沒有看到這個功能啊
: J2 _5 y& O3 I5 F
有的呀,BOM工具里面
2 a, O+ l& W4 d  [: C) Z* F我這個后面自定義了一個數量的項目,這個項是寫到零件屬性里面的,所以加在后面跟插件的數量對比,如果不一樣,就改成和插件統計的一樣,這樣零件屬性里面就有數量了
! N+ t8 |6 M: W0 h! G7 X, p7 v0 ~
作者: faker558    時間: 2024-11-21 20:34
本帖最后由 faker558 于 2024-11-21 20:44 編輯
$ V; T7 [& c  J. N7 K
看前方 發表于 2024-11-21 19:550 w% X+ L, W, q
有的呀,BOM工具里面& e. O) C: }! [7 o4 q5 z4 a
我這個后面自定義了一個數量的項目,這個項是寫到零件屬性里面的,所以加在后面跟 ...

- V: L  R* F) ~8 Z% U# Y' e( v感謝樓主,找到了。但是是付費項目,我下載了你的宏文件壓縮包,運行了這個宏,怎么毫無反應,零件自定義屬性里也沒變化,沒有自動寫入數量,有什么注意事項嗎
作者: 李邈    時間: 2024-11-22 08:08
土豆土豆442 發表于 2024-10-7 16:38
3 ]& V" g3 V+ V5 L' K# V! z樓主,能求個宏嗎?不會搞
2 q5 V0 r! r" {
一樓就是# b8 \9 w/ J( u8 J2 d/ D) v6 d

作者: 李邈    時間: 2024-11-22 08:08
faker558 發表于 2024-11-21 16:36
, o% l% |7 i8 O刷個威望下附件
0 @6 ~2 w- k1 X1 Y6 @
就怕你威望不夠,代碼都給你了) Q& O* D+ O/ H: _- O* b

作者: 看前方    時間: 2024-11-22 08:48
faker558 發表于 2024-11-21 20:342 q# \  e9 A/ o
感謝樓主,找到了。但是是付費項目,我下載了你的宏文件壓縮包,運行了這個宏,怎么毫無反應,零件自定 ...
# @/ T- h6 b! F( y
那個宏不是我寫的,我沒有用宏$ T9 @  Q7 x' u
我截的那個圖里面,前面那個總數量就是插件統計的,但是那個數量寫不到零件屬性里面,所以我在后面加了一個數量的項,這個項是可以鏈接到零件屬性里面去的。然后按照插件統計的總數量手動填上去,零件數量上就有顯示了
* r0 j# l3 r, e/ P; r3 c6 m
作者: faker558    時間: 2024-11-22 11:30
李邈 發表于 2024-11-22 08:08
2 S! n' C5 {7 B+ _3 v% F+ m就怕你威望不夠,代碼都給你了
7 _; S& x( s" d8 s0 d5 x: w
樓主,我用了你那個宏,怎么屬性列表里的數量沒有變化
1 ^4 J5 O6 H0 `* h
作者: faker558    時間: 2024-11-22 11:31
李邈 發表于 2024-11-22 08:08
4 G) b' o5 B% {& A就怕你威望不夠,代碼都給你了

7 g2 K7 C; k: Q" J$ f8 Z, O壓縮包的我試了,復制代碼也試了
作者: hdgd501    時間: 2024-11-22 11:49
感謝樓主分享,很不錯!
9 M6 {/ L9 @' ^( @樓主辛苦了!
作者: faker558    時間: 2024-11-22 11:49
李邈 發表于 2024-11-22 08:089 |6 B2 f8 t; U3 z
就怕你威望不夠,代碼都給你了

# C' B( }3 z: u4 f十分感謝樓主,可以用了,我的SW版本是2020,把庫改成2020就可以用了,十分感謝
4 J' j$ t4 j# W
作者: faker558    時間: 2024-11-22 11:58
我用手機助手寫了一個宏程序,不知道為什么用不了,語法錯誤,樓主可以幫忙看看嗎
7 v& g2 ?. q4 i: i- I- R/ ~以下是一個用于SolidWorks(SW)的向裝配體里面寫入零件總數量的宏的示例。此宏使用VBA(Visual Basic for Applications)編寫,可以在SolidWorks的宏環境中運行。請按照以下步驟操作:
: V+ d) X+ |) o( z+ ^& o- P
! R$ [0 u" i  C, K$ {; r/ M+ R4 S1. 打開SolidWorks并啟用宏環境4:. S6 i( b. D! i$ e4 a2 n
確保你的SolidWorks已經安裝了VBA宏支持。
: p2 |% o1 D0 J$ j& X5 ?! x( y; Y: _  ]打開SolidWorks,并啟用宏錄制和運行功能(通常在“工具”或“選項”菜單中可以找到)。% Y# C, E" O2 v1 p
2. 編寫宏代碼:$ m7 _5 H# j# r, ^
&#160;% I5 P3 B. c0 K% L  ]
Dim swApp As SldWorks.SldWorks
: r2 o4 N- `; \. u/ v' j9 jDim swAssy As SldWorks.AssemblyDoc
7 E4 r, \, p# z$ [, @1 `3 ^Dim swComp As SldWorks.Component2
5 V1 `  p, F0 J. u: ADim vComps As Variant; M0 i5 q  I) H' k  k4 O4 P
Dim i As Long, totalQty As Long
! n% g; j! {  f; o& l! xDim customPropMgr As SldWorks.CustomPropertyManager, b' v! T! H) C' w
Dim customPropName As String
3 a4 `3 \$ @, H+ I% Y; J+ Y
) b" ^2 |: v1 T$ b' 初始化SolidWorks應用程序對象' ~8 p1 `  V  ]( j
Set swApp = Application.SldWorks' ?# z7 M3 f# J# w: e
5 z7 Y1 Q3 B: S) Z1 K# `+ W
' 獲取當前活動的裝配體文檔
5 b9 c  Q4 z" a  b. s8 KSet swAssy = swApp.ActiveDoc" z+ p1 }2 W, K. b- Q, K6 p

. {, G! E( B4 q/ D( x" G' 檢查是否為裝配體文檔
( ?6 ^" U+ Z1 [5 W( g$ ?If swAssy Is Nothing Or swAssy.GetType <> swDocASSEMBLY Then
" e3 L% F- J! f4 g, T* b    MsgBox "請打開一個裝配體文檔。", vbExclamation
( K$ _9 q0 a" [7 J% [/ G5 z    Exit Sub1 z- u- X, l) f! X
End If0 [6 U6 c; X9 Q. y3 ]

6 F( r6 h4 `4 W1 [% T' 初始化零件總數量0 j+ }* N1 r' \' H
totalQty = 0
" r! W; R+ f* f- F: d7 p* {
: s/ h; ]6 z1 Q) p' 自定義屬性名稱,用于存儲零件總數量
0 a" g5 l1 j9 O; HcustomPropName = "TotalQty"0 W7 t% R& b5 p. |8 ]
, `" m, B, P1 Y
' 遍歷裝配體中的所有組件
# |/ p, B3 [% hWith swAssy.ConfigurationManager.ActiveConfiguration.GetRootComponent3(True)
: ]: b! ~. Z! E8 v( _/ o    Set vComps = .GetChildren
# z% {6 j5 q) w( v8 d2 @0 d    If Not IsEmpty(vComps) Then
& `$ }2 ~& R% O3 z4 |1 P        For i = 0 To UBound(vComps)* N  {3 s) G( y$ a* r+ N
            Set swComp = vComps(i)
/ B* x: v9 `6 E9 x9 \" W9 F+ d# u: _. [4 @% d! U
            ' 檢查組件是否被抑制,如果沒有被抑制,則計入總數
1 f. X) g3 [% c            If swComp.GetSuppression() = swComponentSuppression_e.swComponentNotSuppressed Then- A1 x' J, z, {! I: |
                ' 如果組件是零件,則數量加1
: v# D* p  Z# c8 d                If swComp.GetType = swDocPART Then
3 A( C& X! u# z' h$ t/ _$ H                    totalQty = totalQty + 1- M" Y1 |9 V; F  U" t. K8 _) I: d4 V) e
                ElseIf swComp.GetType = swDocASSEMBLY Then9 D3 B$ n% P& _2 A: }
                    ' 如果組件是子裝配體,則遞歸計算子裝配體中的零件數量+ H5 }+ O8 r! N1 c: f' V0 U
                    ' 這里為了簡化示例,不遞歸計算子裝配體中的零件數量0 K, C. @" @* b
                    ' 你可以根據需要添加遞歸函數來處理子裝配體
  C9 P% ^+ \3 A; z/ Z                End If
; {2 }1 c9 W, ?1 S( R' B) e$ p& n            End If
/ T6 _, t& O" P, G* u5 A' S2 q        Next i5 A* o6 @9 ?! o. k* n4 o! f
    End If0 I( E, T9 E& W8 z' N8 R
End 0 i4 d! i' U, F, V
With6 c  A& ^$ y! p( B
' 創建或更新自定義屬性以存儲零件總數量
: d( w" @) L! ]1 g. MSet customPropMgr = swAssy.Extension.CustomPropertyManager("")
+ x  c+ j/ {1 n$ [* McustomPropMgr.Add2 customPropName, "系統", CStr(totalQty), swCustomPropertyInfo_e.swCustomPropText  \$ H. E  m8 U# R& I: A1 i
' 注意:如果屬性已存在,Add2 方法會更新其值,而不是創建新屬性。
' [9 x/ f) C. A, c' 如果你想要確保屬性總是被更新(即使值沒有變化),可以使用Set2方法代替Add2。
( v2 u  o7 [* ?! U
: N( V+ \! C- R7 a/ w7 d0 z3 E' 清理對象
( q1 W4 g) d5 b2 @0 j1 ^Set swComp = Nothing
0 `8 Z* ~: o7 z8 N2 [. QSet swAssy = Nothing
+ Y& h8 M" Y* n. n& m/ OSet swApp = Nothing
; e0 Z% ?6 k3 {( D8 e
# f5 |6 R& A! l: n! `' 提示用戶操作完成
/ ^/ J; u' o3 q9 q$ vMsgBox "零件總數量已寫入到自定義屬性 """ & customPropName & """ 中,總數為:" & totalQty, vbInformation* f5 G& @. R* p6 [* h( l. V" m
&#160;
8 s& T7 ~$ P) u9 W( a) E3. 運行宏4:- M. Q3 E6 |7 O) n" Q% K
在SolidWorks中,打開一個裝配體文檔。
+ _: V4 i- c: x1 P! T) T) h通過宏管理器(通常在“工具”菜單下)找到并運行你編寫的宏。9 Q; t8 ~' E, }/ m$ x
4. 驗證結果:
" e* t9 I3 V5 i/ T- P4 d( v) P1 D運行宏后,你應該會在裝配體的自定義屬性中找到一個名為“TotalQty”的屬性,其值應該等于裝配體中零件的總數量。* R- |, T* s  L2 j# B$ l+ T
**注意事項 **:7 |7 q5 d& f+ U% s1 j% f) H
此宏僅計算裝配體中的頂層零件數量,不包括子裝配體中的零件數量。如果你需要計算包括子裝配體在內的所有零件數量,你需要添加遞歸函數來處理子裝配體。
& _3 V/ M$ r; u) v  W! H在運行宏之前,請確保你的SolidWorks文檔沒有未保存的更改,以防宏運行過程中發生意外導致數據丟失。% |2 f8 X: O5 g
宏代碼中的錯誤處理部分可以根據你的需求進行擴展和完善,以提高宏的健壯性和可靠性。
作者: 李邈    時間: 2024-11-23 08:25
faker558 發表于 2024-11-22 11:58% y2 {: k9 k( v. w/ @
我用手機助手寫了一個宏程序,不知道為什么用不了,語法錯誤,樓主可以幫忙看看嗎
' K. J# R/ D" v  A9 U1 w" _6 [3 Z以下是一個用于SolidWor ...
( Q* b% l& I4 P/ m/ r( F
不是哥們,你這個怎么連main函數都沒有
% `  h, J/ r0 o' T
作者: zhousiyu325    時間: 2024-11-26 00:22
可以用。8 y- F+ S. r/ G& W9 E8 V- `

作者: faker558    時間: 2024-11-29 10:16
李邈 發表于 2024-11-23 08:254 [" y) O: B) U) z, z$ m* N3 i
不是哥們,你這個怎么連main函數都沒有
5 ]- n, s+ q7 Z0 L! Y
我不懂這些,那個程序是用AI助手寫的,看來AI還是不行9 v! W/ u, q" A7 F" v

作者: Kay159159    時間: 2025-2-26 09:59
faker558 發表于 2024-11-22 11:49
, {6 b" M* |; E% s" }十分感謝樓主,可以用了,我的SW版本是2020,把庫改成2020就可以用了,十分感謝
/ N& |3 @# r6 h, ?
怎么改3 G* O# A6 c% v! X# |" t1 |
1 C  Q) r, [( Y/ x

作者: diyu123    時間: 2025-3-24 08:43
試下看看
作者: diyu123    時間: 2025-3-24 08:43
試下看看有用沒
作者: 一米陽光7915    時間: 2025-3-25 20:23
挺好用的,多謝分享
作者: 新白娘子砍傳奇    時間: 2025-3-26 11:01
零件圖中寫數量的是會讓人笑話的,個人是非常鄙視這種不專業的行為
作者: moretalent    時間: 2025-4-9 10:47
整個裝配體的零件數量自動統計嗎?
作者: zhousiyu325    時間: 2025-4-13 13:26
刷個威望下附件8
5 s0 o% E3 I% C# w- k( z% B: T
作者: 李邈    時間: 2025-4-15 07:57
moretalent 發表于 2025-4-9 10:47
0 X4 S$ A- |+ M$ P% L% j4 r: W整個裝配體的零件數量自動統計嗎?

/ K- u) i2 t, z4 l! R是的
  u$ @2 J# Z1 j5 k
作者: faker558    時間: 2025-5-19 15:59
新白娘子砍傳奇 發表于 2025-3-26 11:013 m: J0 h! I& p; q/ Y2 v# {( [
零件圖中寫數量的是會讓人笑話的,個人是非常鄙視這種不專業的行為

' t# s' ~$ c/ ~" p! L; [2 s) D啊,竟然是不專業,只看BOM表嗎
: m1 t3 L& j3 u  r" X4 S
作者: 理想131289    時間: 2025-7-4 23:11
謝謝分享,好好學習
+ }- ~5 i1 U/ Z: N$ R# O: w  |




歡迎光臨 機械社區 (http://www.ytsybjq.com/) Powered by Discuz! X3.5