机械社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 6470|回复: 19

图号分离

[复制链接]
发表于 2019-4-22 14:18:55 | 显示全部楼层 |阅读模式
软件小白一枚,因为公司需要统一零件模板,并且和我们搭建的PDM关联,需要将文件属性写入配置待定里面。之前用图号分离宏只能把属性写入自定义信息中,配置待定中只有空的标题,分离后的内容不能读取。
2 J- V5 X% M6 V. K- v下面是我在网上找的说是可以将图号分离后属性写到配置待定的代码,实际调试有错误,见红色代码。
, I" R  n7 ]! r! a---
( j' z9 f6 ]: tDim a As Integer! p. @: @% {8 r- S* n9 [# B( b
# {0 [8 P2 Q- {
Dim b As String
" p. {% f7 h( m/ [& N
. M# _# k# Z# Z1 N# c7 Q8 `0 A7 t- c6 ~Dim m As String
. I! Y' e$ x0 ^
: c( ^  p: x: O4 ^; s6 q+ m/ YDim e As String
* j9 q# @; o/ S& d/ [' P
0 _/ C: H: Z9 i' P3 IDim k As String8 C. @& X% \- W
5 _$ v, x8 F; A$ D
Dim t As String
/ s5 U3 E( J/ j* d) Z& F" D
" Z9 E. Y( `8 w, ~2 @Dim c As String6 q/ V* M3 h8 }' }% r
! R6 d5 @4 c: r
Dim j As Integer
  d9 S2 ^# q0 g4 u. z) q
9 F& ]6 e# ~7 ~4 ]2 dDim strmat As String
; ]4 f5 I, W6 |7 O! y8 z6 ^; ?% f9 k% h* h4 S9 k) x% J/ G% I6 H3 w
Dim tempvalue As String- w9 S4 o6 \' X. i5 f

