QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

楼主: qiminger
收起左侧

[求助] 宏提取文件名字符为何不成功

[复制链接]
发表于 2013-12-17 23:47:18 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2013-12-18 08:51 编辑 " j- z1 U3 X6 b+ P; L4 q! I+ [
398312203 发表于 2013-12-17 11:30 static/image/common/back.gif4 n  H1 q4 [8 p- s
自己给自己顶一个……

" U) K$ E, Q& J) U試試如下:win7 64位元
/ ?; W  Y  L- h1 f- x編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)2 C: x. X' w- H4 z+ e' ]' U
功能:應用宏抓出零件編碼的"代號"及"名稱",放置到屬性欄.  o2 b$ c9 W# Y9 k: d& O# C
' 2013/12/17 2012-sp4版 test  W4 U# f- d, {% a
'   data# {0 R) l+ K( U2 L) f/ C0 \; q
'宏 ---> 屬性! h! N" G9 @* Y' m8 D% K
Dim swApp As Object* H& a" v1 ^" Z4 @/ l- u3 @$ O$ R+ a
Sub main()
) m  v- o+ f7 W. i3 [9 lDim retval                  As Boolean
: C% H7 a) W, V, @3 X& q' qDim name_front         As String( e/ {* T& k, {/ z8 Z
Dim swModel              As SldWorks.ModelDoc21 k6 |) G! S3 V; r& ^' ?/ T  }
Set swApp = Application.SldWorks
2 r9 [5 j  T$ D! K5 \+ f4 aSet Part = swApp.ActiveDoc- [7 [$ {% E) R' v3 O) }
Set swModel = swApp.GetFirstDocument) P8 `% K: N  K# ^! u! O9 L
path_name = swModel.GetPathName
+ E, V5 T6 \7 F5 @  U/ i/ R0 ~name_ = swModel.GetTitle2 y7 E, S" k9 ?# D# x2 l
L1 = InStrRev(name_, "_", , 0)
- D" M* P! ]7 a; p* ?. B5 k5 DL2 = InStrRev(name_, ".", , 0)5 J! ?. b( J9 m4 Q. C- h4 B
name_front = Left(name_, L1 - 1)% W- w8 {& S2 F+ T5 [' H7 D
name_back = Mid(name_, L1 + 1, L2 - L1 - 1)
( ]3 T3 u0 ?/ d& vretval = swModel.DeleteCustomInfo("代號")
) n- _( n7 A( [! B- Jretval = swModel.AddCustomInfo3("", "代號", swCustomInfoText, name_front)
7 w! S  x- l8 g8 z% _retval = swModel.DeleteCustomInfo("名稱")4 _# ~$ O8 A6 m- I( X3 n, F# B
retval = swModel.AddCustomInfo3("", "名稱", swCustomInfoText, name_back)8 V$ j. Q) v7 p- [
End Sub
0 T& f  W3 r/ r( c: p2 H; D, A/ Y- x/ }7 F
test121217.rar (6.95 KB, 下载次数: 113)

评分

参与人数 1三维币 +3 收起 理由
阿帕奇 + 3

查看全部评分

发表于 2013-12-19 09:50:04 | 显示全部楼层 来自: 中国广东深圳
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif# e' L! h) n" t: E$ F/ n
試試如下:win7 64位元# E* q/ d2 L- R+ s; N1 e8 L
編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)1 A  F6 B! W3 J3 ~9 k
功能:應用宏抓 ...

3 X5 J. O+ D$ c) F) ]: R嗯,谢谢大神。已解决,赞一个
发表于 2013-12-19 16:32:47 | 显示全部楼层 来自: 中国广东东莞
本帖最后由 zqkzqk2008 于 2013-12-19 16:34 编辑 4 x! c3 t9 ~" z/ v8 S3 ^
# C6 Q9 d1 b, x% c0 ]
闷大,我在更改以前的零件属性时,插入方程式的步骤比较多,想一键完成,遇到如下问题,要怎么解决哦
0 Q1 y- E) N, U( hDim swEquationMgr As Object% z. s* b8 }2 V4 y. @" D+ `
Dim Part As Object7 l* |. v$ g3 j8 F$ R* y
Sub main()
  H/ ^; x' K. J- y$ l% W/ k1 TSet swApp =  Application.SldWorks
9 u8 p, i( f* p  K+ o3 V& YSet Part = swApp.ActiveDoc; m- N1 B3 k1 \2 y
Set swEquationMgr = Part.GetEquationMgr(). E; s% j- z. H, ~1 F' j$ d
swEquationMgr.Add -1, "执行宏" & Chr(34) & "=" & """嵌合宏"""   '这里出了问题,“嵌合宏”这位置只能是数字,字母汉字都无法插入,求解7 B1 p9 p; m! {+ |+ I
End Sub
发表于 2013-12-19 17:07:24 | 显示全部楼层 来自: 中国香港
zqkzqk2008 发表于 2013-12-19 16:32 static/image/common/back.gif
. a& f# k+ H9 f, A: g* t闷大,我在更改以前的零件属性时,插入方程式的步骤比较多,想一键完成,遇到如下问题,要怎么解决哦
2 I7 c- C1 m5 a* z, M4 QDim  ...
( e. ^  K" \: V+ Y! t
建議使用“回复”及“添加代码文字”。# K* g3 ]. d8 n/ C9 k

2 _& n3 |9 M  C試下改為:
  1. swEquationMgr.Add2 -1, """执行宏""" & "=" & """嵌合宏""", False
复制代码
发表于 2013-12-20 09:40:40 | 显示全部楼层 来自: 中国广东东莞
Francis 发表于 2013-12-19 17:07 static/image/common/back.gif
0 l0 O; Y2 y- }# h建議使用“回复”及“添加代码文字”。) N& ?8 @3 [, i. @1 ]# p  X/ r: }5 G

. b! H1 Y' P/ O. G) E2 J$ q試下改為:
8 }. H) V5 }* G1 L5 I" d1 O

