QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

楼主: qiminger
收起左侧

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

[复制链接]
发表于 2013-12-17 23:47:18 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2013-12-18 08:51 编辑
+ h. r/ E( y0 a+ E
398312203 发表于 2013-12-17 11:30 static/image/common/back.gif
/ J6 Z5 s( V/ D/ c自己给自己顶一个……
6 f( Y; O7 B2 y
試試如下:win7 64位元: \5 y1 n) v  N/ Z) q: Y
編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)4 L8 Z. K& `; ]6 L' ?1 j: F
功能:應用宏抓出零件編碼的"代號"及"名稱",放置到屬性欄.6 J6 j1 p. f% {( G7 P
' 2013/12/17 2012-sp4版 test
& V# g, I3 U3 q  w: @( y'   data
( [$ v; B2 P/ ]% N; C- ?0 H'宏 ---> 屬性
6 e4 W+ u* ]' F7 ~* R9 YDim swApp As Object
! _# f* O- S: e3 {' q- VSub main()  y. n1 E& s/ l0 e
Dim retval                  As Boolean8 q6 M! l( v, U
Dim name_front         As String
# L; _- p. ]7 P4 k) _+ p4 r) ADim swModel              As SldWorks.ModelDoc2
8 x3 J& v" ]) P+ Q( e; A: _, ^Set swApp = Application.SldWorks  M: g0 [: d; W# X9 [8 i1 W6 a
Set Part = swApp.ActiveDoc9 K! U) D, i! [; v3 ~2 ]! x
Set swModel = swApp.GetFirstDocument; Q% a2 h. y4 t
path_name = swModel.GetPathName
- T( ^$ _3 ~9 wname_ = swModel.GetTitle- q) F- ~$ m1 g  o# _; |0 X0 N& r
L1 = InStrRev(name_, "_", , 0)
/ k& |* m" ~' b/ f* PL2 = InStrRev(name_, ".", , 0), r8 G" p$ f# J/ ?# |
name_front = Left(name_, L1 - 1)
* r# c2 W$ h5 Z: l7 ^( sname_back = Mid(name_, L1 + 1, L2 - L1 - 1)
) Y5 Q; z9 h! J# mretval = swModel.DeleteCustomInfo("代號")
( h0 K/ n2 a; u7 a2 W3 w- tretval = swModel.AddCustomInfo3("", "代號", swCustomInfoText, name_front)
$ D; X8 L$ o# j0 Z2 C: uretval = swModel.DeleteCustomInfo("名稱")$ F. m3 v1 Y! w, g$ r
retval = swModel.AddCustomInfo3("", "名稱", swCustomInfoText, name_back)
9 k9 ]5 {' s) E* }/ \/ R; YEnd Sub
) j! \6 }# b# A1 B% A3 w
" L# i6 R) ^/ m# M) k0 u4 s( L9 | 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
4 Q+ u' w! h! r# N8 X* i# h試試如下:win7 64位元: t" ^9 O! }4 A+ t) \' f
編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)3 `- w. y. ?; B+ h9 c
功能:應用宏抓 ...

0 P# `4 I- Z0 {嗯,谢谢大神。已解决,赞一个
发表于 2013-12-19 16:32:47 | 显示全部楼层 来自: 中国广东东莞
本帖最后由 zqkzqk2008 于 2013-12-19 16:34 编辑 % N% T, h* p' F' W7 T) {

. X& z; G" u6 `% l, ~6 l闷大,我在更改以前的零件属性时,插入方程式的步骤比较多,想一键完成,遇到如下问题,要怎么解决哦1 p4 b+ x- p% U9 D2 A! m( U6 O* m
Dim swEquationMgr As Object
% X. C! N4 i5 ?, R" ^3 |5 T2 dDim Part As Object
0 W% D1 T" r8 c5 [9 O( m! OSub main()' k) Y; p4 e6 j8 M/ V0 |/ H# Z
Set swApp =  Application.SldWorks
) j  Y4 \, \1 y5 B: X; D" q( fSet Part = swApp.ActiveDoc3 x% T% P) E, s5 N2 Y, F
Set swEquationMgr = Part.GetEquationMgr()/ L- r# T" j2 G* a4 j
swEquationMgr.Add -1, "执行宏" & Chr(34) & "=" & """嵌合宏"""   '这里出了问题,“嵌合宏”这位置只能是数字,字母汉字都无法插入,求解' O- u3 Y9 R  |6 D
End Sub
发表于 2013-12-19 17:07:24 | 显示全部楼层 来自: 中国香港
zqkzqk2008 发表于 2013-12-19 16:32 static/image/common/back.gif9 R+ c" x: V- E& N4 a6 g
闷大,我在更改以前的零件属性时,插入方程式的步骤比较多,想一键完成,遇到如下问题,要怎么解决哦
' ~4 r+ B# w# I1 UDim  ...
0 b7 E, U, n0 G5 Q; h6 H
建議使用“回复”及“添加代码文字”。
$ C+ R: N! H2 h: S
+ }% ~5 Z6 g! W. y試下改為:
  1. swEquationMgr.Add2 -1, """执行宏""" & "=" & """嵌合宏""", False
