找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 10335|回复: 20

图号分离

  [复制链接]
发表于 2019-4-22 14:18:55 | 显示全部楼层 |阅读模式
软件小白一枚,因为公司需要统一零件模板,并且和我们搭建的PDM关联,需要将文件属性写入配置待定里面。之前用图号分离宏只能把属性写入自定义信息中,配置待定中只有空的标题,分离后的内容不能读取。6 _' k$ @6 Z/ Q, S
下面是我在网上找的说是可以将图号分离后属性写到配置待定的代码,实际调试有错误,见红色代码。9 h) S; L4 p3 q4 L" Z6 d1 u- s
---
% B, R+ J; _9 ^9 E0 _! l4 ^Dim a As Integer5 i! ?! w5 U" ^# H! O; o

3 d( {, b; H- `: H9 r8 d0 Y) `Dim b As String! Z, z" w% o6 J- O9 g2 C4 D" Z
5 Z& f3 s: D  `) P
Dim m As String
& I% U- Q# Z. q- l4 G  ^1 q1 _# Z# M+ s+ [% _
Dim e As String
% R5 ^$ g, A  c+ S4 B
* K! I  S, q" B6 n+ \Dim k As String3 v4 `% L+ l0 w- I# k
; U' Y+ {4 L( q3 G
Dim t As String0 F: v9 ~7 m0 y: s  O0 Y
4 r' v% M. j# `& Y) e2 v2 _
Dim c As String
" F1 U+ x" }, Y# K! j
  e7 s$ N. v7 j- H$ a; TDim j As Integer
5 i5 I: m8 M. w' f* E0 r7 U
3 V) r' Z. C8 `5 V, a3 VDim strmat As String
# Y, u; V. g- G7 g! P* T% |7 Z+ k- {# ], u/ Z! z" Q* u- J
Dim tempvalue As String
- [  O5 N2 }) h- K' _. [# V( w3 r1 {, L4 x; O
Dim Part As Object
3 l& [% @1 F. d+ ^* w; C- n" [1 j$ R( I
Dim swApp As SldWorks.SldWorks
8 N* Q! o0 G" h- G+ J- }: J2 U0 y& y/ B
Dim swModelDoc As SldWorks.ModelDoc2$ D0 y4 h2 i6 I$ @* m

5 e* T+ x3 E% {- e: K( W/ C& lDim swConfig As SldWorks.Configuration
0 X" o# m* F" M& K7 o7 a/ ~3 r# n$ G
Dim swModel As SldWorks.ModelDoc2
5 O: S. E0 M* G+ a6 N: e7 _+ x* r
Sub main()0 x/ w# w5 k7 M" S
9 Q/ Z3 k) H  W& t
Set swApp = Application.SldWorks
. \1 J* {+ h- p6 a$ K, s) ~4 u  m7 M. U1 L) R: Z+ h
Set swModelDoc = swApp.ActiveDoc
/ `& @( Y3 v3 f$ B: ^3 Z  a" L7 }  F% x2 a
Set swConfig = swModelDoc.ConfigurationManager.ActiveConfiguration
! \$ G; B, o/ m- ]  p, x% s9 V! m# [
Set swModel = swApp.ActiveDoc
2 N7 e$ A' O( l6 b: n8 A3 r2 G* ~) b& |6 _5 g1 @( p' E
Set CustPropMgr = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguratio.Name) '配置特定延伸# w7 o$ v0 }1 f. Y  T

4 Y# l( @& i, D6 F% C& j+ s'设定变量4 S0 A+ L7 _: P8 ^& i# g

0 M4 W% }6 k# [" Yc = swApp.ActiveDoc.GetTitle() '零件名  t. H8 E% j* I  J  \

; o: B  q* }. e: x1 Z, Vstrmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34)
6 s* {, I5 j8 [4 w7 G0 N. V7 L) q' X- P' F' B# x+ A( S& r8 o
a = InStr(c, " ") - 1 '重点:分隔标识符,这里是一个空格,也可换成其他符号2 t0 `0 O7 `7 `( g: t

& j) n: E- W% ^4 UIf a > 0 Then
) y, T1 x; [9 o5 a8 u3 G' j& ^  p2 C) ~) c
k = Left(c, a)
# F9 s( e' V* E& A* a
+ ]! H0 c$ b% y( s9 E: u) ~4 vt = Left(LTrim(e), 3)
1 R! T" s8 B3 P3 W4 A4 _- I/ |2 D: D8 q2 I  Q7 F+ i
If t = "GBT" Then! H6 A6 i* B2 c! a