+ p4 p+ B; u6 H3 z! K多谢闷大,成功了!用方程式关联后,不用担心改名后代号和名称失去关联了,一键重写完美实现
发表于 2014-1-9 11:48:02 | 显示全部楼层 来自: 中国山东青岛
闷大大师,我能在论坛了看到将solidworks的图号、名称分离并与零件属性关链的技法很是荣幸,感谢大师。我现在用的是2010版的,32位XP系统,非常想实现这一功能,希望能得到您的指导。我的qq:1494515986。
发表于 2014-1-12 23:33:55 | 显示全部楼层 来自: 中国北京
试了一下 2012可以  可是升级了一下2014 怎么不行了呢?
* a% R" ]1 F0 N9 F7 R- B
发表于 2014-2-25 21:06:19 | 显示全部楼层 来自: 中国广东深圳
本帖最后由 NC@jiang@nan 于 2014-2-25 21:13 编辑 : b& ~$ k8 n/ j) q+ S
gt.adan 发表于 2013-12-12 11:10 http://www.3dportal.cn/discuz/static/image/common/back.gif
+ `. t8 i% R: z. M2 l阿版,昨天測試了一下,發現您少了一步,就是悶大說的方程執行。* E0 K) v' @; k: f
以我自身為例,全域變數是"result",屬 ...

$ F9 q3 }$ z9 C/ G2 n# U7 X. U( Z+ Q- o2 O2 d
今天我试了下,我是在2010版时把这些宏什么的东西都添加到了模板文件里了,今天升级到了2013,用2010版的已经添加了宏和方程表达式的模板新建了文件,最终试验结果是这些代码还是能用的,只不过在“方程式”的列表里的表达式,总面会一直显示一个X号,就像26楼的第二张图片一样。
发表于 2014-3-26 22:33:21 | 显示全部楼层 来自: 中国北京
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif1 \& @* E# s: U7 t/ @, c
試試如下:win7 64位元
( a2 X" T- @( K4 e3 V: E" P) F  g編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)9 }8 A' b8 X7 m% R, o2 G
功能:應用宏抓 ...

; j7 \* e; X& `# h4 J, ^# }( x在零件中可实现提取,但是在装配体中不行,是否语法上有不同?
发表于 2014-3-27 21:50:52 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-27 22:04 编辑
0 i1 ]# o. e& U0 j9 e. A. _' y
blindman 发表于 2014-3-26 22:33 static/image/common/back.gif, A; [5 w( M  S2 ^! ?9 M
在零件中可实现提取,但是在装配体中不行,是否语法上有不同?
! w0 j: S* d: E1 {
麻煩多了 ,最主要是要抓取組件上全部的零件名稱.
8 v% }5 X/ i: m, `! Z( M8 \另執行組件有組件的通關密語.
: f; R: c$ T# p: Q參考 http://www.3dportal.cn/discuz/forum.php?mod=viewthread&tid=1434418% V. M* B6 G  A1 a9 ~
有悶大及吉大精彩文章( o3 E' Y, [1 r/ }& J3 C3 p* D

7 t/ n# c# Y, L& O5 Y7 f/ X Clipboard2701.jpg   {' ~3 q! X$ ~" A
' ******************************************************************************
" }3 D1 y" P( \'  macro recorded on 03/27/14 by lsc
" y2 c! b3 A% t4 P5 M( t! M'% k. v* [7 o% \
'  組合件之零件自訂屬性 [ 編號_名稱 ],編號名稱是以" _ "符號分隔.1 L& f7 {8 U, t3 p  H
'
4 s/ u& j5 M: V6 Y- d- J" l3 M9 _' ******************************************************************************
4 D6 ^5 ]# k5 {7 a0 zDim TopDocPathOnly As String5 X; d0 `4 O0 s' i0 R, l; G- _) Z
Dim swModel As SldWorks.ModelDoc2& U. ?! C& j+ p0 t: W
Dim swApp As SldWorks.SldWorks
/ B" R) r7 p) b& E9 I# B5 iSub main()! {. V' t  @0 f# }, V- C8 t  m
Set swApp = Application.SldWorks
+ [4 S8 g% Z8 G8 E  C" N" w$ N; \Set TopDoc = swApp.ActiveDoc '總裝對象
! ^3 c& L/ U6 M3 I
2 ?2 u! D; j+ @# F8 jIf TopDoc.GetType <> 2 Then Exit Sub '不是裝配=退出' i% N& J$ X) d7 q' D
TopDocPathSplit = Split(TopDoc.GetPathName, "\" '分割
$ W& G& w; f* B  v6 H8 }TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '總裝文件名稱
, Y- @: l# f" Y; ZTopDocName = Left(TopDocName, Len(TopDocName) - 7) '總裝文件名稱(排除.SLDASM)" K! _& v3 {2 N6 |
TopDocPathOnly = TopDocPathSplit(UBound(TopDocPathSplit) - 1) '總裝目錄名稱
/ g% b1 D$ Z2 r. z, \: ^! DTopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱
  {/ W( v( C- F9 p  A  t# LSubAsm TopDoc, TopConfString '遍歷- A( H1 ]9 P9 R' g- Y
End Sub* l6 k& l6 v" j& Y4 q9 F1 W

- ^; R3 g9 ]' c% N4 LFunction SubAsm(AsmDoc, ConfString)
0 y1 d1 `6 q6 nSet swModel = swApp.ActiveDoc1 Z* u. `" G# t' j, {0 L. f
Set Configuration = AsmDoc.GetConfigurationByName(ConfString)+ U; ~" y  O+ u. E
Set RootComponent = Configuration.GetRootComponent% U5 i0 t: I; S; f* C6 h
Components = RootComponent.GetChildren% R& L+ q7 h9 o# U
For Each Child In Components '總裝抓全部零件名稱3 _2 `0 q. o. Y$ s
    Set ChildModel = Child.GetModelDoc
3 v( |( I5 w& N5 {' Z" H- I& P0 a    ChildPathSplit = Split(Child.GetPathName, "\") '分割( Y0 K( m; }" |2 ?- @
    ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名稱+ ?) _9 ?$ w$ v( H
    L1 = InStrRev(ChildName, "_", , 0)
3 C& X! z. A0 A7 p3 B& O+ o5 I+ i    L2 = InStrRev(ChildName, ".", , 0)& x0 T9 u, i2 O$ ]
    code_ = Left(ChildName, L1 - 1) ' 編號, r! I, x( n  W$ o
    name_ = Mid(ChildName, L1 + 1, L2 - L1 - 1) '名稱, c8 ?9 {5 N2 ?& n" B! N/ H
    swModel.DeleteCustomInfo2 "", code_7 I2 k% O3 @" s1 F+ _2 `
    swModel.AddCustomInfo2 code_, swCustomInfoText, name_
; U, w' M( i* V8 x* o8 q) VNext7 @# e( G6 W( O5 z+ B1 G
End Function" i, d3 x- b+ m! Q
組件零件之編號名稱屬性.rar (120.59 KB, 下载次数: 75)
发表于 2014-3-30 14:22:01 | 显示全部楼层 来自: 中国福建泉州
ryouss 发表于 2014-3-27 21:50 static/image/common/back.gif
; G: T+ f& J% A  c9 O6 M0 R+ i4 @麻煩多了 ,最主要是要抓取組件上全部的零件名稱.+ m: J1 F4 `+ U
另執行組件有組件的通關密語.
) B  O) I  M. m5 _. C0 O參考 http://www.3 ...
) y2 ^# g1 |2 k  o- ~" h
不好意思,可能我回复的意思有误,我意思是用嵌入宏的方式在零件中可以提取名称和零件号,但是同样的方法用在装配体中却提取不到装配体的名称和图号。(例如:123-123-123_装配.slldasm,要提取“_”前的图号和“_”后的名称。请指教。
发表于 2014-4-1 19:57:09 | 显示全部楼层 来自: 中国广东东莞
感谢....................................
发表于 2014-4-4 00:09:56 | 显示全部楼层 来自: 中国江苏无锡
blindman 发表于 2014-3-30 14:22 static/image/common/back.gif
4 v% W0 h5 T( P8 U7 o: {, {  m不好意思,可能我回复的意思有误,我意思是用嵌入宏的方式在零件中可以提取名称和零件号,但是同样的方法 ...
2 Q$ U% w$ T: J5 S- G
一样的.也是提取文件名后再解析你需要的特定字符
& X: u! e, t/ b) P, ?! S-------------------------------------------------------------------------------------------
1 o9 L' S) k; s2 g- _不过这贴子.我看了半天,也没看懂巨集的概念..更没搞清楚怎么内嵌的..
( x6 p8 e, s/ q7 a( Q事实上感觉很繁琐.很久以前就见过这个东东.就是没清晰点的描述,导致没继续看下去.
+ I7 e3 T9 h+ ~# t& E! F今天又来,还好有人提到这里了...
! Y0 x  y5 [5 fhttp://fans.solidworks.com.cn/thread-33730-1-1.html
* l0 k: S! {8 p1 S2 i" o还是这里讲的比较清楚,至于VBA代码,略懂一些.想必有用的着的时候,呵呵.
发表于 2014-6-14 17:34:45 | 显示全部楼层 来自: 中国四川乐山
这个必须顶,完全有效果,已经弄到模板里,正在试用,看还有没其他的不良反应
发表于 2014-6-25 16:07:13 | 显示全部楼层 来自: 中国浙江嘉兴
Francis 发表于 2013-6-28 09:55 static/image/common/back.gif
* _. A4 k( R$ }9 D謝謝qiminger兄回帖討論。- `1 B/ T! Z# p3 P& Y

9 }% X& b0 X( T: q方程式的寫法正確,出現的驚嘆號代表呼叫的屬性值不是數值。

& Z* h, C1 H; u  \& F, m- S闷大~按照你的方法在零件模板中完全实现可用,但是在装配体模板中失效。求大师帮帮忙~谢谢
( [0 V4 d, z) I3 @$ \
( p5 W+ W5 f# v' V* g9 g- {# g3 Y* j我用的下面的代码8 y" ~  a; p; X9 N. ]! O, o
1
. x, O/ j( }1 D6 @$ e% RDim Txt
4 I! O7 Q4 I! t& t, A  g" zTxt = Part.GetPathName
$ [* [" H+ c! @) H; ?5 W* R: STxt = Mid(Txt, InStrRev(Txt, "_", -1) + 1)
# q) Y+ I" i, J" b! Z- T  uTxt = Left(Txt, Len(Txt) - 7)
  W- x3 D8 |8 mPart.Extension.CustomPropertyManager("").Set "mingcheng", Txt( G- ?0 F! i; I4 L; j

+ _3 H5 F2 I' |& \9 \
! d. S; p! W  w版本是2010
发表于 2014-6-30 14:11:05 | 显示全部楼层 来自: 中国广东东莞
Francis 发表于 2013-6-27 12:17 static/image/common/back.gif. L8 P. C- |/ Z- B8 z- q
2009版本以後,宏的嵌合方法已經改變,具體請參附件(2012版本)。

3 @+ G8 Y2 O0 ~  B他全家的妹附件无法提取
发表于 2014-8-27 17:00:02 | 显示全部楼层 来自: 中国广东佛山
终于有些明白,谢谢楼上各位高人
发表于 2014-9-10 21:43:04 | 显示全部楼层 来自: 中国广东深圳
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif% J1 O, H9 P; g6 ^3 Q
試試如下:win7 64位元
* P4 E5 h2 T1 ?  U6 _編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)
$ q$ E, |& C9 V7 V& D" x功能:應用宏抓 ...
  ~: o) X$ X# _- Y7 e& c/ L& I7 m
请教高人,这里抓取出来来的几个属性值,能否写入到"配置特定”选项卡上而不是自动写入到“自定义”选项卡上?
发表于 2014-9-10 22:05:40 | 显示全部楼层 来自: 中国广东深圳
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif
! ]% U3 }* z" N試試如下:win7 64位元
: s" l' u, o! _編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)7 }  y' u* a* O0 c# N
功能:應用宏抓 ...

5 E4 J' Q8 f" ]3 f% l( w不好意思,请教高手,授人以鱼不如授人以渔,因为对SW二次开发连门都没入,只能简单的改变一些语句做些应用,以您这个宏文件为例,请问下,想把宏运行结果写入到文件属性的“自定义”栏和“配置特定”栏时,应该改变哪句语句?写入到“自定义栏”和写入到“配置特定”栏时各自应该用什么语句?求解答。谢谢。
发表于 2014-10-27 17:07:49 | 显示全部楼层 来自: 中国广东深圳
这些天一直在找这个图号文件名的分离功能,终于成功了!
发表于 2015-1-1 12:02:03 | 显示全部楼层 来自: 中国台湾彰化县
非常感谢大师指引
发表于 2015-5-21 22:05:35 | 显示全部楼层 来自: 中国江苏苏州
认真学习一下
发表于 2015-5-21 23:14:06 | 显示全部楼层 来自: 中国浙江嘉兴
NC@jiang@nan 发表于 2014-9-10 22:05 static/image/common/back.gif# v# ?! [1 O6 ^3 x1 ^0 ]
不好意思,请教高手,授人以鱼不如授人以渔,因为对SW二次开发连门都没入,只能简单的改变一些语句做些应 ...
# f3 T+ E/ F) A( y  t/ o2 F
有關 “配置特定” 參看如下
* t3 Z' B8 k8 u/ n6 L) I: |, D( ^$ \) R
http://www.3dportal.cn/discuz/fo ... ead&tid=1451365
发表于 2015-7-28 08:54:10 | 显示全部楼层 来自: 中国江苏苏州
你们真是太牛了
发表于 2015-10-3 10:14:11 | 显示全部楼层 来自: 中国河南安阳
请问调入工程图后方程式似乎不管用?如何关联?

点评

需要关联什麼,請詳述!  发表于 2015-10-4 09:04
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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