找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 8043|回复: 14

“快速打开零部件工程图的宏”的问题

[复制链接]
发表于 2022-1-26 18:12:06 | 显示全部楼层 |阅读模式
各位大侠:$ o9 c) ^' ^" V7 U6 q: }
     想录个宏、设置成快捷键,实现无论在模型窗口选中零件的面、或在左侧区域(commandmanager区域)选中零件或装配体,再按快捷键,即可打开相应的工程图。实现此功能需先做个宏。可是不太成功。问题是:( D9 Q5 ]! _/ G3 S$ m# _
1、报错;
8 [" ]8 E* b( }6 o) c2、宏里指定了零部件的名称,导致只能打开创建宏时的零件工程图。4 D* T3 v8 P, r0 K3 u# L

1 p- A) |4 M+ ]( N# y( y9 l哪位高手能否指点下该如何修改这个宏?非常感谢!/ t; S: L6 M: {& H

本帖子中包含更多资源

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

×
回复

使用道具 举报

 楼主| 发表于 2022-1-26 19:14:05 | 显示全部楼层
改了一下,此附件不在报错,但是打开的是创建宏时的工程图,依然不行。
" z) M9 z; d6 n) O$ ?再改了一下,见下,启动宏没反应,也不报错,这个是SW2020的版本的宏
4 T4 U/ d/ _! f9 BDim swApp As Object( W0 `  ?6 w0 L; n9 h# a: P

" M$ `8 w: M) t$ D: yDim Part As Object
. n  l5 ?$ w. j4 q# I  H8 xDim boolstatus As Boolean# e) R$ d0 G& S8 p. O6 g# |
Dim longstatus As Long, longwarnings As Long
+ x: D7 t+ g+ j9 {$ V
" v1 ^$ ^& S: K4 \  i7 g9 N5 uSub main()- w9 W7 u  d5 V

  O* Q4 j9 B4 |( cSet swApp = Application.SldWorks
) T2 N- B8 H9 G9 a% S9 v  R5 k5 B# D- t( _4 z
Set Part = swApp.ActiveDoc
3 d: R; p3 N, ]' U9 ?2 NDim COSMOSWORKSObj As Object. v0 \! }' N0 k. t$ i) H1 E
Dim CWAddinCallBackObj As Object. ~9 {) o- o- w) Q8 g
Set CWAddinCallBackObj = swApp.GetAddInObject("CosmosWorks.CosmosWorks"); M$ H- j+ B& J4 M" r/ ?9 n6 m
Set COSMOSWORKSObj = CWAddinCallBackObj.COSMOSWORKS
! z4 A% Y* T  {. }boolstatus = Part.Extension.SelectByID2("B111 PLT-1@B000  AAA", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
6 I% W) Y$ I% ~3 u  h) t8 _, x) u0 q. {$ j" ~/ |
' Open
5 Z  X, z8 k& BSet Part = swApp.OpenDoc6("C:\Users\COMPASSION\Desktop\宏\B111 PLT.SLDDRW", 3, 0, "", longstatus, longwarnings)6 `2 v) O$ {# ?# L0 L( a9 f
Dim swDrawing As DrawingDoc3 ^3 U7 W' w% m' T2 s3 X
Set swDrawing = Part
4 M- r9 z1 L$ lSet Part = swApp.ActiveDoc
! M9 x6 z" |0 J9 @3 R; |Dim myModelView As Object
5 \" Y8 c) U4 fSet myModelView = Part.ActiveView
0 Q8 a, t0 @+ LmyModelView.FrameLeft = 0
0 G; m9 l" m- ZmyModelView.FrameTop = 0
: E% R/ X2 q# G( xSet myModelView = Part.ActiveView+ e8 D; v( l: f5 s$ s
myModelView.FrameState = swWindowState_e.swWindowMaximized6 }1 Z  g2 s3 `2 W
swApp.ActivateDoc2 "B111 PLT - 图纸1", False, longstatus& b$ ^; [5 n! e7 }, w
Set Part = swApp.ActiveDoc
4 \0 A& D1 {9 o( b! F7 K4 c4 ^  D# q: t+ m
' Redraw
- h  y+ v8 _4 VPart.GraphicsRedraw2
( o( w! z; c$ }, C$ GSet myModelView = Part.ActiveView
: w4 L% {  ^; G. g$ m0 K+ jmyModelView.FrameState = swWindowState_e.swWindowMaximized; c- s9 C5 E. }& y& V7 V3 ~
Set CWAddinCallBackObj = Nothing% U: ?- R$ r, ~2 `
Set COSMOSWORKSObj = Nothing
& l1 m2 ^! a% L0 _3 Q' oEnd Sub( R) A) g' [/ [2 k; M1 V

本帖子中包含更多资源

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

×
 楼主| 发表于 2022-1-26 19:16:55 | 显示全部楼层
这个是SW2016的版本的宏,就差一步就成功了,就是如何从被选的零部件获得文件名。- [8 q+ m# u( m8 n
Dim swApp As Object
, H# h, o) D6 T. C: T' yDim Part As Object1 Z% [6 z5 `# u) Y) ~2 e0 d
Dim boolstatus As Boolean
/ ]: ]* ^( R2 Y7 g. dDim longstatus As Long, longwarnings As Long& R* _9 D2 o/ C& Z3 d5 U' M
Dim Filename As String
3 x) s" `* P% c$ V/ kDim No As Integer
/ y+ u4 `2 F( ?' zDim Title As String8 b2 A: T3 [' Y+ e/ M
1 |7 v! K- ~. \' C
2 o( E1 u: M" U/ U: p
Sub main()8 O2 W; d- ?! B
) P8 @; i" k8 g  V5 k
Set swApp = Application.SldWorks
- v' @+ m, e. ~Set Part = swApp.ActiveDoc
8 \$ N: [, p3 lboolstatus = Part.Extension.SelectByID2("Part", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
# D7 k; f3 e. d' K, R' ESet Part = Part.Extension.SelectByID2("Part", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)6 M3 b. U( C; J9 r' g% }- @
Filename = Part.GetPathName()# a! C' I+ G, x
No = Len(Filename)
! `7 J% p- l9 U, v  d5 oFilename = Left(Filename, No - 7)
9 k  {  E& p) u. Z- F/ [( e
: b6 l" `  q) h  l; w3 uSet Part = swApp.OpenDoc6(Filename & ".SLDDRW", 3, 0, "", longstatus, longwarnings)
8 g8 m. K# Q! m7 P! HSet Part = swApp.ActiveDoc, x$ A% B( t  G4 Y
Dim myModelView As Object
4 x4 u  p6 ^; l. f5 rSet myModelView = Part.ActiveView
" T( K& V" P/ x9 q! U, l) jmyModelView.FrameLeft = 0
" ?% [" L' f) L3 \+ I) m' w1 KmyModelView.FrameTop = 0
, x# B) \2 J  A5 j4 WSet myModelView = Part.ActiveView/ `7 A) X2 w* g  l8 j0 D* I
myModelView.FrameState = swWindowState_e.swWindowMaximized" N/ N0 E( i' o1 F
Set Part = swApp.ActiveDoc
1 a- p3 o7 J4 G6 D: rSet myModelView = Part.ActiveView
9 e! i- P* o+ WmyModelView.FrameState = swWindowState_e.swWindowMaximized2 L" t8 G1 o7 w; v  h9 ]
End Sub

本帖子中包含更多资源

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

×
发表于 2022-1-26 22:21:22 | 显示全部楼层
矫情,有个词叫“快捷键”,操作:你把”从零件/装配体到工程图“设置一个快捷键,比如Ctrl+1。8 }3 Z/ p, q/ X& S
使用方法:你点中零件,按快捷键就好了0 I& R5 _+ V8 y# J

点评

感谢,您说的是从选中的零部件创建工程图的快捷键。我要的是从选中的零部件打开既有工程图的快捷键, sw有点奇怪,不是所有的右键弹出选项都可直接创建快捷键。  发表于 2022-1-27 18:28
发表于 2022-1-26 23:08:57 | 显示全部楼层
这个功能正如2楼说得那样,把打开工程图这个命令设置成快捷键就能实现的

本帖子中包含更多资源

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

×

点评

请把“零件工程图切换”的宏发给我下,非常感谢,[email]arter_2006@126.com[/email]  发表于 2022-7-15 09:50
这个是工程图与零件互相切换,你把邮箱给我  发表于 2022-1-28 17:40
您这个宏是“从选中的零部件打开既有工程图的快捷键”吗?如果是,能否分享下?谢谢  发表于 2022-1-27 18:29
发表于 2022-1-27 08:48:22 | 显示全部楼层
好东西 学习一下
发表于 2022-1-28 09:21:48 | 显示全部楼层
零件和工程图并不是一一对应的
; j8 R, s/ h6 i7 J- b为啥,有配置,有出图的特殊需要
+ m& ^' F: u1 E1 `7 g5 ?A零件可以对应工程图B,C,D。。。
0 x! s4 C3 j/ v0 _: }3 j: T
$ j% x5 f% z" p1 N所以,我觉得这个需求就不成立。。。

点评

这个要看个人习惯了。 有的人不采用配置的做法;有的人采用配置,但不同配置的工程图都放在一个工程图文件里,也就是都和文件名关联;有的人就不是这样。即使是最后一种情况,有这个快捷键也好的多,前两种习惯更..   发表于 2022-1-28 16:40
发表于 2022-1-28 21:02:17 | 显示全部楼层
感谢楼主分享,学习了
发表于 2022-11-2 11:26:27 | 显示全部楼层
zhufeng_hgp 发表于 2022-1-26 23:08/ [2 x6 |- V4 r" O/ t4 e' L
这个功能正如2楼说得那样,把打开工程图这个命令设置成快捷键就能实现的
1 I- X  w. g( Q% l4 ]
你好,请问你这个是从装配体选择零件,然后打开工程图的吗?如果是可以的也帮我发一下吧,谢谢!1142163586@qq.com# m' V* [/ S! o- |, Y8 Y6 h
发表于 2022-11-3 08:49:26 | 显示全部楼层
已学习,多谢!
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-8-4 22:18 , Processed in 0.101464 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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