复制代码
发表于 2013-12-20 09:40:40 | 显示全部楼层 来自: 中国广东东莞
Francis 发表于 2013-12-19 17:07 static/image/common/back.gif& g$ W! Y9 h. _+ G+ z& t
建議使用“回复”及“添加代码文字”。
: y4 M6 S! g! {5 m$ m( `6 n
$ u' G5 Q$ ~: D: F, w0 O: k+ f) J試下改為:
8 L* b- w, [3 x" e5 R# O! O
# A9 L: \# A: s  |& d
多谢闷大,成功了!用方程式关联后,不用担心改名后代号和名称失去关联了,一键重写完美实现
发表于 2014-1-9 11:48:02 | 显示全部楼层 来自: 中国山东青岛
闷大大师,我能在论坛了看到将solidworks的图号、名称分离并与零件属性关链的技法很是荣幸,感谢大师。我现在用的是2010版的,32位XP系统,非常想实现这一功能,希望能得到您的指导。我的qq:1494515986。
发表于 2014-1-12 23:33:55 | 显示全部楼层 来自: 中国北京
试了一下 2012可以  可是升级了一下2014 怎么不行了呢?- E+ e. l$ `# r) N
发表于 2014-2-25 21:06:19 | 显示全部楼层 来自: 中国广东深圳
本帖最后由 NC@jiang@nan 于 2014-2-25 21:13 编辑
& I, x9 s# a' M
gt.adan 发表于 2013-12-12 11:10 http://www.3dportal.cn/discuz/static/image/common/back.gif4 [+ s! ^1 p/ {/ g1 C5 ]
阿版,昨天測試了一下,發現您少了一步,就是悶大說的方程執行。
" A6 I# e) \7 O7 M以我自身為例,全域變數是"result",屬 ...

7 w- D" u; ?1 S) _) Z# W: l
7 ^& d+ j7 G! \8 H$ Y/ [5 L6 E今天我试了下,我是在2010版时把这些宏什么的东西都添加到了模板文件里了,今天升级到了2013,用2010版的已经添加了宏和方程表达式的模板新建了文件,最终试验结果是这些代码还是能用的,只不过在“方程式”的列表里的表达式,总面会一直显示一个X号,就像26楼的第二张图片一样。
发表于 2014-3-26 22:33:21 | 显示全部楼层 来自: 中国北京
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif
9 ^7 p8 I( a/ N- ]6 h9 W3 ~試試如下:win7 64位元
- j" ?' w* {: O) O. ^編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)
. K2 }  J8 w; @5 {功能:應用宏抓 ...
. e6 `! A* y6 ^( Q/ U" ?
在零件中可实现提取,但是在装配体中不行,是否语法上有不同?
发表于 2014-3-27 21:50:52 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-27 22:04 编辑
- M/ Y8 L. l! S
blindman 发表于 2014-3-26 22:33 static/image/common/back.gif
7 i' M0 t" E3 r在零件中可实现提取,但是在装配体中不行,是否语法上有不同?
1 f, I# l+ [# K: w
麻煩多了 ,最主要是要抓取組件上全部的零件名稱.
) J1 E/ q, r$ |2 D# v另執行組件有組件的通關密語.( B+ J; a% |* e- u; U) F
參考 http://www.3dportal.cn/discuz/forum.php?mod=viewthread&tid=1434418
. G3 ~& }4 w& |5 \5 W有悶大及吉大精彩文章7 v- r1 t  J9 Y/ P) X

$ y  X7 S8 d* \) F5 f( ] Clipboard2701.jpg
3 L5 D( X( ~; c5 x0 R! \4 Y: v# }' ******************************************************************************
8 M0 _9 }, O% J% U: y'  macro recorded on 03/27/14 by lsc% _# f3 K7 _& f% b
'! z- R; G7 R: c0 K1 C# D# r# A- _
'  組合件之零件自訂屬性 [ 編號_名稱 ],編號名稱是以" _ "符號分隔.6 _  c. }4 M1 }0 b/ B- P
'8 }0 }# L3 w+ G1 w" T% S1 n! c  C
' ******************************************************************************
8 e5 u3 g! b  m$ R8 D: i3 kDim TopDocPathOnly As String
# T& X4 t" E2 t: I9 kDim swModel As SldWorks.ModelDoc2' p1 R& |- p6 I: [
Dim swApp As SldWorks.SldWorks9 s' {; E1 w7 P5 Z
Sub main()
6 X( I# Y6 P9 y0 S+ rSet swApp = Application.SldWorks
  @+ X4 M* u/ SSet TopDoc = swApp.ActiveDoc '總裝對象
( s/ A6 Q' k! A1 K5 s6 T
: e7 z. V" C4 QIf TopDoc.GetType <> 2 Then Exit Sub '不是裝配=退出
$ z+ @; U3 `) e/ z% |$ ATopDocPathSplit = Split(TopDoc.GetPathName, "\" '分割6 ]5 c# g* ~% B# P' N
TopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '總裝文件名稱
6 d" R! k. a2 L" w+ q7 PTopDocName = Left(TopDocName, Len(TopDocName) - 7) '總裝文件名稱(排除.SLDASM)2 x2 B- [* M! Z  A& j% V
TopDocPathOnly = TopDocPathSplit(UBound(TopDocPathSplit) - 1) '總裝目錄名稱
0 z5 a+ e  H+ |7 z" GTopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱* n$ f: c; {+ \
SubAsm TopDoc, TopConfString '遍歷+ ?( l! }6 _- D6 s( W
End Sub
3 E+ V& H' N- H
3 l% ~: X! _0 w: wFunction SubAsm(AsmDoc, ConfString)
: Q/ }8 k4 r% h, e4 c( tSet swModel = swApp.ActiveDoc
! }& H- T/ a/ I$ D( I* USet Configuration = AsmDoc.GetConfigurationByName(ConfString)$ e  j' k9 S3 W1 Y  v
Set RootComponent = Configuration.GetRootComponent
, t7 h: K  p( T0 t; ]/ PComponents = RootComponent.GetChildren
6 m' a; ?0 _5 ^' p- g* B2 Z% W) J1 X! MFor Each Child In Components '總裝抓全部零件名稱
, F" c6 ]" Z: n( M, }  m    Set ChildModel = Child.GetModelDoc8 A' J3 |; e/ f
    ChildPathSplit = Split(Child.GetPathName, "\") '分割. R8 P0 x" d" q8 ?- G# E) ?$ K+ n
    ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名稱" n5 x/ G% A. h* W! y' D) r
    L1 = InStrRev(ChildName, "_", , 0)
- t5 [8 ~4 @3 H5 S0 c9 J6 d    L2 = InStrRev(ChildName, ".", , 0)9 t6 b. K7 C6 _* ^# s
    code_ = Left(ChildName, L1 - 1) ' 編號, i! H  r5 f7 T8 E- a0 u( M
    name_ = Mid(ChildName, L1 + 1, L2 - L1 - 1) '名稱! _# [, l* `/ R! b  K* k
    swModel.DeleteCustomInfo2 "", code_8 Y5 \) g+ @$ \& @! C
    swModel.AddCustomInfo2 code_, swCustomInfoText, name_7 O4 I+ N) w" W0 y/ U/ k
Next
- _4 s0 g- }5 j# e$ f. }9 t# ZEnd Function
6 T* h3 W; s* Z* }* d* a 組件零件之編號名稱屬性.rar (120.59 KB, 下载次数: 75)
发表于 2014-3-30 14:22:01 | 显示全部楼层 来自: 中国福建泉州
ryouss 发表于 2014-3-27 21:50 static/image/common/back.gif
4 i8 ?2 t' U8 i7 n1 T$ ^/ E, ~1 F2 e麻煩多了 ,最主要是要抓取組件上全部的零件名稱.
1 b6 u5 T! e0 l  }  Z; M另執行組件有組件的通關密語.
, A! V' g" y$ G0 x* ~( V. ^參考 http://www.3 ...

