QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
10天前
楼主: qiminger
收起左侧

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

[复制链接]
发表于 2013-12-17 23:47:18 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2013-12-18 08:51 编辑 1 k* p; X9 w( r
398312203 发表于 2013-12-17 11:30 static/image/common/back.gif
& N- U* y( ?, D2 }9 t自己给自己顶一个……

* L% ~: ~. [8 w1 c; Q( O) i試試如下:win7 64位元
& }7 L- ^( s$ Y編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)/ k; ]9 B5 H, h
功能:應用宏抓出零件編碼的"代號"及"名稱",放置到屬性欄.5 k# E2 E+ }/ C' Q  P# s
' 2013/12/17 2012-sp4版 test" C  E1 }" l9 I, l
'   data
& X3 p8 v6 H! r5 l3 v, v/ B'宏 ---> 屬性" _& z$ }# \! |
Dim swApp As Object; S6 `; Q, J# D/ C8 L
Sub main()
% x# G5 x1 _) ZDim retval                  As Boolean
- r1 x6 G) r6 ODim name_front         As String
9 o9 P+ D. B8 Y$ h/ [  LDim swModel              As SldWorks.ModelDoc2" C! A3 Z, g+ F7 l: N0 R
Set swApp = Application.SldWorks
1 u6 @4 F# l% i/ j3 W' z, `0 DSet Part = swApp.ActiveDoc2 `5 @3 n" m5 c7 y( J
Set swModel = swApp.GetFirstDocument
- Z% A, {" |& Rpath_name = swModel.GetPathName
# z: ?2 E3 C/ P+ ]0 A0 t8 x9 y; Dname_ = swModel.GetTitle
1 j2 c4 T! ~0 r: d1 P' y9 I6 G! `& jL1 = InStrRev(name_, "_", , 0), B8 A6 o% c: H# m
L2 = InStrRev(name_, ".", , 0)  r, {8 Z/ m% ]
name_front = Left(name_, L1 - 1)5 ?2 a! p- n' l  a  F+ E0 W
name_back = Mid(name_, L1 + 1, L2 - L1 - 1)
5 X& ~% X3 M$ w; `& Mretval = swModel.DeleteCustomInfo("代號")3 @4 c1 O% I1 W6 L% x" e
retval = swModel.AddCustomInfo3("", "代號", swCustomInfoText, name_front)4 A: ?1 K0 w- N9 T+ y6 N
retval = swModel.DeleteCustomInfo("名稱")
, L7 j- e5 @2 a' a2 e. q* r, E. Yretval = swModel.AddCustomInfo3("", "名稱", swCustomInfoText, name_back)0 t" {+ w; b. U% b* _6 `8 {
End Sub
: Z1 N" X# c/ J2 L# [/ [$ P) p* Q; G7 R& ]5 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
! V* W3 G/ [8 ~) o5 V. o) {% S試試如下:win7 64位元; _- r& N- }, J2 J4 {9 v8 ^; o' k4 c
編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)
6 O" M% J9 m# o2 G$ N' x2 C功能:應用宏抓 ...

