QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
4天前
全站
goto3d 说: 版主微信号:caivin811031;还未入三维微信群的小伙伴,速度加
2022-07-04
查看: 3246|回复: 20
收起左侧

[求助] 求梁大、丹大等高手指点SW中调出选择打印机窗口的宏代码

[复制链接]
发表于 2017-6-21 17:06:28 | 显示全部楼层 |阅读模式
安装
主题分类用于问题归类:

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
本帖最后由 NC@jiang@nan 于 2017-6-21 17:07 编辑 ( d! }& X* F* L1 d; Z7 f9 ]

; N. K6 E" V2 l8 J) H2 H各位大侠们,我今天突然想研究下SW批量打印某文件夹下所有的工程图的宏文件。因为打印时可能打印成PDF也可能直接打印到打印机,所以想在打印开始前可以调出选择打印机窗口的对话框,但不知道在SW API中用什么语句调用。在网上找到有EXCEL中调用打印机选择对话框的代码如下:5 F  _; @; W; ]4 a2 n4 [
7 X8 J) D( ?% @! }$ m1 U) `
Private Sub Workbook_BeforePrint(Cancel As Boolean)
: x" a* B) n3 k3 ~$ y4 yDim dyj As Boolean'遍历打印机( f# D2 Y$ r# ~! p& }" _
dyj = Application.Dialogs(xlDialogPrinterSetup).Show
; ]" y9 _8 i7 X3 m: gIf dyj = False Then; o. x' |6 a! g2 }" P3 L6 R/ P& J
        MsgBox "打印取消!", 64, "系统信息"
1 @+ K0 e! H4 o$ v" i) w9 F5 K1 v* I        Exit Sub% \; _# L5 a9 q4 a/ Q
End If
( S7 ^( ]+ ]5 Uene Sub, ?  w/ k: \7 u6 u4 M

  d9 L/ C! [) a9 z7 I$ w6 X7 U1 o- E5 K
经过实验,这代码在EXCEL中可以正常呼出打印机选择窗口,但在SW宏中总提示库不对之类的出错信息。(个人工作电脑不能上网,无法截图上传)。/ S) L9 W: z9 T& E
水平有限,不知道在SW中到底怎么呼出这相同的选择界面,求各位大侠指点,特别恳请对SW应用水平达到让我敬仰的梁大、丹大等几位大侠中的大侠的指导。' H! k% Y& ]$ x3 j6 I
谢谢。
" ]9 ]6 V4 \! {! o
发表于 2017-6-21 21:40:18 | 显示全部楼层
NC大大你好,是要這需求嗎?! E" v. q5 L+ {, r% T. G4 K
是的話,EXCEL操作是會的,但沒試用過SW,要發些時間試試了!
: o, K) z; g7 R4 C$ x  ]
6 C* \7 {) K: e1 Y1 W& y& c) t/ H5 A% G& X" o8 {) I8 _0 o
) ]) E: m7 N* x' D' i9 O* E9 Q4 L3 z6 X
capture-1.gif
发表于 2017-6-21 23:55:06 | 显示全部楼层
本帖最后由 gt.adan 于 2017-6-21 23:56 编辑
. Q/ x- P' D, ]4 p# Z; b7 l6 z* s- U% m7 B
謝謝樓主抬舉了,以下幾點~  Z; N( L! W; S+ Y, t% d/ L
1. 對於「宏」,我至今仍是似懂非懂,實在稱不上什麼高手。0 ]% j/ T  s7 S/ \
    工作上有使用的九成以上是悶老大過去的教程或分享,然後加減修改成符合自己需要的。/ a3 ?' f' v( f' Y, }( k2 R
2. 建議不要「指定回答」,這或許會讓其他有能力者怯步。
. z4 |0 F/ s# Z- d' X! c+ m1 L# K6 x3. 針對樓主所提「批量列印」,個人提供這幾年的使用心得~# s& T7 z/ {7 Y& c
; x2 |0 z. B% ?+ I0 p: p# v' a5 [
批量打印或儲存到其他格式,例如PDF、JPG、DWG、IGS…等等,各大論壇早已有代碼(當然我也有分享過~)
6 G, W8 t/ c+ |' Z' B搜一下,稍加修改符合自己工作上的需要就可以,相當方便,也用了很久~
' Q$ w5 M8 |; ^: a  i: H& w批量打印到圖紙,SW自帶的「工作排程器」就可以做到,但缺點是很慢,所以不建議。
7 j2 x1 f- s* p* u+ d2 U3 t9 X就以自身為例,分享一下使用的方式~! K! Q8 E  {( I6 u
我工作上習慣把所有零件及裝配,依「檔名(版次)」的命名原則輸出到PDF,這樣一來就為了下面的批量打印做好了準備。3 D$ L  |. Q" }1 O+ L2 G
(以上依個人習慣,沒有也沒關係,用「批量輸出PDF宏」就可以輕鬆完成。)
  r1 v; N- V7 A# ?# u4 S& k2 R接著將資料夾內要打印的PDF全部合併成一個檔案,然後針對這個檔案去選擇印表機後打印即可!, r  {6 z, K  w1 n) P
例如前天,一天完成了八十幾張圖,老闆要我下班前把圖放在他桌上以便晚上審閱。+ p) [* o$ n7 j! q7 S. P  B3 j
八十幾張!要是沒方法就得一張一張印!同事都想我不知到得忙到幾點才印得完…
/ h. m$ @6 @+ z4 k- Y但我就是用上述方式,不過就點了幾個快捷鍵,五分鐘後厚厚一疊圖紙就熱呼呼的出爐囉~
7 I" O  E& D0 m6 M# @# I4 W) }' V' T0 h9 D- n# z; `
當然,幾年前也有人分享過從SW調出選擇印表機對話框的代碼,由於個人不是很需要所以當時沒有深入研究。
1 l, O& K& \0 }' s而且該代碼是針對單一工程圖而編寫的,沒有批量的功能。並且每個圖頁都得自己手動命名、指定路徑。
6 s6 d7 C, m3 ~& l$ ?再者,樓主要批量打印還得考慮是否有「多圖頁」的問題。批量打印若遇上此情況,請問是要打印哪一張?是目前的?還是全部?2 k, v# z. {# {# a/ ]: U! V
還有圖紙大小,若遇不同size圖框又該如何?工程圖裡是否都已經設置好了?
4 a4 O7 o. q: I以上都是我幾年前思考「批量打印」時確確實實碰到的問題!也正因為如此後來才使用了上述的方式來達成。8 W5 C: v& q" P! _1 R4 e0 ?( X  R

