QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

楼主: qiminger
收起左侧

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

[复制链接]
发表于 2013-12-17 23:47:18 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2013-12-18 08:51 编辑 5 [3 d* Y( T. T
398312203 发表于 2013-12-17 11:30 static/image/common/back.gif
9 z( L& i4 C! n$ Z: y自己给自己顶一个……

3 k& |+ \+ K% l) ]1 O0 t5 N試試如下:win7 64位元- R, \$ C% k# Z+ L, Z; l. F. K* G
編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)
/ W& b$ b% L( E; \9 T功能:應用宏抓出零件編碼的"代號"及"名稱",放置到屬性欄.
( t) O- J0 k/ _' \) w8 ~' 2013/12/17 2012-sp4版 test
! l1 f& z) [; r'   data
+ L1 L8 T$ u* e2 a# Y4 ?# {'宏 ---> 屬性
0 n" W' n$ o% |  f! I6 `Dim swApp As Object
+ ^3 U% P' I, {5 wSub main()5 r& f( G- L4 C$ X$ y" e0 b1 u9 s% T' _4 |
Dim retval                  As Boolean9 {% _( D$ g8 p$ ~% g
Dim name_front         As String8 ~( {8 K2 U4 k. |4 Q3 I
Dim swModel              As SldWorks.ModelDoc2
" o9 s; u2 e. P0 Q" R& g. {: eSet swApp = Application.SldWorks9 _1 C, X( c- U  B/ w, v/ }
Set Part = swApp.ActiveDoc) N9 H" F3 U8 s
Set swModel = swApp.GetFirstDocument# y$ N" Y/ j7 l
path_name = swModel.GetPathName1 U" o' h" o8 u& F) @+ Y4 }
name_ = swModel.GetTitle
, x# f- q; t) r7 ]" {" kL1 = InStrRev(name_, "_", , 0)! y# Q2 M7 F5 D$ |* q1 F1 D
L2 = InStrRev(name_, ".", , 0)1 m/ N; p6 Y  @3 w- n3 R4 x
name_front = Left(name_, L1 - 1)
# {/ S' }$ U2 h8 j$ ename_back = Mid(name_, L1 + 1, L2 - L1 - 1)
! u5 R3 b5 s' x% rretval = swModel.DeleteCustomInfo("代號")& `1 H; U3 ?: P/ w9 O: B+ h
retval = swModel.AddCustomInfo3("", "代號", swCustomInfoText, name_front)
5 i, ]) g2 @, ~retval = swModel.DeleteCustomInfo("名稱")5 g2 L3 e6 u4 n8 c9 v1 H3 P! O0 Q
retval = swModel.AddCustomInfo3("", "名稱", swCustomInfoText, name_back)
8 E7 W# n4 r* f6 ]+ ]+ X( OEnd Sub& E. C) {+ S/ @5 `* X, d4 j
# x: F5 {) W+ 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
+ a( v7 f( W; ]) T& a7 K5 u試試如下:win7 64位元/ x5 u9 y3 X/ d8 V& X0 K
編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)
3 X5 S, Q( P3 Y) Y! _; P功能:應用宏抓 ...
5 m  U& j+ ~3 t5 X; K
嗯,谢谢大神。已解决,赞一个
发表于 2013-12-19 16:32:47 | 显示全部楼层 来自: 中国广东东莞
本帖最后由 zqkzqk2008 于 2013-12-19 16:34 编辑 4 v8 B; e2 m( m4 o/ {# p# y" j, }

, w6 ]7 ]# ^) J" ~- b6 o闷大,我在更改以前的零件属性时,插入方程式的步骤比较多,想一键完成,遇到如下问题,要怎么解决哦  r2 S; i4 F9 l; g- a  C* _: |
Dim swEquationMgr As Object
2 x- f7 D0 L# x$ t9 |- [* q. L  aDim Part As Object
4 m8 {9 f: Z' c1 A5 H5 l5 @Sub main()9 O# |, A" w1 }7 Z! v
Set swApp =  Application.SldWorks, c/ D9 y0 Q/ r( l$ R! O
Set Part = swApp.ActiveDoc
" P3 k7 k' f4 z( o1 u% B/ cSet swEquationMgr = Part.GetEquationMgr()
$ K4 x! w$ V( B6 D" B( yswEquationMgr.Add -1, "执行宏" & Chr(34) & "=" & """嵌合宏"""   '这里出了问题,“嵌合宏”这位置只能是数字,字母汉字都无法插入,求解8 ]# B* F3 W: E
End Sub
发表于 2013-12-19 17:07:24 | 显示全部楼层 来自: 中国香港
zqkzqk2008 发表于 2013-12-19 16:32 static/image/common/back.gif5 a# j7 V) Q. L! _) o
闷大,我在更改以前的零件属性时,插入方程式的步骤比较多,想一键完成,遇到如下问题,要怎么解决哦
- Q% ?1 q; a" D& a7 X  z0 m6 X' rDim  ...
# `9 H6 |$ m0 \
建議使用“回复”及“添加代码文字”。+ L% @! h* S% \5 H3 `- A  c( p

5 |& d- I! n$ }& g* L  U1 d+ u+ w+ {試下改為:
  1. swEquationMgr.Add2 -1, """执行宏""" & "=" & """嵌合宏""", False
复制代码
发表于 2013-12-20 09:40:40 | 显示全部楼层 来自: 中国广东东莞
Francis 发表于 2013-12-19 17:07 static/image/common/back.gif
7 u) Q6 S- _. ^" H建議使用“回复”及“添加代码文字”。+ \6 v+ H, \" `/ Z3 t+ k/ k, _5 n+ ]

% p: R: ?$ T6 ?試下改為:

8 ^( R1 k2 V' {' R$ e) E- s
2 i8 D$ D4 {0 e+ p多谢闷大,成功了!用方程式关联后,不用担心改名后代号和名称失去关联了,一键重写完美实现
发表于 2014-1-9 11:48:02 | 显示全部楼层 来自: 中国山东青岛
闷大大师,我能在论坛了看到将solidworks的图号、名称分离并与零件属性关链的技法很是荣幸,感谢大师。我现在用的是2010版的,32位XP系统,非常想实现这一功能,希望能得到您的指导。我的qq:1494515986。
发表于 2014-1-12 23:33:55 | 显示全部楼层 来自: 中国北京
试了一下 2012可以  可是升级了一下2014 怎么不行了呢?
# f+ H6 {: }, @0 K
发表于 2014-2-25 21:06:19 | 显示全部楼层 来自: 中国广东深圳
本帖最后由 NC@jiang@nan 于 2014-2-25 21:13 编辑 9 b+ P' P- j5 I+ @) F
gt.adan 发表于 2013-12-12 11:10 http://www.3dportal.cn/discuz/static/image/common/back.gif- k! l# K2 v  F: y: @
阿版,昨天測試了一下,發現您少了一步,就是悶大說的方程執行。
8 e. x/ E6 @& V& _; k6 a7 p以我自身為例,全域變數是"result",屬 ...
7 H  P1 E7 s. }" t+ Y% ^3 O" f
5 S5 X  @' }$ s1 ^" p! g8 {
今天我试了下,我是在2010版时把这些宏什么的东西都添加到了模板文件里了,今天升级到了2013,用2010版的已经添加了宏和方程表达式的模板新建了文件,最终试验结果是这些代码还是能用的,只不过在“方程式”的列表里的表达式,总面会一直显示一个X号,就像26楼的第二张图片一样。
发表于 2014-3-26 22:33:21 | 显示全部楼层 来自: 中国北京
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif
9 _7 j7 E. ^! J3 J試試如下:win7 64位元
9 @( H* {# ?: c- G0 m& N$ w& c編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)
1 }+ p, M+ B. `+ x功能:應用宏抓 ...

# o! I4 O! r0 f% G( d0 @- k( m在零件中可实现提取,但是在装配体中不行,是否语法上有不同?
发表于 2014-3-27 21:50:52 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-27 22:04 编辑
0 v- t( |2 }3 \) i0 Z0 E, G
blindman 发表于 2014-3-26 22:33 static/image/common/back.gif) P( j$ y& H; N$ ^! I2 E, v& e- t- Z
在零件中可实现提取,但是在装配体中不行,是否语法上有不同?

, B1 ~+ N( o! L8 o& M  n麻煩多了 ,最主要是要抓取組件上全部的零件名稱.3 n9 s! y# n$ c3 l7 O, U
另執行組件有組件的通關密語.
: A) j6 G) b7 ]; a8 q參考 http://www.3dportal.cn/discuz/forum.php?mod=viewthread&tid=1434418
$ j. r7 A& B8 ^, l$ ?2 |" t5 e" b有悶大及吉大精彩文章4 y' P) r1 v1 _% L  D
0 n3 p% \, F0 \& L) X8 O
Clipboard2701.jpg   R, J6 c3 S3 h; h' g
' ******************************************************************************
7 b; }. `( S" h+ K( {; |" t; v'  macro recorded on 03/27/14 by lsc
& ~8 U% T5 V6 o: D1 C0 K'
6 ^- Y" o  y; n6 \'  組合件之零件自訂屬性 [ 編號_名稱 ],編號名稱是以" _ "符號分隔.0 v2 B: m& p" h$ M
'9 H$ P" s4 c$ x3 o; j
' ******************************************************************************3 K4 k8 B2 ~' m) u6 H' `3 O
Dim TopDocPathOnly As String- C- w% j$ C# U1 s' ^7 X
Dim swModel As SldWorks.ModelDoc27 S7 w  j; Y. v1 \
Dim swApp As SldWorks.SldWorks& q" B% e8 z% H# n% M: X
Sub main()! A) f( M; c9 p  g+ l6 M7 H* o
Set swApp = Application.SldWorks
0 }# {7 f% ~2 L  p8 X+ o2 U! bSet TopDoc = swApp.ActiveDoc '總裝對象
0 T, W& c3 U+ O1 t$ a: A9 w) ?0 c$ U. C/ L0 q& p  r, u! Z3 E. f0 W
If TopDoc.GetType <> 2 Then Exit Sub '不是裝配=退出
. C& R4 H8 p6 ^5 y. a4 i- }2 WTopDocPathSplit = Split(TopDoc.GetPathName, "\" '分割3 [* b! Q4 d9 F4 W8 H$ G
TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '總裝文件名稱
  E/ |' P8 E% b# M4 x# jTopDocName = Left(TopDocName, Len(TopDocName) - 7) '總裝文件名稱(排除.SLDASM)
5 E; h' u2 p, G; gTopDocPathOnly = TopDocPathSplit(UBound(TopDocPathSplit) - 1) '總裝目錄名稱
' ~- m7 r) L: ~5 {3 [TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱3 t( H* D1 M. o
SubAsm TopDoc, TopConfString '遍歷! U5 B- v& N5 S" z* w* b$ Q: S+ u
End Sub
; }- q' \4 y$ G: b9 Y' D( V
) I# Y5 |8 {. x$ V( q/ VFunction SubAsm(AsmDoc, ConfString)! u- C/ ^$ O" H- V; v" t  x
Set swModel = swApp.ActiveDoc
9 w/ M2 f4 Q2 s: Q9 E$ ESet Configuration = AsmDoc.GetConfigurationByName(ConfString)5 M' Q  T9 E0 ?* X3 u: M: F
Set RootComponent = Configuration.GetRootComponent  K$ Y% {* v3 H& |( Z$ M
Components = RootComponent.GetChildren
, H& y* e8 T3 e3 j) e0 m3 oFor Each Child In Components '總裝抓全部零件名稱
) f  K6 ^, i) ~8 _' T* e    Set ChildModel = Child.GetModelDoc8 \) E- Z% G  f) Y! m# B  ?! x
    ChildPathSplit = Split(Child.GetPathName, "\") '分割
8 Y1 G6 o) `/ f8 {% i; C    ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名稱) z* w4 n, n4 W" R
    L1 = InStrRev(ChildName, "_", , 0)
, ?0 G  A; X$ I& u" l+ \4 n# p    L2 = InStrRev(ChildName, ".", , 0)
* L" A( K5 L/ h+ O    code_ = Left(ChildName, L1 - 1) ' 編號
7 ]6 E7 q4 M( \6 \    name_ = Mid(ChildName, L1 + 1, L2 - L1 - 1) '名稱8 V2 R: C' e1 Y, K* h9 A# O# Y0 ~
    swModel.DeleteCustomInfo2 "", code_
* ?7 i8 W& m1 I* n) f    swModel.AddCustomInfo2 code_, swCustomInfoText, name_
0 ]3 W, l4 Q$ G. l& INext
# U# x- `% a- @/ Y6 ?; O. D- o! s; @End Function( A$ S8 G% |3 q* r7 I
組件零件之編號名稱屬性.rar (120.59 KB, 下载次数: 75)
发表于 2014-3-30 14:22:01 | 显示全部楼层 来自: 中国福建泉州
ryouss 发表于 2014-3-27 21:50 static/image/common/back.gif7 y- W: S& J  [/ h
麻煩多了 ,最主要是要抓取組件上全部的零件名稱.
8 |1 t7 _. y: r/ N, W) w1 z另執行組件有組件的通關密語.
( B) O- e+ t. m: z  D參考 http://www.3 ...

# j1 l3 ?/ D4 W0 E  f不好意思,可能我回复的意思有误,我意思是用嵌入宏的方式在零件中可以提取名称和零件号,但是同样的方法用在装配体中却提取不到装配体的名称和图号。(例如: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$ j# u6 G. b( u5 R. |
不好意思,可能我回复的意思有误,我意思是用嵌入宏的方式在零件中可以提取名称和零件号,但是同样的方法 ...
2 h- {6 Q+ [5 X/ T3 M0 x
一样的.也是提取文件名后再解析你需要的特定字符5 U) @+ g* @! s7 i4 Z% W$ z
-------------------------------------------------------------------------------------------$ X* U5 D& x  W; T) i  @
不过这贴子.我看了半天,也没看懂巨集的概念..更没搞清楚怎么内嵌的..
1 O: @" d; R' U事实上感觉很繁琐.很久以前就见过这个东东.就是没清晰点的描述,导致没继续看下去.
! X- x, ~* S, v$ |* W% O3 L今天又来,还好有人提到这里了...
) V2 ~6 A# l- Q  Uhttp://fans.solidworks.com.cn/thread-33730-1-1.html
0 x; {+ i; `8 E- O6 t7 z" {还是这里讲的比较清楚,至于VBA代码,略懂一些.想必有用的着的时候,呵呵.
发表于 2014-6-14 17:34:45 | 显示全部楼层 来自: 中国四川乐山
这个必须顶,完全有效果,已经弄到模板里,正在试用,看还有没其他的不良反应
发表于 2014-6-25 16:07:13 | 显示全部楼层 来自: 中国浙江嘉兴
Francis 发表于 2013-6-28 09:55 static/image/common/back.gif
% [* B8 e; }; b7 R* t$ s9 I2 Y謝謝qiminger兄回帖討論。' j0 }- N, S1 b" a3 X/ H: |% I

' }, h1 g4 W+ Z1 ]5 Q" V方程式的寫法正確,出現的驚嘆號代表呼叫的屬性值不是數值。
' r2 [! \$ }$ @+ M
闷大~按照你的方法在零件模板中完全实现可用,但是在装配体模板中失效。求大师帮帮忙~谢谢
% d, [& s: S; Z
% l0 v# I: `! a* r  O) s我用的下面的代码
/ K* V) _9 S  O0 L+ Y% }1
- L" L. u- B  ^6 V& U  T( eDim Txt
7 F) ?. i4 e7 X$ G* k% B/ N. r  }Txt = Part.GetPathName/ b1 g0 q9 v& h1 ]
Txt = Mid(Txt, InStrRev(Txt, "_", -1) + 1)6 g2 M' j5 D4 @6 }7 d: M
Txt = Left(Txt, Len(Txt) - 7). o0 T; e$ D6 f7 G& t
Part.Extension.CustomPropertyManager("").Set "mingcheng", Txt1 \- j6 D, h8 L5 K
; Y3 J9 Z* a0 s# Z4 n2 ~

, M) L- j. k* N/ L( t. v版本是2010
发表于 2014-6-30 14:11:05 | 显示全部楼层 来自: 中国广东东莞
Francis 发表于 2013-6-27 12:17 static/image/common/back.gif
6 u) i8 Q. J/ D: z' M8 H2009版本以後,宏的嵌合方法已經改變,具體請參附件(2012版本)。
# v1 v1 V1 G* V( v. G" l
他全家的妹附件无法提取
发表于 2014-8-27 17:00:02 | 显示全部楼层 来自: 中国广东佛山
终于有些明白,谢谢楼上各位高人
发表于 2014-9-10 21:43:04 | 显示全部楼层 来自: 中国广东深圳
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif
7 E7 a& h, v4 Z" ^試試如下:win7 64位元
1 P( l4 ]6 m. H& I$ D3 m. L) j6 c編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT); n+ j  A, Z5 x/ l0 J' O2 o
功能:應用宏抓 ...
; a0 s% n$ m) Y: F& e: h
请教高人,这里抓取出来来的几个属性值,能否写入到"配置特定”选项卡上而不是自动写入到“自定义”选项卡上?
发表于 2014-9-10 22:05:40 | 显示全部楼层 来自: 中国广东深圳
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif
. U- W* k* H2 c. R試試如下:win7 64位元8 l/ n" j* T# n) _) t" |# A0 M
編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)' ?# M. Z) c! R! \6 c
功能:應用宏抓 ...
9 D* s, m; |0 w! O$ R
不好意思,请教高手,授人以鱼不如授人以渔,因为对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
$ l0 d# N* N0 g/ X不好意思,请教高手,授人以鱼不如授人以渔,因为对SW二次开发连门都没入,只能简单的改变一些语句做些应 ...

  A7 K4 A; b3 O6 _! }) U有關 “配置特定” 參看如下
1 Q8 A1 g6 Y/ Q2 ^9 y
+ l' `, G( |6 Y, |% {# Ghttp://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 )

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