7 s. P+ W& o0 q. {& \! n. f嗯,谢谢大神。已解决,赞一个
发表于 2013-12-19 16:32:47 | 显示全部楼层 来自: 中国广东东莞
本帖最后由 zqkzqk2008 于 2013-12-19 16:34 编辑
' `; Q% C- ]- X- g& E8 b" U6 t$ V4 ]$ P2 E: v# A8 n+ z. ~, s
闷大,我在更改以前的零件属性时,插入方程式的步骤比较多,想一键完成,遇到如下问题,要怎么解决哦
! [8 ^* G, }9 N  ~6 oDim swEquationMgr As Object
  E1 x6 u$ P% w) {6 i& xDim Part As Object7 k6 B1 O/ p6 [  @+ v+ w
Sub main()
- i  G7 V) ^: Q$ V/ S! p8 C) [Set swApp =  Application.SldWorks+ n1 i1 C( g2 W, S  T  Q  O
Set Part = swApp.ActiveDoc
$ T. j$ N: h/ ?& _! {. ~" R6 o" jSet swEquationMgr = Part.GetEquationMgr()
. ?) `: v! l; K' ZswEquationMgr.Add -1, "执行宏" & Chr(34) & "=" & """嵌合宏"""   '这里出了问题,“嵌合宏”这位置只能是数字,字母汉字都无法插入,求解
1 t. S- w+ E( h7 q$ [3 n" XEnd Sub
发表于 2013-12-19 17:07:24 | 显示全部楼层 来自: 中国香港
zqkzqk2008 发表于 2013-12-19 16:32 static/image/common/back.gif1 q. X2 B3 d9 z2 y2 p# w. z
闷大,我在更改以前的零件属性时,插入方程式的步骤比较多,想一键完成,遇到如下问题,要怎么解决哦
& B0 O. \" Q9 E- |* y) p7 a/ MDim  ...

7 ?: l$ q& w& y& C/ B6 P5 n建議使用“回复”及“添加代码文字”。/ q' h5 T& L5 |3 C/ ^" i

0 \2 w' f$ G. d3 h" {# D9 j試下改為:
  1. swEquationMgr.Add2 -1, """执行宏""" & "=" & """嵌合宏""", False
复制代码
发表于 2013-12-20 09:40:40 | 显示全部楼层 来自: 中国广东东莞
Francis 发表于 2013-12-19 17:07 static/image/common/back.gif
9 S7 {# h  x; l, G建議使用“回复”及“添加代码文字”。1 K/ g8 V# }) b# I2 b

+ t: @3 E, R- A* ]試下改為:
3 _( k$ |0 Z' C: T

+ q8 C" u  B4 A9 q" ^0 s) \2 T" n! H4 v多谢闷大,成功了!用方程式关联后,不用担心改名后代号和名称失去关联了,一键重写完美实现
发表于 2014-1-9 11:48:02 | 显示全部楼层 来自: 中国山东青岛
闷大大师,我能在论坛了看到将solidworks的图号、名称分离并与零件属性关链的技法很是荣幸,感谢大师。我现在用的是2010版的,32位XP系统,非常想实现这一功能,希望能得到您的指导。我的qq:1494515986。
发表于 2014-1-12 23:33:55 | 显示全部楼层 来自: 中国北京
试了一下 2012可以  可是升级了一下2014 怎么不行了呢?
# t6 q+ g7 e8 g/ L3 z. Z  ?
发表于 2014-2-25 21:06:19 | 显示全部楼层 来自: 中国广东深圳
本帖最后由 NC@jiang@nan 于 2014-2-25 21:13 编辑
/ B3 a# G+ g' l, a0 C
gt.adan 发表于 2013-12-12 11:10 http://www.3dportal.cn/discuz/static/image/common/back.gif! o, Y! S: F9 W! ~2 C* f$ g6 X4 ^
阿版,昨天測試了一下,發現您少了一步,就是悶大說的方程執行。7 N$ m6 c2 E, }: X
以我自身為例,全域變數是"result",屬 ...
* |6 w4 D3 t) n: C+ R8 H( V7 A

6 `% c& P, t- r8 r; y今天我试了下,我是在2010版时把这些宏什么的东西都添加到了模板文件里了,今天升级到了2013,用2010版的已经添加了宏和方程表达式的模板新建了文件,最终试验结果是这些代码还是能用的,只不过在“方程式”的列表里的表达式,总面会一直显示一个X号,就像26楼的第二张图片一样。
发表于 2014-3-26 22:33:21 | 显示全部楼层 来自: 中国北京
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif
3 O$ p$ {" S, V3 b. Z試試如下:win7 64位元0 X8 Y7 x* h6 L/ ]
編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)- r$ |, H3 X2 L% Z
功能:應用宏抓 ...

- {) i( Q7 a" {  m# ~2 T+ b在零件中可实现提取,但是在装配体中不行,是否语法上有不同?
发表于 2014-3-27 21:50:52 | 显示全部楼层 来自: 中国浙江嘉兴
本帖最后由 ryouss 于 2014-3-27 22:04 编辑
4 }7 M7 F& t* L" p& M1 Y  O5 k
blindman 发表于 2014-3-26 22:33 static/image/common/back.gif
# \! V" {% ^, `$ [$ d) x3 @0 k" O在零件中可实现提取,但是在装配体中不行,是否语法上有不同?
- @% h2 v* `% p8 U1 i% v
麻煩多了 ,最主要是要抓取組件上全部的零件名稱.5 u. D' g( M& k$ `$ ~
另執行組件有組件的通關密語.
  E5 u0 v6 @  v9 P. C) m參考 http://www.3dportal.cn/discuz/forum.php?mod=viewthread&tid=1434418; t4 L# `/ t+ Q. ~: r
有悶大及吉大精彩文章
# ^; k3 k  e$ S5 f5 ^  O1 [0 I8 ]& I3 g. ~7 s  b3 \
Clipboard2701.jpg
$ ~# u3 w3 ]6 @5 e1 r: ~0 a' ******************************************************************************' i5 Y* \8 h# m  Q
'  macro recorded on 03/27/14 by lsc) C! ^5 R4 O; \
'
5 q8 Q6 s% u( F. O, u4 K  g1 ^$ o'  組合件之零件自訂屬性 [ 編號_名稱 ],編號名稱是以" _ "符號分隔.' d8 x2 U0 L, o+ D9 u9 y( y$ R
'$ E6 |; w* n4 O9 U
' ******************************************************************************: E' R4 z$ q( {& {; a
Dim TopDocPathOnly As String
) m. F6 T- Y) hDim swModel As SldWorks.ModelDoc2
% e. U5 h# `+ H3 {Dim swApp As SldWorks.SldWorks
) W- Z' {. F, _" iSub main()
: X. P! e8 U$ C, q1 X. mSet swApp = Application.SldWorks
5 B( y# I7 S& ~8 ~Set TopDoc = swApp.ActiveDoc '總裝對象
  D/ U! J/ z# e5 _$ s- p
& n+ n6 p4 V/ q0 }5 R3 }8 |7 hIf TopDoc.GetType <> 2 Then Exit Sub '不是裝配=退出& R9 O" H& F" O# ]* I1 F5 U* t6 n
TopDocPathSplit = Split(TopDoc.GetPathName, "\" '分割
: `" x9 |; H; b; o( nTopDocName = TopDocPathSplit(UBound(TopDocPathSplit)) '總裝文件名稱
3 ?* @0 u+ J) n9 STopDocName = Left(TopDocName, Len(TopDocName) - 7) '總裝文件名稱(排除.SLDASM)
  o$ s8 u3 }. d/ b& A  b0 sTopDocPathOnly = TopDocPathSplit(UBound(TopDocPathSplit) - 1) '總裝目錄名稱) u; p1 S1 F5 C5 P1 l
TopConfString = TopDoc.GetActiveConfiguration.Name '總裝配置名稱
: N/ ]  g6 |( q' \: M9 f! MSubAsm TopDoc, TopConfString '遍歷
( f$ S+ t/ V2 ZEnd Sub
0 [2 R6 C% k2 S! D( T3 x  l- S' g9 v
Function SubAsm(AsmDoc, ConfString)/ i8 D/ r+ p4 W* ?  n/ D- d+ E& {
Set swModel = swApp.ActiveDoc
* Y& |& y' S# [" L' L" h9 _Set Configuration = AsmDoc.GetConfigurationByName(ConfString)+ M  A2 S/ m# b  m$ c! x5 |: b
Set RootComponent = Configuration.GetRootComponent( @. R' i" i8 c& Y+ {, t- ^4 F
Components = RootComponent.GetChildren
7 X! O- S1 d4 v; E% F" YFor Each Child In Components '總裝抓全部零件名稱
+ ?/ `$ t- }+ M, P2 M% c- V, `    Set ChildModel = Child.GetModelDoc
5 S6 ?$ r) l* k8 |9 R    ChildPathSplit = Split(Child.GetPathName, "\") '分割+ P4 ]0 ~( O3 e: V# A! |/ ^
    ChildName = ChildPathSplit(UBound(ChildPathSplit)) '零件文件名稱6 j3 Z: |- F1 t; L
    L1 = InStrRev(ChildName, "_", , 0)0 T4 Y6 V& _7 b/ A* a
    L2 = InStrRev(ChildName, ".", , 0)5 {$ @( u* E  F, n) a
    code_ = Left(ChildName, L1 - 1) ' 編號; E: S* u" N& A% M
    name_ = Mid(ChildName, L1 + 1, L2 - L1 - 1) '名稱
) I% Z/ m* a7 J+ f, w: J) n0 p4 A( c    swModel.DeleteCustomInfo2 "", code_& z5 S2 D$ A' m8 [9 ~* |# S6 W
    swModel.AddCustomInfo2 code_, swCustomInfoText, name_
' ~; P5 [8 B' HNext
0 [6 G8 Y: K5 ~  @( w. I2 M7 rEnd Function
. A" n' e4 }: k: ~5 a0 l4 y5 S" B 組件零件之編號名稱屬性.rar (120.59 KB, 下载次数: 75)
发表于 2014-3-30 14:22:01 | 显示全部楼层 来自: 中国福建泉州
ryouss 发表于 2014-3-27 21:50 static/image/common/back.gif' p2 w  B( }# L* J, U
麻煩多了 ,最主要是要抓取組件上全部的零件名稱.
  s2 s& [8 h. ?# q" G另執行組件有組件的通關密語.8 t+ ^; j3 x8 q7 t( G5 h& d
參考 http://www.3 ...
; m1 s/ I3 k! d  I7 T4 {
不好意思,可能我回复的意思有误,我意思是用嵌入宏的方式在零件中可以提取名称和零件号,但是同样的方法用在装配体中却提取不到装配体的名称和图号。(例如: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( W% M: M& ~: w8 v. E3 u
不好意思,可能我回复的意思有误,我意思是用嵌入宏的方式在零件中可以提取名称和零件号,但是同样的方法 ...

, D$ ~4 a* C& ~% u一样的.也是提取文件名后再解析你需要的特定字符
' H9 ?, z* O+ A9 i: Y8 a  m, q. w-------------------------------------------------------------------------------------------
3 J$ l2 k! d' H' H7 ]$ O1 Z) R. A不过这贴子.我看了半天,也没看懂巨集的概念..更没搞清楚怎么内嵌的..
; |4 ], n1 @0 @3 U# T事实上感觉很繁琐.很久以前就见过这个东东.就是没清晰点的描述,导致没继续看下去.7 |: g! s; v( q4 n" W* B+ Z0 n
今天又来,还好有人提到这里了...; }8 d2 V4 S0 e: {' o
http://fans.solidworks.com.cn/thread-33730-1-1.html
  O* @3 z5 q: Q) p) O' i1 [! U  j9 v还是这里讲的比较清楚,至于VBA代码,略懂一些.想必有用的着的时候,呵呵.
发表于 2014-6-14 17:34:45 | 显示全部楼层 来自: 中国四川乐山
这个必须顶,完全有效果,已经弄到模板里,正在试用,看还有没其他的不良反应
发表于 2014-6-25 16:07:13 | 显示全部楼层 来自: 中国浙江嘉兴
Francis 发表于 2013-6-28 09:55 static/image/common/back.gif% |0 j8 |6 ]' Y- `1 n: `( \
謝謝qiminger兄回帖討論。6 A- m* d# C2 r; J$ c

  h1 |# t! T" ]6 ]方程式的寫法正確,出現的驚嘆號代表呼叫的屬性值不是數值。
7 m' g$ b+ W" G' Q
闷大~按照你的方法在零件模板中完全实现可用,但是在装配体模板中失效。求大师帮帮忙~谢谢
1 A- p$ O5 U0 ?9 `3 w1 z, B
0 s6 [0 x, ]( W  y8 t: [6 |  M) P& O我用的下面的代码' ~4 [! d5 K+ M! L) L
1
6 G' b7 w3 C4 D  C5 MDim Txt
3 ~( R: b6 `1 e' D; GTxt = Part.GetPathName
0 d7 V$ q' r& A7 j2 g0 q4 CTxt = Mid(Txt, InStrRev(Txt, "_", -1) + 1)
8 \1 {" S# o: t6 [9 s4 u& GTxt = Left(Txt, Len(Txt) - 7)
; \- {. k& {3 L- g6 _  y1 w( D" e$ ~Part.Extension.CustomPropertyManager("").Set "mingcheng", Txt
; Y6 h2 F$ l* _9 C% P) T3 X# g1 p2 v* v* @5 V3 C

! G5 ^: z* x! `版本是2010
发表于 2014-6-30 14:11:05 | 显示全部楼层 来自: 中国广东东莞
Francis 发表于 2013-6-27 12:17 static/image/common/back.gif$ q8 A3 Z( ], @: p
2009版本以後,宏的嵌合方法已經改變,具體請參附件(2012版本)。

2 O. d( t6 O. T& v4 N他全家的妹附件无法提取
发表于 2014-8-27 17:00:02 | 显示全部楼层 来自: 中国广东佛山
终于有些明白,谢谢楼上各位高人
发表于 2014-9-10 21:43:04 | 显示全部楼层 来自: 中国广东深圳
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif: m+ ]' z1 B' D% M# C7 r. f
試試如下:win7 64位元! V8 I) t# |# Q1 |( W8 g
編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)
" W1 _4 M9 o$ q0 e. C. Y0 Q功能:應用宏抓 ...
: t( ?; |3 D1 V
请教高人,这里抓取出来来的几个属性值,能否写入到"配置特定”选项卡上而不是自动写入到“自定义”选项卡上?
发表于 2014-9-10 22:05:40 | 显示全部楼层 来自: 中国广东深圳
ryouss 发表于 2013-12-17 23:47 static/image/common/back.gif
. r6 ^$ g: d6 q試試如下:win7 64位元3 R9 C9 W8 Y/ V; L& ~7 ~
編碼原則為   代號_名稱.solidworks副檔名(如 123456_軸承.SLDPRT)& u7 X  _5 w5 i* R4 n& G8 f
功能:應用宏抓 ...

7 ~, [+ C8 Q( |  Z0 Y2 d0 `; P不好意思,请教高手,授人以鱼不如授人以渔,因为对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
4 Y. l% J% E7 r# Z不好意思,请教高手,授人以鱼不如授人以渔,因为对SW二次开发连门都没入,只能简单的改变一些语句做些应 ...
9 m! Q5 r6 t# N' }
有關 “配置特定” 參看如下+ \* g4 y: e" J/ {2 @

3 H; y9 Z  I: O3 U$ b7 W+ }8 d9 ehttp://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 )

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