1 [# ^% B! u: _' r' N! |- `. j基於以上,樓主要的「批量打印宏」是否還真那麼需要?我想可以重新思考一下~
# e) |, P. D& ^9 B% m/ y, v附上一張運行該代碼的圖片~
9 ^4 f0 t! _# @( O% x% e7 a
1 L2 w# t! I" |$ N. E Capture.PNG
1 N: b8 ^2 N; a9 d  Q* G" n- [
! Y, W' P" m( ?6 p

点评

能否请丹大把这个关于调出打印机选择对话框的部分的代码共享给我学习学习?谢谢丹大。  详情 回复 发表于 2017-6-22 01:08
 楼主| 发表于 2017-6-22 00:59:31 | 显示全部楼层
谢谢梁大、丹大的指点。
" b+ Q7 J/ M3 _0 ^: C; p梁大的在EXCEL里呼出打印机选项对话框的代码我在网上搜索到了,谢谢梁大。
, ^: S: p* v- y, B8 W' v  b# g另外丹大的代码我想再试试,我的想法是,批量打开工程图,分别读取图纸档案中的所有的图页的图框大小,读出数值后就再用代码设置打印成相应的图幅,打印完毕一张图页后再读取这个工程图档中的下一页图页的图框大小,想如此周而复始下去是否能把指定目录下的图纸全部打印完毕。现在正在测试中。谢谢丹大。@ryouss @gt.adan
# i; z& Z8 {1 _' P
 楼主| 发表于 2017-6-22 01:08:52 | 显示全部楼层
本帖最后由 NC@jiang@nan 于 2017-6-22 01:16 编辑
$ N' S0 `3 e' l: h; _! k: k- g
gt.adan 发表于 2017-6-21 23:55
' p) w+ }8 n5 I謝謝樓主抬舉了,以下幾點~: ~: e9 q* I+ ~) z' h0 ~
1. 對於「宏」,我至今仍是似懂非懂,實在稱不上什麼高手。
/ e, u5 S+ ?5 @1 Y9 E8 b8 ~    工作上有使用 ...
0 |- V2 w; m- l+ n: N8 s. B
能否请丹大把这个关于调出打印机选择对话框的部分的代码共享给我学习学习?谢谢丹大。把单张图转换成PDF文件,这个在SW自身的批量处理的附属程序中也有这个功能,单张转换后再合并的话是可以。
$ A& x- Z& }8 R+ R$ Y其实之前用SW2014版时,用SW自身的批处理程序中的“打印文件”就可以批量打印图纸,只要选择好物理打印机或者PDF打印机后,就能自动根据图框大小打印成相应的图幅。但上周公司统一升级到SW2016后,这个SW自身的批量打印文件就出现问题了,选择打印机后,要么把所有的图纸全打印成了A4,要么就全打印成了A3,不会再根据图框实际大小自动确定打印的图幅大小了。而把单张图打印成PDF然后再合并的话,首先合并需要花费时间,其次怕合并后图纸顺序乱了打印出来后还需要一张张的校对图纸是否按图号顺序打印。如果能搞定选择打印机这个问题的话,也许能选择PDF虚拟打印机,把所有的文件打印成一个PDF文件,这样能省事不少。
; j# U4 q0 s# ]( W; V' c
发表于 2017-6-22 01:25:18 | 显示全部楼层
本帖最后由 gt.adan 于 2017-6-22 01:30 编辑 8 L) A. k4 J6 {- \) E$ t0 h7 @  g. W