! v# _3 t; D! |9 t9 Je = "GB/T" + Mid(k, 4)0 d0 T9 W; N- P
( W( D% P& U  C9 H
Else
9 C  H; P' a6 d0 V. \6 e! ?
8 a3 P2 |  X: B7 O: ^8 J  ^e = k8 }& u" M' V6 D& Y# B) I
  q9 X8 W0 n8 Q- @
End If
0 z4 ?4 _$ T8 g& G
- B$ b$ g8 f, Z" P7 eb = Mid(c, a + 2)
; V  n6 i6 t2 a" Z& u6 J( P, c
$ F7 f0 s7 g, U; g2 U6 N9 Pt = Right(c, 7); h) J1 A2 L8 m2 r

% x, U' e6 {; ]9 V5 `If t = ".SLDPRT" Or t = ".SLDASM" Or t = ".sldprt" Or t = ".sldasm" Then
: f$ J4 g; G3 b# Y/ x/ i8 O1 i$ ?" j0 L2 S
j = Len(b) - 7 '消除后缀(区分大小写,即含4种)# `+ q1 i; ~" A

9 o# G8 `3 G2 WElse
) s& [* \" A2 q
' E. c- X3 \" t, v" K$ l8 X: D% r0 Yj = Len(b)1 y& e  i) R4 w. [" x  Q3 ?1 ~$ m

# P6 \, v9 H" m9 u+ @5 rEnd If
- G3 g% B9 o& L/ t9 X# e2 w# W- g% M" f
m = Left(b, j)
# s5 F6 x  H$ [) p0 |
9 q' Q6 B1 S* R+ x2 ?5 `" y- JEnd If
" E/ g+ ?9 z9 q% \$ ~6 Y& p9 k" g
'删除栏' ^$ f- P. y& z. C
/ b" S8 Z1 J" ~& }# k- q
CustPropMgr.Delete ("图样代号"): s9 y/ K9 }7 S" ]" J( M' h
9 o! \: W5 I) b' p. K: L
CustPropMgr.Delete ("图样名称")# U, {* y7 w. ?" L! o
6 i" o% u( K9 g% |- Y' g
CustPropMgr.Delete ("材料")
: R2 G* U5 s9 I6 G; b, X! ~( g0 w2 Z! k9 A
'新增) W, e& P- p3 w, p2 o

; x9 q0 R8 [' ?4 E' {CustPropMgr.Add2 "图样代号", swCustomInfoText, e7 W9 T5 {1 H1 J9 {7 q' A

& y6 R* }# A: z* P' v5 zCustPropMgr.Add2 "图样名称", swCustomInfoText, m% C7 y7 f4 ?: C) A

2 k! `+ b: \6 k6 P- R" R. {- a. @CustPropMgr.Add2 "数量", swCustomInfoText, """ G" i5 _3 Y1 T% S' m# t
& |; _+ b" G9 B) ^/ j
CustPropMgr.Add2 "材料", swCustomInfoText, strmat
0 }* b' W5 C6 e5 u2 F; G& S; t* z/ E* l. m
CustPropMgr.Add2 "单重", swCustomInfoText, ""
. @) k: `0 ?: L  W, D
" S4 U& [* ~9 c2 n  a. g5 m0 zCustPropMgr.Add2 "总重", swCustomInfoText, ""
( V  p# ^# F& ~) h) v" h0 K& J3 h. B
% `4 @) L8 h6 o" l2 x4 tCustPropMgr.Add2 "备注", swCustomInfoText, ""
* h$ q7 {" O! R% ~  R9 A. J4 N
6 w3 X  h% k+ v8 }5 sEnd Sub7 ?' q( {3 b0 E  }/ }8 L
---
% Z1 h  W8 v. X  y想请教下大拿们,这个代码要怎么修改才能管用。之前的图号分离宏,可以让所有属性出现在自定义里。或者有没有办法加一段自动复制自定义里面属性到配置待定里去的代码?
# L2 e% v0 `$ s( T, ?- V1 B" A9 v; j. B1 Q3 _
在线等大神解惑! t6 s0 R- y  o$ u' c' P

3 p+ Q9 s. M7 z  I* P- T5 K2 B/ m" U2 `! x

本帖子中包含更多资源

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

×
回复

使用道具 举报

 楼主| 发表于 2019-4-22 14:32:04 | 显示全部楼层
可以用宏来实现自动复制吗,尝试录制宏,没有用
发表于 2019-4-22 16:58:29 | 显示全部楼层
叫我大哥,我可以分享现货给你。。。哈哈哈哈哈
 楼主| 发表于 2019-4-22 17:10:44 | 显示全部楼层
Wukui* 发表于 2019-4-22 16:58
) G: x! P% r, V1 N+ c叫我大哥,我可以分享现货给你。。。哈哈哈哈哈
$ w0 y8 J' G2 Y! U+ D, X
大哥好
9 L2 \; Q# Q8 @! G0 }, o9 Z$ k

点评

应该是大哥大嫂过年好  发表于 2019-4-22 19:04
发表于 2019-4-22 20:15:19 | 显示全部楼层

) }: C( @6 M& t# u6 r2 e; b- P6 B'定义sw
! ?- b) q& u5 ?# i- F* ^/ H4 y1 X$ e9 U+ j# H& Z3 F
. A+ v# ]0 v5 d8 k  V: ]) a
* ^/ j+ ?2 j" h8 X6 Z6 U0 f0 \- \- m
Dim a As Integer' Q7 J; z0 {, A' z8 W! d
3 t$ k" t- D* t- l& `$ c
Dim b As String
: |- ?$ d: W) T) m& Y
9 ?' E1 W- x% k7 J1 jDim m As String) T1 s0 F; `4 ~. C! ]( ^* X

+ _* z1 F# e) w3 s1 A, ]. l( NDim e As String
' O7 l4 c3 V* v; n5 a' ~; ~5 e; \0 I; M2 }8 B& `+ w5 H6 ]+ Z
Dim k As String+ [7 X: K9 r9 O  E2 [7 V
% Q5 F7 D2 Z0 Q% C) l* J  [
Dim t As String
' y! i5 |* {- e( L3 V) z) y8 k9 J* ^& P6 Q; Q
Dim c As String
0 W2 u3 T( B) i( A! Q
6 ?: `& ^7 c/ I: u& |: ZDim j As Integer/ j- _) U: F+ J9 J3 h
! K8 \8 o. h# M* |2 Y9 r. \5 k
Dim strmat As String' U5 \0 {2 g% r* Q4 Q- s
, {1 W" G$ T) l
Dim tempvalue As String0 U# n% x5 d+ i$ q( n# v

- ]2 n7 B# E% T" Q. P5 q; rDim Part As Object6 t5 z& M* R' N& X7 i" U$ e

