机械必威体育网址

标题: 图号分离 [打印本页]

作者: 呐,你要怎样    时间: 2019-4-22 14:18
标题: 图号分离
软件小白一枚,因为公司需要统一零件模板,并且和我们搭建的PDM关联,需要将文件属性写入配置待定里面。之前用图号分离宏只能把属性写入自定义信息中,配置待定中只有空的标题,分离后的内容不能读取。
. J6 C) k% d) h/ l下面是我在网上找的说是可以将图号分离后属性写到配置待定的代码,实际调试有错误,见红色代码。' w7 x% ^6 A( X' O2 v2 |& G  v
---: D; \6 Y/ S0 s3 C. ~& x
Dim a As Integer
+ A* J% J% m2 Z
; c# @& f  x9 _Dim b As String+ T6 t' k, E8 V4 e
$ x# G& M" N- I/ U( P" P6 Q$ |
Dim m As String; f( H4 Y) }( {( s; t" n; G4 a) `

! O! M' n- x! y7 \4 {3 wDim e As String
- V! g) o; T, Q0 w2 c3 e% ]+ X8 l
  S  L9 H) m/ m( d0 b6 cDim k As String
% v2 t) ]  `% z$ F6 [" |+ s. `3 j/ m. I3 Q
Dim t As String
2 H: W8 H- ]; n" i: q7 _6 p. W6 `- s) e3 @2 l, |1 l* T
Dim c As String! X4 w$ P+ z" ~. q
. ^' C& [+ n9 |) m& P, ]* x
Dim j As Integer
+ v: c5 ~& b- U9 }6 \8 m# e& [/ I" P6 W+ w1 M9 {3 g& J
Dim strmat As String
9 B0 e5 s8 w6 m7 W; U7 s* z3 ]& `) X# ]6 `- L
Dim tempvalue As String
6 F% O/ ^6 }  Z7 h
: p. ^) r! D5 p/ ^Dim Part As Object
4 k% v2 i2 Z: \/ @; `
/ t2 m, _4 k- D4 [2 b- SDim swApp As SldWorks.SldWorks: Z- f! y. g( v9 F$ h7 N8 s, `; ^

1 r, S4 @6 s0 J4 [9 iDim swModelDoc As SldWorks.ModelDoc2' J4 c! D* m6 ~$ R) I! t3 m4 N5 X% Z

& O* M! z9 u9 `; GDim swConfig As SldWorks.Configuration: G5 a" b/ N& w: l% W- o0 y, H' F
# a* Z+ H; K. w3 Q- C" J& d
Dim swModel As SldWorks.ModelDoc2
' T8 H& g8 Z+ d# B9 P8 _  p
. N- j5 D* q  ~- K4 lSub main()6 c: {2 g; _, t! O% P% W" I0 a
1 E; W% u, I& f/ i
Set swApp = Application.SldWorks& M) H5 W4 C* L0 o* w6 u+ q. z

, N' A8 A: k2 A# }1 VSet swModelDoc = swApp.ActiveDoc
& O8 ^* W  f+ l1 `6 X! F* s5 D
& o. A( V: V9 }, R* FSet swConfig = swModelDoc.ConfigurationManager.ActiveConfiguration
$ t+ s* b( Z6 y# ?' f( m4 s4 o9 j
! N4 e4 R1 }! q' XSet swModel = swApp.ActiveDoc: [" d( e8 M2 n- R$ K5 K! |" d+ y: |

+ f# p1 q2 {( R- T! r7 m, }+ P' }% SSet CustPropMgr = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguratio.Name) '配置特定延伸
! R: P0 o& R5 E) k5 z$ v& P9 e8 T' m4 x: l
'设定变量
4 `# q6 T! W( Z9 E; h* h( f
( K+ A' N' q5 H+ O' qc = swApp.ActiveDoc.GetTitle() '零件名
0 p0 Y9 g/ b+ u1 I6 V3 a
6 [; i0 N- a; E% c! }strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34)- w3 ]1 p0 A. o0 u; K2 O
9 T8 B& F- v& |
a = InStr(c, " ") - 1 '重点:分隔标识符,这里是一个空格,也可换成其他符号
/ M# [- B  q( h2 T. ^0 e: K7 x) \0 A
If a > 0 Then- \. }" ]( v' Z9 b. L) H0 K6 r
0 [1 G$ h' V5 O1 c
k = Left(c, a)
4 m' M+ g# g# z; I% g
& a2 X  M  w6 Z0 W5 Wt = Left(LTrim(e), 3)$ R; o6 K+ {; J5 y  J; C8 E# z
  H5 u4 U( X# ]; t, u
If t = "GBT" Then
( V2 {! E) C* G! O- R7 Z4 T3 V; i- ~  h, Y$ l: C2 {
e = "GB/T" + Mid(k, 4)' C3 \* ^$ G' d: g# u. w2 v
" e! L% \' u/ l2 W9 [
Else
+ c2 l7 H' Q! W, G  W! q8 w  w0 J; l5 \
e = k
6 {, Z0 y# R2 H, a/ e. R& l
; A% P% }" l+ N: NEnd If. D4 p' P( c! P1 Y* v8 t/ e

- P" L2 T. b2 l% _& e) ?  m# `b = Mid(c, a + 2)! o5 H$ y' [+ ?' N