/ A* Q/ f4 I1 A/ s! S5 e/ l您有心研究學習,那我就分享當初找到的代碼~
3 H& \' y+ R: q3 `! o* W  d; g祝您早日成功,回饋予壇友們~3 F: w8 Z& x8 K; e; x

& |6 e# g2 h$ a2 Z2 G" s Print each sheet of drawing & get list of printers Droplist.swp.zip (31.71 KB, 下载次数: 19)

点评

丹大,我实在是不好意思了。看了两天您提供的这个宏文件,发现里面有几段代码在循环调用,按逻辑关系去推理,推理得头晕了,看不懂了。想改成在EXCEL里调用SW程序来打印文件,现在在试着做这个宏代码。刚开始做就碰  详情 回复 发表于 2017-6-24 19:59
谢谢丹大。丹大辛苦了,这么晚还没休息。  详情 回复 发表于 2017-6-22 01:31
 楼主| 发表于 2017-6-22 01:31:54 | 显示全部楼层
gt.adan 发表于 2017-6-22 01:25$ {3 T3 {) F) q4 O
您有心研究學習,那我就分享當初找到的代碼~
. d4 ^7 [( H- F* h5 R* b祝您早日成功,回饋予壇友們~

/ _* w3 ?! A9 h+ N9 ^谢谢丹大。丹大辛苦了,这么晚还没休息。
发表于 2017-6-22 09:23:19 | 显示全部楼层
建议批量另存PDF,再利用acrobat批量打印。

点评

大鹿先生,我一直都是這樣處理的~^^  发表于 2017-6-22 10:32
发表于 2017-6-22 10:03:33 | 显示全部楼层
同意鹿大的说法。
* v! U7 {- e( G% S, _我的做法是:6 c1 v" H9 O! G. f
同一个装配体和其零件的工程图尽量放用同一个工程图文件中。
# R$ u/ o9 n8 s5 a6 X  C8 T另存为PDF,图纸的大小不用再另外设置。(如果是打印为PDF文件,就有点麻烦,每张图纸的大小,图纸方向都需要设置)。
- @6 D: H2 ?' M5 e1 [这样一个PDF文件会对应一个完整的工程图集。如果打印机中A3,A4可以自动切换,打印时选择按照PDF页面选择纸源。* g1 U* U  @" O
8 ?7 @  t' {7 i3 D2 `7 w! S8 `3 ]+ o
如果图纸很分散,那就把PDF文件合并后再打印。

点评

另存为出来的PDF文件,还会识别字体,如果别人没装你的字体时文字显示就别扭了,打印成PDF,就不会有内嵌字体的问题。  详情 回复 发表于 2017-6-22 20:03
 楼主| 发表于 2017-6-22 20:03:15 | 显示全部楼层
wutong490 发表于 2017-6-22 10:03  Y0 s8 N0 y- H5 H9 \- @9 \
同意鹿大的说法。
; @- X, ~, ?: a1 R3 d* {我的做法是:% [$ o5 F9 U1 v1 {
同一个装配体和其零件的工程图尽量放用同一个工程图文件中。

, }+ c) h- g2 Z5 a$ r/ y/ o另存为出来的PDF文件,还会识别字体,如果别人没装你的字体时文字显示就别扭了,打印成PDF,就不会有内嵌字体的问题。
发表于 2017-6-23 08:39:40 | 显示全部楼层
NC@jiang@nan 发表于 2017-6-22 20:03( P1 k( r. T4 r  H2 n: A! ~2 a6 R% J
另存为出来的PDF文件,还会识别字体,如果别人没装你的字体时文字显示就别扭了,打印成PDF,就不会有内嵌 ...
5 s8 h, W4 L% L  b0 R3 x) o! B- r
选项中有  字体嵌入2 x1 ~' ^) O6 z& f" ]7 j
就是文件会增大一些
 楼主| 发表于 2017-6-24 19:59:18 | 显示全部楼层
本帖最后由 NC@jiang@nan 于 2017-6-24 21:39 编辑
  _6 M9 Q4 k4 c8 U. Q) V5 I5 {
gt.adan 发表于 2017-6-22 01:25
8 `; k! |! H/ r2 }您有心研究學習,那我就分享當初找到的代碼~! \0 r8 H, G2 A, H( s0 G& N
祝您早日成功,回饋予壇友們~

! k- U- C0 k" X* R丹大,我实在是不好意思了。看了两天您提供的这个宏文件,发现里面有几段代码在循环调用,按逻辑关系去推理,推理得头晕了,看不懂了。想改成在EXCEL里调用SW程序来打印文件,现在在试着做这个宏代码。刚开始做就碰到个问题,不知道在EXCEL的宏中是否可以检测SW软件是否已经启动,如果SW没启动的话就中止宏程序的运行。这样做的原因是:如果没有预先启动SW,这样在宏程序运行中用 Set swApp = CreateObject("SldWorks.Application") 代码来启动SW,在批量处理几个文件时,SW每处理完一个文件后就退出了,等处理下一个文件时又被Set swApp = CreateObject("SldWorks.Application")这个代码调出相当于又需要重新启动一次SW,这样循环启动比调用运行宏之前已经手动启动好的SW的速度要慢很多卡很多,特别电脑配置低点的时候处理文件的速度差距是天壤之别。我百度了一下”EXCEL VBA 怎么检测 调用的程序是否处于打开状态“主题,没找到有效的解决办法,能否请丹大指点迷津?谢谢/ d, j6 y( g+ d" l( t
补充:9 J5 x! s/ k8 W. B. P  {
丹大,又仔细的百度搜索了一会,修改代码后已经解决了问题了。' \9 c: r6 o- M( ^6 z0 ?
满足我要求的功能的代码如下:
7 {; p7 c: ^7 T7 ?( N2 z' C$ f& C% {7 U2 y$ u9 I0 R
    On Error Resume Next
$ N. W2 K1 t% w- N7 d    Set swApp = GetObject(, "SldWorks.Application")
7 w( I& b6 i0 z( q/ @1 \! K  C9 \& \    While swApp Is Nothing    '如果调用SW程序失败(SW程序未启动)时,循环, N/ r% }, x& C$ y; @
        IResponse = MsgBox("请启动SolidWorks后重试或点击取消放弃打印!!", vbRetryCancel + vbInformation, "SolidWorks程序未启动!")' z8 _% [2 d: q3 F7 C
        If IResponse = vbCancel Then Exit Sub5 y' `8 H. S$ G7 d
        Set swApp = GetObject(, "SldWorks.Application")
, f0 L- V  [: \/ k  W" }    Wend6 [+ V" P1 N1 ~3 U8 M  \
    On Error GoTo 0
% L" t7 I1 [" E* s3 ?. V1 p# L# E0 ?9 l
发表于 2018-2-26 11:53:08 | 显示全部楼层
NC大,请问这个问题解决了吗?

点评

没有解决。  详情 回复 发表于 2018-2-26 19:18
 楼主| 发表于 2018-2-26 19:18:27 | 显示全部楼层
erikgqp8645 发表于 2018-2-26 11:53$ A  T2 X1 h& }: M. ]+ o' Q
NC大,请问这个问题解决了吗?

: |- Z9 ^/ N! Y+ @" ?: N/ b没有解决。
发表于 2018-2-27 09:40:55 | 显示全部楼层
本帖最后由 erikgqp8645 于 2018-2-27 09:42 编辑
9 r+ d' M" A5 [& w; D% ]
NC@jiang@nan 发表于 2018-2-26 19:18
% H5 E2 O  u$ f3 T: Q没有解决。
+ w' M- Q0 N  T% u% H, s
不知道 SolidWorks Task Scheduler 这个自带插件是否可以满足你批量打印某文件夹工程图的需求呢? 搜狗截图20180227093901.jpg
7 K" C9 U; m  n' K6 P3 {! t! x9 O1 u2 N2 }
" {9 l% b: g" ~

点评

想调出选择打印机窗口, 是想做宏文件,在打印前先把图纸预处理一次,比如设置打印的纸张大小类的。自带批量打印好像就只能单纯的打印,要另外设置一次图纸页面。  详情 回复 发表于 2018-2-28 19:12
 楼主| 发表于 2018-2-28 19:12:22 | 显示全部楼层
erikgqp8645 发表于 2018-2-27 09:40
& D  y  p, \7 [: p* M不知道 SolidWorks Task Scheduler 这个自带插件是否可以满足你批量打印某文件夹工程图的需求呢?

" W/ o+ Q. D2 M4 j" x0 V想调出选择打印机窗口, 是想做宏文件,在打印前先把图纸预处理一次,比如设置打印的纸张大小类的。自带批量打印好像就只能单纯的打印,要另外设置一次图纸页面。
发表于 2018-3-1 10:34:46 | 显示全部楼层
NC@jiang@nan 发表于 2018-2-28 19:12* R: q9 c8 e* B3 p1 B% e% `
想调出选择打印机窗口, 是想做宏文件,在打印前先把图纸预处理一次,比如设置打印的纸张大小类的。自带 ...

3 ~2 x1 N' F2 |看来我曲解NC大的意思了。 + R) ?  x0 `, L( G, r
NC大可以试试LiteTools这个插件,不知道能否满足你的需求呢。( c6 }6 r, H$ X; @% _. w0 e. U+ P
另外好像在玩家论坛有一款叫做ISWL 互动工具 的东西,你也可以去看看。
发表于 2019-7-12 15:54:17 | 显示全部楼层
我想这个宏应该是楼主想要的,这个宏是我根据别人的宏修改过的,删掉了一些我觉得没用的功能。
1 F) Q5 d2 u- O2 M; a2 P大致功能:选定PDF虚拟打印机>根据工程图选择合适纸张>打印成PDF文档。" X' R' c' @9 K2 y+ n
原贴链接http://www.3dportal.cn/discuz/forum.php?mod=viewthread&tid=1480450&page=1&extra=#pid9104601
7 h# u( q2 _- y3 B# Z

批量转PDF.rar

19.74 KB, 下载次数: 8

发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备13008828号-1 )

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