# n3 L. y- d; G2 b* l( _) mDim swApp As SldWorks.SldWorks
- i+ H' E8 L3 u8 F9 o+ {
; e/ P7 X0 ~4 i- c/ l+ a" NDim swModelDoc As SldWorks.ModelDoc2
7 K8 f% M# E0 f4 y
! j/ c( @2 _6 H% X) YDim swConfig As SldWorks.Configuration
; I* w6 D& o8 g3 ?5 Q0 Y3 |  @/ y3 M6 s" B
Dim CustPropMgr As SldWorks.CustomPropertyManager
' p6 b4 a1 }7 H+ x
  _# C5 h: j/ i+ O5 P/ L- HDim swModel As SldWorks.ModelDoc2
% P% R7 p* ~& f3 A. R
! G7 v, p' z$ {7 L! |) ]2 a8 f9 O/ `* Z5 x: [/ y; S

& K. b( r, t* ]Sub main()! [1 h+ I, k; k4 A7 H

, p. s4 v0 q9 _) y2 jSet swApp = Application.SldWorks$ q- _- j" m7 m! q6 w" a! O$ q. t6 a

8 L& \) l/ U5 y: nSet swModelDoc = swApp.ActiveDoc+ ^, H1 n8 s! [+ G" q1 Q$ I

* P1 ?% r. l& ]5 E" z$ j2 [! USet swConfig = swModelDoc.ConfigurationManager.ActiveConfiguration
; t* K( r2 [. i/ Y& ^# {8 }% c( j  w6 U6 L2 V3 D5 O, y0 g
Set swModel = swApp.ActiveDoc
' b% w* U- D1 b7 V+ I* B, f7 R2 i3 o
Set CustPropMgr = swModel.Extension.CustomPropertyManager(swModel.ConfigurationManager.ActiveConfiguration.Name) '配置特定延伸+ s0 U* C$ b+ A% A! t' Z
* r  V6 N- V9 e# [- y" F3 k
8 e0 \$ x5 ]1 p' G5 @9 p; f! O
* }# c) h8 `2 g2 @6 D5 ^# M
'设定变量& W6 O1 P) e, t

