找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 7952|回复: 14

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

[复制链接]
发表于 2022-1-26 18:12:06 | 显示全部楼层 |阅读模式
各位大侠:5 `% a9 }2 v/ d4 Y. R, Z6 L
     想录个宏、设置成快捷键,实现无论在模型窗口选中零件的面、或在左侧区域(commandmanager区域)选中零件或装配体,再按快捷键,即可打开相应的工程图。实现此功能需先做个宏。可是不太成功。问题是:
. o  B4 r  X1 c+ t* K$ D: u1、报错;
. l3 c( z) D1 h( }2、宏里指定了零部件的名称,导致只能打开创建宏时的零件工程图。
! O: _. E! s1 k% }, k6 b; \8 Y; s4 E2 |% @% q
哪位高手能否指点下该如何修改这个宏?非常感谢!  Q) B6 \/ D  Y6 H, O0 F

本帖子中包含更多资源

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

×
回复

使用道具 举报

 楼主| 发表于 2022-1-26 19:14:05 | 显示全部楼层
改了一下,此附件不在报错,但是打开的是创建宏时的工程图,依然不行。2 O% |0 n7 u) V5 S6 B
再改了一下,见下,启动宏没反应,也不报错,这个是SW2020的版本的宏
5 @( N  ?3 i- V) w% O/ n0 U  rDim swApp As Object
) c3 p2 F& u$ |. A" U0 C5 P  E0 W: X4 `
Dim Part As Object( {$ \: o" U4 K5 v: i  ]" L, [
Dim boolstatus As Boolean; c  i# Z( B6 z
Dim longstatus As Long, longwarnings As Long
& _7 d% y! H+ j5 }) ^/ r& `. F1 |7 Q( M
Sub main()
, o& r. ~0 u. \( X4 z* h. k/ E) H$ }/ V
Set swApp = Application.SldWorks
( D2 ^5 i2 O* H/ W9 i( S- d! k( Z% P% r, ~/ C7 j5 D7 x# l, Y3 {! e
Set Part = swApp.ActiveDoc
+ t. I  p8 b0 O$ k% t3 b! M" ~Dim COSMOSWORKSObj As Object
* @# `2 u5 ~  l4 |$ GDim CWAddinCallBackObj As Object9 `1 D: k" ~. \/ `6 J
Set CWAddinCallBackObj = swApp.GetAddInObject("CosmosWorks.CosmosWorks")
, u2 @# z3 u' Y! U- V( gSet COSMOSWORKSObj = CWAddinCallBackObj.COSMOSWORKS
% X, P, p. U5 X" Q9 W$ Z6 F5 j- a/ mboolstatus = Part.Extension.SelectByID2("B111 PLT-1@B000  AAA", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)7 d5 [6 L) k8 X) @* N& t3 N0 h
' g5 z# B- e; R- s4 N
' Open2 p1 s% p! @5 o- N# d% T: R( q
Set Part = swApp.OpenDoc6("C:\Users\COMPASSION\Desktop\宏\B111 PLT.SLDDRW", 3, 0, "", longstatus, longwarnings)! v* l3 Z) K, G' k1 y2 ~2 R
Dim swDrawing As DrawingDoc
; H0 z2 |# N! K% R$ USet swDrawing = Part5 c! y2 t3 E- f. W, t- E; u5 n
Set Part = swApp.ActiveDoc
; S2 O! _) X  X$ R4 U( TDim myModelView As Object7 p& R  A7 |  c6 y' T
Set myModelView = Part.ActiveView
0 {, I( {7 G8 P5 H% o4 }myModelView.FrameLeft = 0
( G" ]. x) I1 n% Q" s; U& r' u$ emyModelView.FrameTop = 0
5 t3 b" P( S2 G9 h. _1 O' _- FSet myModelView = Part.ActiveView
. G% l/ B  v9 X3 _myModelView.FrameState = swWindowState_e.swWindowMaximized! A* J0 \7 e5 z* L; @0 b
swApp.ActivateDoc2 "B111 PLT - 图纸1", False, longstatus
& v0 y% h2 @6 X0 \* }Set Part = swApp.ActiveDoc
: S5 O9 r" t* X' V8 y6 o6 @; f5 o6 S0 E5 f- a
' Redraw
  B$ A* W4 O1 t2 J( `Part.GraphicsRedraw2/ a- r& @8 D4 |
Set myModelView = Part.ActiveView( ~, e; r. k* n1 l/ W7 ~
myModelView.FrameState = swWindowState_e.swWindowMaximized0 N, J) S3 m7 y/ ]  i
Set CWAddinCallBackObj = Nothing
& m, h$ v0 l3 ~" M' v) RSet COSMOSWORKSObj = Nothing: p/ g+ b- z; H1 K+ F' _; b; B
End Sub$ u+ n8 ~, H, Q

本帖子中包含更多资源

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

×
 楼主| 发表于 2022-1-26 19:16:55 | 显示全部楼层
这个是SW2016的版本的宏,就差一步就成功了,就是如何从被选的零部件获得文件名。$ B) |6 w+ _7 A/ p. Q! |
Dim swApp As Object
7 ]9 f2 o  }0 `. ODim Part As Object
, r1 P" G( H1 ~! G' KDim boolstatus As Boolean
. l& ~( b# ]* J) o, W" z9 JDim longstatus As Long, longwarnings As Long
) `( ]0 f( D% v$ F- f. O8 l) }7 JDim Filename As String
( `& T' y( y7 y( qDim No As Integer
) k4 Z7 x/ K7 x) gDim Title As String) O5 g8 V& v" _, C3 x6 V+ M

! @, U0 j/ a) ~4 G& p- b+ J; E8 v, [  Q# I
Sub main()8 J7 `2 e5 N3 s. g
2 z4 g% K; N( S8 p  X2 ]$ q
Set swApp = Application.SldWorks
9 l8 V4 e% z- Z+ c2 T2 E! rSet Part = swApp.ActiveDoc* L& K5 L5 v9 K- C
boolstatus = Part.Extension.SelectByID2("Part", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)
8 ~$ {5 y- {! z/ a) N  Q/ mSet Part = Part.Extension.SelectByID2("Part", "COMPONENT", 0, 0, 0, False, 0, Nothing, 0)" _8 d( g* n! q+ w; V* l5 A
Filename = Part.GetPathName()2 c+ v' q5 {/ k8 k; G- t( z
No = Len(Filename)
. p8 Y- ^7 u: H2 `$ `% {1 GFilename = Left(Filename, No - 7)
* w0 ^: U6 Y/ J0 J& F+ u0 P2 A* t2 k9 q) O3 l" L7 t, l
Set Part = swApp.OpenDoc6(Filename & ".SLDDRW", 3, 0, "", longstatus, longwarnings)% S9 Z' l; M" j+ y3 }
Set Part = swApp.ActiveDoc
& {3 d! O: x4 ^) P/ l/ `1 O' ]$ o: E8 nDim myModelView As Object
" d5 j$ B6 _0 Z1 [Set myModelView = Part.ActiveView
9 \7 [# K1 _! H- _7 b1 bmyModelView.FrameLeft = 0
- `: d/ S# n3 O: {myModelView.FrameTop = 0
8 L% A# f% t/ X8 b. ^9 A0 [" Z  ^Set myModelView = Part.ActiveView
) G! x* A$ y$ ?. @/ ymyModelView.FrameState = swWindowState_e.swWindowMaximized
) t" U* I4 @" `$ `8 {9 A* n, {3 OSet Part = swApp.ActiveDoc" n0 o- l  O" X$ d
Set myModelView = Part.ActiveView* L; `" {( I3 r5 \- H% ^
myModelView.FrameState = swWindowState_e.swWindowMaximized
8 ]7 T; Q  M4 F) _End Sub