- s: e6 E# @1 J! ^不好意思,可能我回复的意思有误,我意思是用嵌入宏的方式在零件中可以提取名称和零件号,但是同样的方法用在装配体中却提取不到装配体的名称和图号。(例如: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! V: Y9 P( Y6 D1 v$ m
不好意思,可能我回复的意思有误,我意思是用嵌入宏的方式在零件中可以提取名称和零件号,但是同样的方法 ...
) I- {3 X9 ^4 w! ]3 J* Y1 w
一样的.也是提取文件名后再解析你需要的特定字符
9 @( Y8 ~  W: [$ G-------------------------------------------------------------------------------------------. Y. g( v) R( F# v4 I& R
不过这贴子.我看了半天,也没看懂巨集的概念..更没搞清楚怎么内嵌的..# m$ `6 @% s- P* C6 i7 ?; A1 b
事实上感觉很繁琐.很久以前就见过这个东东.就是没清晰点的描述,导致没继续看下去.
7 a7 T# L' |5 e. m" ^7 v今天又来,还好有人提到这里了...) {) Q8 C; d; d3 w# ^/ X/ I
http://fans.solidworks.com.cn/thread-33730-1-1.html8 _! K  w, w& H! n1 ?1 d
还是这里讲的比较清楚,至于VBA代码,略懂一些.想必有用的着的时候,呵呵.
发表于 2014-6-14 17:34:45 | 显示全部楼层 来自: 中国四川乐山
这个必须顶,完全有效果,已经弄到模板里,正在试用,看还有没其他的不良反应
发表于 2014-6-25 16:07:13 | 显示全部楼层 来自: 中国浙江嘉兴
Francis 发表于 2013-6-28 09:55 static/image/common/back.gif( U+ D' m% R1 S3 y2 X2 J9 L5 D5 X
謝謝qiminger兄回帖討論。) _1 n( P% P# w3 C4 h% s
) k. ~7 s0 v* m, p0 T# U
方程式的寫法正確,出現的驚嘆號代表呼叫的屬性值不是數值。

2 S! d/ }9 A0 {' A1 s闷大~按照你的方法在零件模板中完全实现可用,但是在装配体模板中失效。求大师帮帮忙~谢谢- K/ u/ r! w! l* d9 g" @
/ x2 e& u( _! j. U! Z% R
我用的下面的代码
2 ~9 j* ]0 @4 i; e5 `1, g$ J' B% T9 d5 X
Dim Txt' e1 R' c) i9 d: E1 |
Txt = Part.GetPathName
. A* x, b2 @: t) K; zTxt = Mid(Txt, InStrRev(Txt, "_", -1) + 1)
0 M8 h* r7 g0 iTxt = Left(Txt, Len(Txt) - 7)
+ Q- X. g* e5 t- Q, d) U: [Part.Extension.CustomPropertyManager("").Set "mingcheng", Txt
# U; @3 l( ?/ b6 `  x4 I8 ?3 |1 C7 z$ `! t9 X; k2 u) u

! j; C0 Y$ ^  _7 N% \; A: Q$ z版本是2010
发表于 2014-6-30 14:11:05 | 显示全部楼层 来自: 中国广东东莞
Francis 发表于 2013-6-27 12:17 static/image/common/back.gif
& U3 @; G$ o( Z' e2 C+ Z: W2009版本以後,宏的嵌合方法已經改變,具體請參附件(2012版本)。

/ [/ _" O5 }; K" H他全家的妹附件无法提取
发表于 2014-8-27 17:00:02 | 显示全部楼层 来自: 中国广东佛山
终于有些明白,谢谢楼上各位高人
发表于 2014-9-10 21:43:04 | 显示全部楼层 来自: 中国广东深圳
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif4 b) L4 r& R0 A
試試如下:win7 64位元
( b) Y. ]4 s1 j6 o編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)2 ]+ y7 }' ~0 M: ?
功能:應用宏抓 ...
% y& U) y1 U# R9 M6 e& t) \/ x0 m
请教高人,这里抓取出来来的几个属性值,能否写入到"配置特定”选项卡上而不是自动写入到“自定义”选项卡上?
发表于 2014-9-10 22:05:40 | 显示全部楼层 来自: 中国广东深圳
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif
* ?5 W, Z$ A' T* A! F" Q試試如下:win7 64位元
1 N: ^. H0 z' E) m編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)
; Y/ M: H5 B3 \! l功能:應用宏抓 ...

$ I3 A  F7 ]) k* v9 ^  q不好意思,请教高手,授人以鱼不如授人以渔,因为对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
: q( M3 Q3 d5 K/ ^不好意思,请教高手,授人以鱼不如授人以渔,因为对SW二次开发连门都没入,只能简单的改变一些语句做些应 ...
, J" g: N3 B: f  Q$ |
有關 “配置特定” 參看如下! N# X4 F/ ]! F3 j+ |2 X
2 t2 z: _' t* J
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 )

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