2 u! U; \1 {( H$ ^1 X6 h+ Cc = swApp.ActiveDoc.GetTitle() '零件名
7 X5 |. U( {+ w) S, h/ P/ R$ w6 f% E  e5 A3 G
strmat = Chr(34) + Trim("SW-Material" + "@") + c + Chr(34)
. q2 [" M( l  i3 `$ r2 F$ B" Y% B/ T6 O) G0 i
a = InStr(c, " ") - 1 '重点:分隔标识符,这里是一个空格,也可换成其他符号- U& G: K2 n! ]& n7 M: x
! s7 w$ q' N( u: I( S6 ^
If a > 0 Then! D6 ~: S3 D- I8 q- W7 ^- t+ ^

5 ^/ u4 L/ k! E$ h, Qk = Left(c, a)
5 q& B  n( w# _+ @3 |3 D; h7 N( E3 H, M8 o
t = Left(LTrim(e), 3)
+ r7 I$ l0 d4 U8 K0 n& f2 I1 P5 W9 l
If t = "GBT" Then/ S( E2 g# t  i% r0 I3 }6 D
# W8 C: o$ {* d- A8 d& g" k" R% z) V0 F
e = "GB/T" + Mid(k, 4)
- J/ q+ {8 m& m6 U) ?, p8 L8 n% x8 I# U6 x1 G2 c3 e1 l
Else
) W! Y% S- V' C4 I& M
- E" L! b0 g! E' p' `e = k4 C+ l9 I0 v& ~, x' V

) s9 [) _3 ^* YEnd If1 y6 _% n0 ^# K  P
! E$ ?7 R: }7 T8 _- p
b = Mid(c, a + 2)
, z6 {+ q) `8 i8 C; O7 M  l# N: k5 ~1 y- H
t = Right(c, 7)# q- w6 y6 {! @" w1 w
4 t9 P8 z8 n! }
If t = ".SLDPRT" Or t = ".SLDASM" Or t = ".sldprt" Or t = ".sldasm" Then
: f. f: U& m$ @. q" ?( B/ Z: g5 @1 |8 k% ~* ~
j = Len(b) - 7 '消除后缀(区分大小写,即含4种)
* }1 n/ b2 \8 i$ h- b% ~
4 J- J( ^  ~' Q- a! m3 @Else
% g( {; [* ?- P' N# e8 _
, K7 ]$ ]3 D8 F  z: Xj = Len(b)
4 N% c) r1 t' r4 Q* ^& z% y! d9 g5 t0 P# p
End If5 J! V9 V: _) x3 f: n: T; l
. k* s8 Q7 G4 j$ Q' K. X  Y
m = Left(b, j)
  c4 X8 m) ?" h' L; ^2 ~' {6 ?1 Q' ]4 o& V
End If# W7 _  o$ e3 z: `0 X2 x+ ], H6 j6 p

" P6 ]1 I3 u3 Z4 ]! ^0 R'删除栏8 R. t# d" o% z. ^( J0 [! Q4 l

1 @+ l4 Y+ L$ f3 @CustPropMgr.Delete ("图样代号")
, o' w( i/ d( D9 I" o
* T; t# `5 V* ]CustPropMgr.Delete ("图样名称")
; }7 k, e; T0 |+ ]2 j8 t7 A  F2 ~9 I7 `4 A* _1 r
CustPropMgr.Delete ("材料")- A5 \* ?$ q  b8 A7 f4 n9 e" t
/ H( P3 [& H* T$ i+ I' w- S
" S7 @" ?1 [) R! r# M

. H, v5 G6 v  c3 n' h9 p% W'新增
& P1 s+ }" f1 N3 v# O1 ?* V0 y4 ?7 x5 z
CustPropMgr.Add2 "图样代号", swCustomInfoText, e2 c# }/ Q  @& V# X: N
' h3 F! _7 k" o3 y+ m4 e
CustPropMgr.Add2 "图样名称", swCustomInfoText, m
# |5 ]2 @8 K8 W( u$ A. E2 M( r. T0 Y
CustPropMgr.Add2 "数量", swCustomInfoText, ""
+ t+ B1 D& N0 F5 I* G% F
- |$ c7 v8 A3 Y. n) w& I4 kCustPropMgr.Add2 "材料", swCustomInfoText, strmat
+ G1 K- j1 h, r7 Y4 Q# q# {# d* t
; V' N' B, E' O/ WCustPropMgr.Add2 "单重", swCustomInfoText, ""/ _% O$ L0 M0 @# H1 S$ _: R4 i
4 O- h% S$ J3 x3 b
CustPropMgr.Add2 "总重", swCustomInfoText, ""
0 g1 I6 c; p8 h# _9 v
  M' U9 m6 P; a7 d6 E+ O; E8 \/ X8 GCustPropMgr.Add2 "备注", swCustomInfoText, ""
9 u' m0 m- N* F1 X5 r2 U5 L: U' C. ^4 t2 |  [

- B: i* U. Y0 F7 ~- V: E- |) y- t3 N8 k2 i2 F4 A: v& m
End Sub
- f" @- s( Y9 ~/ s; a$ n; y5 r, U) q6 Q
亲试管用,注意图号与名称中间间隔是“空格”
 楼主| 发表于 2019-4-23 09:24:17 | 显示全部楼层
金卯刀-劉 发表于 2019-4-22 20:15
# G( S3 D7 P4 f; Z'定义sw
. B7 }6 x+ k8 R* Y7 Y% [+ d/ l( L
感谢大佬,实测有效。但是还是有点小遗憾,不能实现想要的功能。
- T5 ]# s: V4 e) a9 d8 h8 [5 j----
$ H$ |$ G: T7 f  q6 y7 kCustPropMgr.Add2 "数量", swCustomInfoText, ""$ e1 g& d6 |% \8 e& }. Q
% _, ]# I! j9 U0 V6 B# u, B
8 n! N7 L, i/ p8 A3 J. A4 B1 w
CustPropMgr.Add2 "材料", swCustomInfoText, strmat8 w% w' e0 p7 s* T
: x1 G- o0 r7 a8 Z& e) @0 e
----$ ~* p# P% f, g, y# c6 @
如上面这两段代码,材料后面strmat,会直接连接零件的材质,而类似数量这样后面是双引号的,则不能链接属性。) K7 P0 |7 ~7 ]! P
属性编辑标签在自定义和配置待定中只能选择一个,这就很尴尬了。
& h9 K# }6 F4 h2 g- m' S( G* L
; V- z* k1 {2 z/ |: F# n不知道大佬有没有办法,可以将代码中这些信息直接链接相关属性?感谢大佬
& R+ g3 n  W! ?6 X
发表于 2019-4-23 15:40:38 | 显示全部楼层
呐,你要怎样 发表于 2019-4-23 09:24; E4 `3 ^3 O* p( Z& `8 d& p
感谢大佬,实测有效。但是还是有点小遗憾,不能实现想要的功能。7 |* p5 X/ ^: t+ ]( D1 V
----  B( B' j" _3 Y7 i  Y2 s% E" t, Y! i
CustPropMgr.Add2 "数量", swCus ...

) s2 E/ i  v/ y& b: G, w1 U1.有办法在配置特定里增加数量,但那是另外一个宏,是统计整个装配体里的零件自动写数量到你指定是属性名。并且是在配置特定里。3 n8 P2 k. \$ T* S$ y  X+ q$ U
2.材质是要自己选择的,一个宏没办法写不通用的东西。如果想通用只能是关联零件材质属性例如"SW-Material"
4 O% t: }4 `. W0 u# w3.不知道你用过属性模板,你需要的这些是可以通过属性模板实现的
. s4 v! H  ~# q& v9 a, E

本帖子中包含更多资源

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

×
 楼主| 发表于 2019-4-23 16:49:30 | 显示全部楼层
金卯刀-劉 发表于 2019-4-23 15:40# q8 \. v$ V1 G1 l. A1 U: d
1.有办法在配置特定里增加数量,但那是另外一个宏,是统计整个装配体里的零件自动写数量到你指定是属性名 ...
8 l) _' t" z! Y  f0 k
属性标签是有用的,但是不能同时写入自定义和配置待定,只能选一个。零件绘制完以后,材质、数量等信息就已经通过属性标签录入了,现在其实就是想让自定义里的信息同样地出现在配置待定里。! W3 N3 v5 y. p7 s' [- ?6 N3 |
因为看到大佬贴的代码里,最后Add的东西,如下:
# d2 i2 `' t, E* X, D/ `, f----5 o) ^. b8 L9 x9 ^. N8 T7 S
CustPropMgr.Add2 "图样代号", swCustomInfoText, e
9 X# m  ]9 J) Z: T3 b----0 W5 ]( f1 N6 Q% e6 [
这里的e和我之前的图号分离宏里面定义的是一样的,然后运行完前一个后,再运行你发的代码,它会同样的读取e的信息,然后再配置待定里面就会出现和自定义里面一样的图样代号。只是好像不知道可不可以把其他的信息都定义为某个字母,这样是不是可以相互关联上?
: K! {# t, m% c+ g% z9 u# ~& o

本帖子中包含更多资源

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

×
发表于 2021-7-30 10:28:29 | 显示全部楼层
看起来不错
发表于 2021-11-30 18:12:42 | 显示全部楼层
金卯刀-劉 发表于 2019-4-23 15:40
! I7 b3 A: K6 }8 R; {- ]$ F1.有办法在配置特定里增加数量,但那是另外一个宏,是统计整个装配体里的零件自动写数量到你指定是属性名 ...

; A/ z& g% [/ a: U% E" G你好,请问一下图号分离能实现三段分离吗?比如图号 图名 备注* A* r% Z1 G$ z1 h
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-9-16 11:16 , Processed in 0.090340 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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