5 f" [/ j- s- |. V, x% ^& bDim Part As Object
" M% a$ F& e; ]: k- x5 f9 [( R  N% v8 B. }
Dim swApp As SldWorks.SldWorks
5 n; Q; A! \- Q, P3 n& D6 [1 J
' r7 P# r. v% n# uDim swModelDoc As SldWorks.ModelDoc2! M; b+ d( D9 ~  I  K) X; ?. t

( t" k1 z; j: M* k+ vDim swConfig As SldWorks.Configuration8 I0 G+ Q: j1 \0 o- Z
' a$ w+ y; I8 {
Dim swModel As SldWorks.ModelDoc2
0 `# x/ z1 G. I" }6 s$ e
/ I" ^4 O! ^9 cSub main()
- O: |, A$ u- i) P( E5 Y
. }0 Y4 D$ l0 x" _Set swApp = Application.SldWorks6 W' R1 }% T" G) }4 @8 U+ Q1 e
) ^+ g4 H# b# Y8 a+ P. N( x
Set swModelDoc = swApp.ActiveDoc0 g: g3 Q; _3 _0 z0 b

! x0 a. O- F( O$ S: _7 m: J% iSet swConfig = swModelDoc.ConfigurationManager.ActiveConfiguration& [2 P0 v* B! t0 j
7 j6 I" d* @: b- B- o, V" }
Set swModel = swApp.ActiveDoc
$ P% V8 C  Q* A1 [( {. M
; q! v" M5 x! u4 sSet CustPropMgr = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguratio.Name) '配置特定延伸
# c; J" C- R5 U7 U4 k
- ], E  v: K% Q* d! D'设定变量
: J& _; D1 N* m9 M. J/ j( J9 j, B5 l$ h5 |# H1 P+ q/ R9 M
c = swApp.ActiveDoc.GetTitle() '零件名4 n( J! \, f. M! @0 D

# y+ g5 U" H/ u9 E5 o& Nstrmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34)
- Z3 _5 |- B5 d, k# q/ S5 `) t) W/ D1 z7 x; ]; @2 Z
a = InStr(c, " ") - 1 '重点:分隔标识符,这里是一个空格,也可换成其他符号
2 W8 x: G; n* E- s2 p5 k# _1 W6 A7 [
If a > 0 Then3 o& i7 q2 k5 P5 J$ f
5 K2 M! ]1 R  @% L, A+ `5 i
k = Left(c, a)( [* A7 C* r: x8 d9 z" c# K

& N8 {3 a! V  y! @) ?8 E. r. ?t = Left(LTrim(e), 3)
4 z; S) s- \# Y! {3 P# }
# @) ]+ d8 n- q7 K& ^If t = "GBT" Then, V& t2 ~& J5 K! Y! k

) ]$ A; a7 G# x  S# ]+ }- _' Xe = "GB/T" + Mid(k, 4)0 q$ U. L3 s) d( |  b) A

( B2 x) t- M8 _6 BElse% j6 ~( Z% M/ L  |5 d5 @  w) Y

; T" e' M% a5 r0 w' Me = k
8 V+ \, ~4 _% O7 u/ W
! L- V/ r" d, T! aEnd If1 [1 D7 i9 n2 d! f4 p3 K- n0 Y& P3 d3 `
2 E  i! z2 e8 B5 H; a
b = Mid(c, a + 2)
* c5 d* D9 L6 F! g1 e* s7 O0 }8 G* l4 j, g/ Q8 C' L8 K
t = Right(c, 7)
, O/ ^& x4 z: G6 g% q9 ]7 {) K
/ v( a! }( H' {# AIf t = ".SLDPRT" Or t = ".SLDASM" Or t = ".sldprt" Or t = ".sldasm" Then5 P  @$ B- o4 K9 z0 D4 e9 f9 J( U1 h
  v0 T2 v- q7 z
j = Len(b) - 7 '消除后缀(区分大小写,即含4种)
0 b/ y4 a& y2 w2 h; L
8 u% i/ ^% g" o5 D9 O; `$ cElse
: ^/ g; z; E- D5 D7 L- w( U9 ?1 Z4 D9 i' ?
j = Len(b)+ V1 e1 E+ r# M

! C1 R$ n" D  N# Y+ Z& O! L" VEnd If" i: ?6 d! p7 B

+ Z/ x! c. p6 wm = Left(b, j)! Y& ?0 D0 h# A% l5 C/ C

$ H! E" H1 W4 f) HEnd If
  q( @4 _( \$ _8 \6 |+ M& ^7 D. c( T8 S" M7 {, N
'删除栏) }9 V$ k% z0 F( T

$ o& T7 J5 L' b  e9 RCustPropMgr.Delete ("图样代号")8 Z' @4 f, ?- y1 E

) H4 j: j8 @) U/ {* W) W5 A' qCustPropMgr.Delete ("图样名称")( r" K. ~  X7 r0 U3 o# K' b

4 j* M/ ]( x3 c; v6 L$ @CustPropMgr.Delete ("材料")
9 M2 C# g$ K$ x' A
2 e/ p# t9 \1 ^/ [/ K7 O# I( r'新增5 _5 M3 c) V$ Z
' k# q7 {* q0 P
CustPropMgr.Add2 "图样代号", swCustomInfoText, e- e" K) ^* r9 Z/ h, d

) v/ X* ^) ~) _$ yCustPropMgr.Add2 "图样名称", swCustomInfoText, m
* |. ~2 w2 z* _$ H* y9 \% Q
: a9 \2 I' `' F8 _CustPropMgr.Add2 "数量", swCustomInfoText, "". P; U* _: `! s& v4 q& c

9 s% l% D( S2 J  d" `4 ZCustPropMgr.Add2 "材料", swCustomInfoText, strmat
+ I% x$ F' `$ s5 c7 G2 g
, W6 \3 d& g! a: Q2 N  I  j1 PCustPropMgr.Add2 "单重", swCustomInfoText, ""
+ ?: g% {% q/ \, d/ C- m
( }9 f2 P( R: V% j- [CustPropMgr.Add2 "总重", swCustomInfoText, ""
5 P2 y& k  l) L: z6 ^
$ [5 b! X7 ^9 p2 q; FCustPropMgr.Add2 "备注", swCustomInfoText, ""
& g; m1 a5 Y, |4 z. z
  p. X; a" s  j4 w' |End Sub3 v$ }0 n3 n9 u3 S) X
---" C9 X, X& m" T: F9 b; L
想请教下大拿们,这个代码要怎么修改才能管用。之前的图号分离宏,可以让所有属性出现在自定义里。或者有没有办法加一段自动复制自定义里面属性到配置待定里去的代码?4 z2 D% f: f1 y6 Y- ~; z

  _) o8 y% h) D. p" h在线等大神解惑" G0 {0 j% B2 V2 ]% P! C; _
7 I% G. W$ h. K. I  n

: {8 {; R2 Z- V: {

本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2019-4-22 14:32:04 | 显示全部楼层
可以用宏来实现自动复制吗,尝试录制宏,没有用
回复 支持 1 反对 0

使用道具 举报

发表于 2019-4-22 16:58:29 | 显示全部楼层
叫我大哥,我可以分享现货给你。。。哈哈哈哈哈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-22 17:10:44 | 显示全部楼层
Wukui* 发表于 2019-4-22 16:58
3 t/ q$ ?/ L. q' [8 G叫我大哥,我可以分享现货给你。。。哈哈哈哈哈
/ r1 H/ `; H# j' z5 ^
大哥好
1 d: \' y0 Q4 _- s

点评

应该是大哥大嫂过年好  发表于 2019-4-22 19:04
回复 支持 反对

使用道具 举报

发表于 2019-4-22 20:15:19 | 显示全部楼层
$ ^0 h3 x! O* @0 ?* s; D4 z
'定义sw
8 @0 s. c. D: d
' A+ B0 y* w! v; n+ L) B  _1 G" _  F
" x8 M) F2 m2 n: B
! w* [& @4 }) d0 |  NDim a As Integer
- H5 t1 @1 A: b" F3 X1 }
5 j* l6 c: E0 _" j+ W8 }2 T, ~- YDim b As String5 M3 {/ P. Y% m9 l9 }

4 I1 q* W4 v2 s1 tDim m As String
! X" r& z' g) E( n9 O1 b& {. f6 A& }6 H, x& w% w
Dim e As String
/ R* \8 @1 X9 f- F! r( l' w0 B( A0 Z1 E; i
Dim k As String
" p8 b3 n2 c9 f6 b" I! Z/ x  e; B0 _, |4 @
Dim t As String
* v) A8 q% ^' [# ?' M4 B$ q1 _$ q) n; F3 v5 I9 M  N3 E% g
Dim c As String# b+ l% Q$ R  d( i2 L8 x6 U! G# }

# k$ O; Q& J9 ~, M- o. ~" J- ^, L) ?Dim j As Integer2 j# C+ }) p" K
2 K+ v% ?/ ]! G) G4 d$ b7 g
Dim strmat As String0 `3 F( A( |* [3 r0 t- [

" }6 M* i/ n# t5 w9 c/ MDim tempvalue As String
* ~. g" T) m' }- W  W, O
+ U; i/ V5 s9 `2 RDim Part As Object( y6 [+ L& _+ @7 r. ~9 G
4 B) `3 o7 H9 R
Dim swApp As SldWorks.SldWorks
( g4 n9 u4 d- @0 @& x, ~( |
7 W. ~$ r4 r3 f+ ~* n; y6 k( eDim swModelDoc As SldWorks.ModelDoc2* T! U3 T6 }! @( D; t

& f+ g0 M" I5 ^8 t7 [Dim swConfig As SldWorks.Configuration  ?' v! [& V6 ^7 l3 O
+ B1 ^* U, e# C
Dim CustPropMgr As SldWorks.CustomPropertyManager' `, g+ l  P4 \7 }/ z- v3 t% n1 ]
3 y( K: s, q" M/ V/ [$ O0 x  u3 z
Dim swModel As SldWorks.ModelDoc2. i! L; P* v0 q% P. W  d6 y  H  L

- L* k8 N1 k! B2 z  g
5 K& ~# \* m' x0 O* r5 }  U* `
3 N% {* }5 R. Z5 N" vSub main()
4 T, R& O9 ]9 \* r7 s7 U# P0 O/ p0 t
Set swApp = Application.SldWorks7 U: O# ?1 T* _) g; e( K5 x/ M
4 g5 n: @; w0 G
Set swModelDoc = swApp.ActiveDoc
8 B$ y4 }5 i  O7 o9 r8 d, Q1 N) `" d( I: @) d8 z
Set swConfig = swModelDoc.ConfigurationManager.ActiveConfiguration
7 v3 l6 o: s- p) X
- H* Z! j' j, P3 v) c0 I5 ]Set swModel = swApp.ActiveDoc4 Z+ _' e6 x8 Z4 h8 Z1 Q( q. g
9 z: _( L, j% H3 M3 H4 `
Set CustPropMgr = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguration.Name) '配置特定延伸
! J; b" S7 @% u$ j# S, P9 O9 k1 a$ y/ U% H' C5 X

. L6 S" D# \; W& r2 h
2 K- f0 m+ _% _! ?2 c5 v1 _9 W'设定变量% [. B2 f* \1 J6 [% o! c

  n5 F( R! Q$ [) d* J$ ]c = swApp.ActiveDoc.GetTitle() '零件名
5 a( o( |. ~( }0 L5 m# I) g3 l  e3 W( s+ t/ J) @2 D; u& t
strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34)
& D. }" e( c- d3 A+ {! p$ G1 T+ f0 `
8 [$ @5 A2 F, x1 h0 U& Ba = InStr(c, " ") - 1 '重点:分隔标识符,这里是一个空格,也可换成其他符号  ]& O, T8 m# Y( E' L8 j
$ q, l7 P4 `$ [( e2 P) e
If a > 0 Then( ^( f' ~+ t; q# h0 K" S# I. y
0 Y2 m. ]: {/ T+ O3 s5 o
k = Left(c, a)/ m+ v  U* |0 s( r4 |& |! D+ G
4 w/ x+ \9 k  b0 U, d2 \
t = Left(LTrim(e), 3)5 ]- Q! R! q( W( T. N+ C+ }

% W+ R  a* [  s* ^. X9 Z3 nIf t = "GBT" Then' X3 p# z& R- X; g9 O  [+ ~

+ H. o1 r/ K( i7 \4 g. [+ ge = "GB/T" + Mid(k, 4)
4 k5 L: H$ D3 j) V& R' d) s5 V' v  h, B+ {- H; l+ ?
Else  T) k# h: e3 U. G
! J  w( T' o1 v6 J6 I
e = k) ?% h: w  d, Q2 ]1 z
/ P+ o8 f! b# ], {$ D# O; @
End If
& X3 e0 Y: f! m" k0 m5 O  P3 s: x  V7 E: M8 c3 g4 z. x
b = Mid(c, a + 2)5 j+ p# }: G) W- m7 K: @

" Y$ d7 Y" p2 _* Rt = Right(c, 7): c% J3 ^( l0 V; H! H6 {
' s: e* T8 L+ X0 A7 I
If t = ".SLDPRT" Or t = ".SLDASM" Or t = ".sldprt" Or t = ".sldasm" Then
; A# ?! B2 U2 }; H. U8 }/ L2 G6 @' Z" T7 x; `5 e
j = Len(b) - 7 '消除后缀(区分大小写,即含4种)- P, n4 k0 Q! c

/ |6 ?- }% `( O" LElse  e) C0 \" j* {, T* K* T& U, h
( C6 {8 u5 D! j: J& r5 q+ _1 ^# e
j = Len(b)
: [+ B, z0 G. F: l
# g; V1 X& A" y1 u9 U  xEnd If- V5 i6 G( ]% @' o; S! K
0 y0 N9 h* b1 C7 X( L  E
m = Left(b, j)
* l# ]& q$ _2 Z0 s- _
$ r% D6 s: F" A. eEnd If
8 r* K6 B6 T0 |! R' I0 G0 U. P
/ q; F9 k# m* v/ b4 m3 f: F'删除栏
' V, q- }2 P( a( B9 ?: L) {2 H! o0 N6 D  G! A# g5 x) j
CustPropMgr.Delete ("图样代号")# r* m* j& V( R5 @

/ S9 d7 \! {& {7 B, c: }CustPropMgr.Delete ("图样名称"): j2 W- ]+ A7 F7 k! m5 k$ Q8 q
. T* y1 h9 A7 q' Q
CustPropMgr.Delete ("材料")# ~% L, p& B& V3 M

% _! q2 D( k' ]3 [* q$ i! `. _: S$ e" ~' O

! x" d5 R3 H% d8 R7 P'新增& ^3 T6 w; `; Q& |! F

7 q8 d; f3 S4 R0 uCustPropMgr.Add2 "图样代号", swCustomInfoText, e+ Y6 U3 m- O9 |8 o; j& P

- u8 g; ^+ I* @9 w: G0 R% OCustPropMgr.Add2 "图样名称", swCustomInfoText, m
4 B% M/ G4 J( i( u. J( ?1 p2 B' W6 w( E  w9 Z
CustPropMgr.Add2 "数量", swCustomInfoText, ""
% K' }( V/ A/ f# ~- [
$ l7 C% ~) _2 y8 f. O) ~CustPropMgr.Add2 "材料", swCustomInfoText, strmat
/ b3 h2 M% R2 u9 W/ K$ l% M/ f! X3 A, l; L  L  h
CustPropMgr.Add2 "单重", swCustomInfoText, ""
/ s8 h4 `. Y5 |% {& \5 q7 z0 k1 {( `
CustPropMgr.Add2 "总重", swCustomInfoText, ""  Z$ @; c$ K/ Y- r1 p( |; u' T
- X, ~5 F" K) P, z; |! O! Y
CustPropMgr.Add2 "备注", swCustomInfoText, ""
. @5 ^% X( z9 W! {: i8 O4 Z0 G) `$ N/ j# k
& {1 G3 K: V; Q5 n3 M6 d% ~

- v; f9 [( P" U. o  sEnd Sub; }" r" {+ j  t" e
$ u) R; Z% u) d) S+ n2 X
亲试管用,注意图号与名称中间间隔是“空格”
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 09:24:17 | 显示全部楼层
金卯刀-劉 发表于 2019-4-22 20:15! f, b/ Z9 E5 |, B2 |! J
'定义sw
3 B% ~3 k; ]# x% j* @
感谢大佬,实测有效。但是还是有点小遗憾,不能实现想要的功能。5 V  y' B- Q$ w6 G4 `9 @/ l. ?
----- S1 Y6 g7 u: w9 d# ]( B
CustPropMgr.Add2 "数量", swCustomInfoText, ""
# d( Z  G! Z# |3 }: }) b
$ Q9 Z6 u' \. e! b  y

+ B6 |1 I; D/ i7 _) S" mCustPropMgr.Add2 "材料", swCustomInfoText, strmat
7 E3 e9 q& d4 e: Q1 G5 X9 c; B2 t; ^  J6 u0 a
----8 E: e2 y- d3 t: J, J
如上面这两段代码,材料后面strmat,会直接连接零件的材质,而类似数量这样后面是双引号的,则不能链接属性。
9 K) B: F5 ]0 e% S* @属性编辑标签在自定义和配置待定中只能选择一个,这就很尴尬了。0 V$ @% [7 ~) M2 Z1 S

4 D2 K! B2 o. m; ?. J# c2 c# _不知道大佬有没有办法,可以将代码中这些信息直接链接相关属性?感谢大佬" S3 r, q$ x- Q
回复 支持 反对

使用道具 举报

发表于 2019-4-23 15:40:38 | 显示全部楼层
呐,你要怎样 发表于 2019-4-23 09:24
! ~8 ?- s5 N' o" @8 ~) ^感谢大佬,实测有效。但是还是有点小遗憾,不能实现想要的功能。/ c  I* l* _4 w0 X* d$ c
----
9 m  @7 r- P7 Z% Y$ o" ]3 ]CustPropMgr.Add2 "数量", swCus ...
. _7 D# i1 r, n1 A# `1 H: X
1.有办法在配置特定里增加数量,但那是另外一个宏,是统计整个装配体里的零件自动写数量到你指定是属性名。并且是在配置特定里。
% N- S' N6 t) S$ g) w- w2.材质是要自己选择的,一个宏没办法写不通用的东西。如果想通用只能是关联零件材质属性例如"SW-Material"
3 L0 n6 [1 |+ T% F2 x/ m% O3 l3.不知道你用过属性模板,你需要的这些是可以通过属性模板实现的; d! n# F1 z+ x/ p9 _! m8 F

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-23 16:49:30 | 显示全部楼层
金卯刀-劉 发表于 2019-4-23 15:40, j0 ?# P# }7 X: i$ x# B
1.有办法在配置特定里增加数量,但那是另外一个宏,是统计整个装配体里的零件自动写数量到你指定是属性名 ...
# y' e4 I3 h; R0 _  C" N  h# V
属性标签是有用的,但是不能同时写入自定义和配置待定,只能选一个。零件绘制完以后,材质、数量等信息就已经通过属性标签录入了,现在其实就是想让自定义里的信息同样地出现在配置待定里。! S9 l+ ]9 ~! _6 }6 J5 U# O
因为看到大佬贴的代码里,最后Add的东西,如下:
0 z/ I9 b$ l- e8 {$ H# j( a----
/ q- g, v# P$ R/ r% h9 H' w- x! X& x, pCustPropMgr.Add2 "图样代号", swCustomInfoText, e7 K/ P; k  B" Z& T. K( h+ T  A
----
0 C! |( m5 c/ y" a6 u& Q8 R这里的e和我之前的图号分离宏里面定义的是一样的,然后运行完前一个后,再运行你发的代码,它会同样的读取e的信息,然后再配置待定里面就会出现和自定义里面一样的图样代号。只是好像不知道可不可以把其他的信息都定义为某个字母,这样是不是可以相互关联上?# @, t$ U9 L5 {) q: W+ o, o  j

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2021-7-30 10:28:29 | 显示全部楼层
看起来不错
回复 支持 反对

使用道具 举报

发表于 2021-11-30 18:12:42 | 显示全部楼层
金卯刀-劉 发表于 2019-4-23 15:40* U" U4 \) a3 E+ k+ ?+ Y3 S
1.有办法在配置特定里增加数量,但那是另外一个宏,是统计整个装配体里的零件自动写数量到你指定是属性名 ...

5 ^+ B& E) K% ~6 {" L你好,请问一下图号分离能实现三段分离吗?比如图号 图名 备注8 Z2 C. u1 L( B5 N
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-3 10:16 , Processed in 0.058889 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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