3 V5 N. E, R3 p2 pt = Right(c, 7)
6 x; N; @3 S$ L
1 |3 b* _0 F! j0 dIf t = ".SLDPRT" Or t = ".SLDASM" Or t = ".sldprt" Or t = ".sldasm" Then
" v# R0 y8 S  A8 S9 d! {. ^0 U7 Q* \% p8 v/ x8 G
j = Len(b) - 7 '消除后缀(区分大小写,即含4种)
6 m) y, k$ q0 X( X. ~' J" V/ B( K' g4 r7 B' t8 p% p+ w! c
Else
  T' @! j1 a: X4 |; e% i6 f! o- V' p9 M% ?2 f$ t6 H' h' L' k
j = Len(b)
( R/ E/ c# X: O/ C
: a. J' K! C& U2 o! g4 b+ u; j& C5 OEnd If; ^/ c/ k1 B6 L6 u, q

& Z  V/ `. ]5 }  G$ @' wm = Left(b, j)2 c+ a. Z( `9 I; w* V

& g2 o+ G4 ^4 A5 |2 [! fEnd If
2 n: I' C( J0 k4 \  x) t. ]) r+ l0 w+ t% |6 V
'删除栏+ R% B+ ]) U1 u/ C. L7 z

. i/ @1 N, O5 w5 f2 d( e1 ?# tCustPropMgr.Delete ("图样代号")
3 b! z- w4 Y+ L/ D& X1 {8 \; d4 y1 r% E5 i3 J2 ?, ~
CustPropMgr.Delete ("图样名称")+ h6 A+ r! `; t4 |) E+ e
! }& a: y* q, R: j9 [
CustPropMgr.Delete ("材料")8 m- b. n8 R$ \8 g: p7 b
! X" H% i) X# i
'新增- o$ c# G4 M( A4 B2 s, l: K
/ |  |& d$ h9 B' Y
CustPropMgr.Add2 "图样代号", swCustomInfoText, e- C+ v" o( Y4 k  Q+ Z: P; p" [4 B

% W% B+ z; L" _& WCustPropMgr.Add2 "图样名称", swCustomInfoText, m* t8 L/ n. L8 b
5 S+ u' z) ^' N; G8 ]
CustPropMgr.Add2 "数量", swCustomInfoText, ""
# u+ W) m$ r! u4 N- U; S3 n" l. A5 R1 i( }$ }
CustPropMgr.Add2 "材料", swCustomInfoText, strmat3 b4 b) Z( n7 Z  p
0 v9 |$ r! E0 s. ?
CustPropMgr.Add2 "单重", swCustomInfoText, ""' M  Y8 s5 D. v7 _4 F% d

. r& e% S$ w, b4 S1 Q- zCustPropMgr.Add2 "总重", swCustomInfoText, ""
' x, X& b! \( W
- Z. S0 _& }' s  WCustPropMgr.Add2 "备注", swCustomInfoText, ""
: R1 K" Q# W' \8 ?; l9 Z! `4 d; \5 I) h' o: z
End Sub
! d$ C# W9 i; G0 c---1 d" T$ J: d, n9 s$ o
想请教下大拿们,这个代码要怎么修改才能管用。之前的图号分离宏,可以让所有属性出现在自定义里。或者有没有办法加一段自动复制自定义里面属性到配置待定里去的代码?& \7 M& |6 G8 u/ r

$ B6 F' E3 R4 ~8 ~4 X" M; W) Z在线等大神解惑. f: B7 P: y- m

0 A7 S. R% @1 @; U, S: z& d- B8 b: J1 x0 Z# v: l& ^

作者: 呐,你要怎样    时间: 2019-4-22 14:32
可以用宏来实现自动复制吗,尝试录制宏,没有用
作者: Wukui*    时间: 2019-4-22 16:58
叫我大哥,我可以分享现货给你。。。哈哈哈哈哈
作者: 呐,你要怎样    时间: 2019-4-22 17:10
Wukui* 发表于 2019-4-22 16:58
+ Y5 {: \/ ~6 A; G4 P4 O叫我大哥,我可以分享现货给你。。。哈哈哈哈哈
  x7 c9 _; \7 o' c- G; m
大哥好" f. B! Z6 P1 U& i+ @( h+ ]1 k* {

作者: 金卯刀-劉    时间: 2019-4-22 20:15
+ G% O+ `1 R7 [# e8 G
'定义sw
$ J9 \6 F0 u3 ]6 X) s; x/ h
9 o* v( m* k( v8 A) Y' n0 C* }7 h7 W# F7 n) r

/ k. P2 Z, j3 I6 }. X! {1 xDim a As Integer( z& P9 f/ L% Q. r

; ^5 F- R) y4 L8 l6 B& iDim b As String
* O2 y4 c: a. r& w2 i- G7 h  f* B6 x2 Q% k
Dim m As String( B5 W3 {' S8 p" X3 o+ J

8 Z1 d$ i: ^; A5 B- e$ u; ^( hDim e As String# z+ `+ r# l: Y( }6 Z* E/ c
% a8 F4 C# \' N+ i
Dim k As String
. G/ D/ B- ?8 @- q  F$ Z
% r3 j- t, r: `9 V9 D+ _9 X0 J7 ~Dim t As String" m4 Y4 T$ x5 t5 O; n0 _& I2 u

1 f* X- B; n( F2 A- t/ L  KDim c As String; o! z* _8 J: h' C! ]' N* q6 t

- T, z2 w3 Y: u: M) R% iDim j As Integer
3 V8 H; A& y) O* v! h+ a6 S4 q4 g. J, _' U1 J3 A: r, O
Dim strmat As String6 J6 D$ E( A. q0 J0 a$ ~9 b+ N0 g

& Z" |) p  l6 q0 H2 qDim tempvalue As String
8 W- g" M- i: C; ?: R
( x& g/ e1 E; x& w; D) B8 b. ~( s* KDim Part As Object
) H/ W3 i2 ?$ P$ s
) r  ~' ]" Q$ q$ \0 VDim swApp As SldWorks.SldWorks
: X) ?  ~6 e, D3 L
! B' D, Y, Z- o$ t2 j9 rDim swModelDoc As SldWorks.ModelDoc2  t/ P0 g% x( h. E# T2 D
9 b5 v3 w6 c3 g" U
Dim swConfig As SldWorks.Configuration
* C- X4 o5 Q4 r. a0 t% _1 f+ t' l3 q
Dim CustPropMgr As SldWorks.CustomPropertyManager
) ~) Q" o! c$ F- Z) I+ b9 b3 A3 R) y* ~
Dim swModel As SldWorks.ModelDoc2) C  i' f1 ?6 U  a; {0 b

5 k6 U- Y5 k8 t# r8 ]- y% \. E6 _* s& r- g" @+ p; z, b/ z% i
: K2 j2 w1 J) _$ u
Sub main()) S" B9 z7 u$ w
6 r, A+ P4 o8 A% Q+ ]  ?: b
Set swApp = Application.SldWorks5 H. K  m) ~3 p$ c' d: @* W3 j

' }4 w5 x3 _1 G' x7 z# K; `Set swModelDoc = swApp.ActiveDoc
8 v  V+ X! n; s
" ^2 |, V2 \  @( M' z/ xSet swConfig = swModelDoc.ConfigurationManager.ActiveConfiguration% a! M1 j6 O1 m' Z. k5 x  Y/ l  x& a
$ S  R- j" j* C  W- M
Set swModel = swApp.ActiveDoc
, S0 Q5 Y. ~5 L# |5 x* p
9 ^2 y0 V4 G8 O; USet CustPropMgr = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguration.Name) '配置特定延伸8 G5 d9 A* N0 B$ L& T

$ k" P. A) Z4 C6 @- V4 @/ z' E$ E/ Y1 k
1 _; Q* a6 f& Z4 q5 ~) [' W. K) p5 u1 v5 I/ B( {2 M  B5 H
'设定变量7 E6 b% ~; z8 _. ~
1 ^( Q9 e- e! l8 ~, @4 d& h
c = swApp.ActiveDoc.GetTitle() '零件名
5 a7 [, l/ h2 O$ i1 n( {
3 T  @2 c( \' \. V$ h; nstrmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34)( h7 c+ o  f" t
9 R9 v3 O$ z8 o1 h. w! n* j2 l# v
a = InStr(c, " ") - 1 '重点:分隔标识符,这里是一个空格,也可换成其他符号
  @; q: v+ J% V* J( Z0 r
" j) S8 O  Z1 b1 X/ ~If a > 0 Then
- ^8 M  e9 p3 ]; B; o' R' j; l/ E7 q' E" w3 |
k = Left(c, a)
$ r/ T( f- e" L9 ~1 K. K  W3 ^" ~; L( a6 j
t = Left(LTrim(e), 3)7 t* B3 K! L' K  ]0 {9 q& K; U

: j1 Y) ^8 h, g+ O; l2 V+ K3 iIf t = "GBT" Then6 }- T2 l7 C8 {# P' T, v) c6 N
! B. r8 G$ A& o) P" l' }
e = "GB/T" + Mid(k, 4)
- @8 p& _  r0 U' p5 N1 }; Y4 A1 b" t3 M* r  O
Else+ q6 b# ?$ c& u/ U0 D3 _6 V+ G
" [4 n. M! D9 L9 W- K  {; V0 }& j3 l
e = k8 N# o9 }- w5 D0 b  k

8 ?, P. C+ T/ ?% dEnd If
9 Y7 E  D; _! v4 H( \
1 m% ?5 T8 w' I1 ]" ]b = Mid(c, a + 2)
/ i/ x3 u# v/ ~* g' F3 Y
7 u0 Q; A  L. K; J6 i" v) Gt = Right(c, 7)1 v4 Q  O# b2 z- \# ]- a
1 d- p" P6 V5 Y5 o
If t = ".SLDPRT" Or t = ".SLDASM" Or t = ".sldprt" Or t = ".sldasm" Then1 X, l/ c) w' `3 E  O  j% F8 c
6 B3 J6 \1 C9 @0 b' g- g
j = Len(b) - 7 '消除后缀(区分大小写,即含4种)* t4 |/ f+ B, Y! F6 `
+ n, y- L5 H. R5 d  Z
Else
: f9 Q3 j9 K. a2 [
1 q. A* a5 O3 b5 K" V& |6 gj = Len(b)
* U! {0 g/ u; X. I! R( Q- V: `! r7 f
End If
) G; ^- n' A7 F5 M% S# S" z3 g0 i7 [. A: o9 M3 h1 c% ~6 @6 X" q
m = Left(b, j)0 J# U8 q. g9 m
+ o5 _4 U$ Y/ m! t
End If% C8 U+ f: o( F* J5 W1 c, J
; G! R2 q$ A8 R6 T# J( r
'删除栏, R8 o$ n" o0 h" D% l
2 R- K7 I* W: [" e5 j
CustPropMgr.Delete ("图样代号")0 Q# W# b- j7 d% X# z
: w2 T3 z% P. @
CustPropMgr.Delete ("图样名称")8 q: x" V# U+ N" E

4 x1 q% o0 x/ x8 C" o. TCustPropMgr.Delete ("材料")! ^$ x: m) H2 S2 U& C& L

) G, D) Z: M8 |
3 E5 X0 ]( M& H. p( ^% N2 i( a2 R0 W5 n( Z* G2 J3 _3 [
'新增
- f% ]7 N$ s% R* i/ F# g; g8 b5 a/ q6 |
CustPropMgr.Add2 "图样代号", swCustomInfoText, e
* O' \  s& H$ Y7 z" N* ~
& H& a. J. A: x* A% eCustPropMgr.Add2 "图样名称", swCustomInfoText, m) @& W- c% v( d. }: z! K
+ M  k  A* Q% X# l% w
CustPropMgr.Add2 "数量", swCustomInfoText, "", ^$ l- S& H9 N
+ w: |% }. }9 y# J7 P0 i1 I6 D; V2 K
CustPropMgr.Add2 "材料", swCustomInfoText, strmat) r, P, N4 j: g

2 T: y6 m7 W7 E2 U8 Y( r4 k! OCustPropMgr.Add2 "单重", swCustomInfoText, ""8 K8 U1 A4 u: P: F
( `( {9 f$ g* w  ]
CustPropMgr.Add2 "总重", swCustomInfoText, ""& l  }# o/ l* G% M+ i
3 h$ _4 n( I: F/ K5 P9 c. K
CustPropMgr.Add2 "备注", swCustomInfoText, ""
. t4 f1 N% T6 `+ c
$ {9 g8 P( F' R# g, G! h/ `5 Q4 R1 v$ h) P3 P5 x" o: y8 K
) |: I# _, ]. H4 V' [" f
End Sub; l/ y5 Y; p. m" W* Q

: X* K% Q( U, I; m亲试管用,注意图号与名称中间间隔是“空格”
作者: 呐,你要怎样    时间: 2019-4-23 09:24
金卯刀-劉 发表于 2019-4-22 20:15
" H/ a1 A, B5 b) q% z'定义sw

+ F5 H/ S" C4 F感谢大佬,实测有效。但是还是有点小遗憾,不能实现想要的功能。
, u1 f1 U8 x' P* X, d! Y8 w----7 B1 c  l) w/ E% p; j& }& `
CustPropMgr.Add2 "数量", swCustomInfoText, ""
) p& z; Y5 M1 W5 z- L$ i. @4 z
  E* ~: N- Q0 e% `4 w

! b  \7 x% p7 I$ tCustPropMgr.Add2 "材料", swCustomInfoText, strmat2 n6 L! A7 \: I! O: k
' Z' V: O% K" S+ y
----
- g# b6 V0 y* C5 D如上面这两段代码,材料后面strmat,会直接连接零件的材质,而类似数量这样后面是双引号的,则不能链接属性。) U7 f) T4 b8 x' t
属性编辑标签在自定义和配置待定中只能选择一个,这就很尴尬了。
6 P$ y, L2 v9 x! I4 \$ x! Q
& |" D! p; H# V  ]2 t不知道大佬有没有办法,可以将代码中这些信息直接链接相关属性?感谢大佬" X+ Q: K" E( n2 U, i4 r* [

作者: 金卯刀-劉    时间: 2019-4-23 15:40
呐,你要怎样 发表于 2019-4-23 09:240 T5 j: o% C. }
感谢大佬,实测有效。但是还是有点小遗憾,不能实现想要的功能。3 j8 ?0 E6 V: P% h2 _
----( w! G  |$ G  r* ~) }5 F/ z! s
CustPropMgr.Add2 "数量", swCus ...
# @! [3 r4 C: _" v1 @
1.有办法在配置特定里增加数量,但那是另外一个宏,是统计整个装配体里的零件自动写数量到你指定是属性名。并且是在配置特定里。
! b( S# r2 I+ ^1 e  |2.材质是要自己选择的,一个宏没办法写不通用的东西。如果想通用只能是关联零件材质属性例如"SW-Material"# K$ }* m& F% {7 F. \7 O
3.不知道你用过属性模板,你需要的这些是可以通过属性模板实现的; `. h. b1 D* }) M. Y+ g8 \% _

作者: 呐,你要怎样    时间: 2019-4-23 16:49
金卯刀-劉 发表于 2019-4-23 15:40
5 N  S6 E: M  b' [1.有办法在配置特定里增加数量,但那是另外一个宏,是统计整个装配体里的零件自动写数量到你指定是属性名 ...
; K7 d; L0 _  H4 R0 i) ~1 G5 |5 \
属性标签是有用的,但是不能同时写入自定义和配置待定,只能选一个。零件绘制完以后,材质、数量等信息就已经通过属性标签录入了,现在其实就是想让自定义里的信息同样地出现在配置待定里。0 N: c$ p, E% w7 X2 w
因为看到大佬贴的代码里,最后Add的东西,如下:: R9 }- _$ N: P) k" W& C# M
----2 B5 |, h3 x6 ~: Q9 X
CustPropMgr.Add2 "图样代号", swCustomInfoText, e
4 w  J7 H  Y5 }7 U' F* S----, T+ _+ N% M; t/ H
这里的e和我之前的图号分离宏里面定义的是一样的,然后运行完前一个后,再运行你发的代码,它会同样的读取e的信息,然后再配置待定里面就会出现和自定义里面一样的图样代号。只是好像不知道可不可以把其他的信息都定义为某个字母,这样是不是可以相互关联上?. e" }0 `5 W) D' p

作者: feelling    时间: 2021-7-30 10:28
看起来不错
作者: 太一OS    时间: 2021-11-30 18:12
金卯刀-劉 发表于 2019-4-23 15:402 ?- C' a3 I. P% m, X5 E
1.有办法在配置特定里增加数量,但那是另外一个宏,是统计整个装配体里的零件自动写数量到你指定是属性名 ...

8 A1 I% t1 N* h- `你好,请问一下图号分离能实现三段分离吗?比如图号 图名 备注; `' q- Z1 }( ]2 N

作者: 东升西落自动化    时间: 2021-12-2 11:20
谢谢!我正好也在找这方面资料。
作者: qwmib7669    时间: 2023-11-21 14:41
C:\Users\Administrator\Desktop
作者: laotoule8    时间: 2023-11-23 22:18
本帖最后由 laotoule8 于 2023-11-23 22:20 编辑
( P5 p/ u' L0 u. K: n3 _' a2 y% ?3 n( R- c) s% q! N# G* n1 E- t# L1 k* T
不错啊。
作者: qwmib7669    时间: 2023-12-6 09:00
不能自动生成 “类型” 的那列的值,“数值/文字表达”这列都事空白的,
作者: 请填写名称    时间: 2023-12-6 13:49
插个眼,有时间再来研究
作者: mengfeit    时间: 2023-12-7 11:55
唉,看着就头麻,还 是老老实实敲吧- O  B4 X. X) j6 x4 d6 u

作者: 大白123    时间: 2023-12-14 17:02
呐,你要怎样 发表于 2019-4-22 17:10! B* j# w0 b) v
大哥好

4 e1 h$ Q5 U. c! k" \9 A% H7 _我也有宏
' W9 l' i" f7 [4 a
作者: 独孤求剑A    时间: 2024-1-25 16:00
看着头晕- w& K4 h. k7 F! a. i4 R

作者: 刘生693    时间: 2024-1-25 16:37
高手如云
作者: 网中人000    时间: 2024-8-26 09:05
下来看看




欢迎光临 机械必威体育网址 (//www.szfco.com/) Powered by Discuz! X3.4