本帖子中包含更多资源

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

×
发表于 2022-1-26 22:21:22 | 显示全部楼层
矫情,有个词叫“快捷键”,操作:你把”从零件/装配体到工程图“设置一个快捷键,比如Ctrl+1。
1 P. R; J# h! f; [; Y使用方法:你点中零件,按快捷键就好了8 Z; ]) n* Q1 T, x# x7 Y0 K

点评

感谢,您说的是从选中的零部件创建工程图的快捷键。我要的是从选中的零部件打开既有工程图的快捷键, 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 | 显示全部楼层
零件和工程图并不是一一对应的
& k& @0 Y# ]3 I. j' N& h为啥,有配置,有出图的特殊需要0 n0 c# ~; r; R- m
A零件可以对应工程图B,C,D。。。
1 [9 @9 \& O* Q. j( b$ h; F% k5 {5 Z
所以,我觉得这个需求就不成立。。。

点评

这个要看个人习惯了。 有的人不采用配置的做法;有的人采用配置,但不同配置的工程图都放在一个工程图文件里,也就是都和文件名关联;有的人就不是这样。即使是最后一种情况,有这个快捷键也好的多,前两种习惯更..   发表于 2022-1-28 16:40
发表于 2022-1-28 21:02:17 | 显示全部楼层
感谢楼主分享,学习了
发表于 2022-11-2 11:26:27 | 显示全部楼层
zhufeng_hgp 发表于 2022-1-26 23:08
5 m" g; B' C7 @. ~, G" |# K这个功能正如2楼说得那样,把打开工程图这个命令设置成快捷键就能实现的
* H; v: Z" ^8 [. o; c
你好,请问你这个是从装配体选择零件,然后打开工程图的吗?如果是可以的也帮我发一下吧,谢谢!1142163586@qq.com
7 m) ]1 {5 Q4 B9 M; a* l, {+ ^
发表于 2022-11-3 08:49:26 | 显示全部楼层
已学习,多谢!
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

GMT+8, 2025-7-12 19:51 , Processed in 0.085837 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.5 Licensed

© 2001-2025 Discuz! Team.

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