QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

查看: 4455|回复: 3
收起左侧

[已解决] AUTOCAD2010 使用VBA调用系统打印机完成打印非常慢,如何解决?

[复制链接]
发表于 2010-4-27 09:03:03 | 显示全部楼层 |阅读模式 来自: 中国浙江杭州

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

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

x
本帖最后由 157787698 于 2010-4-27 09:17 编辑
( N+ y- ~5 s3 Y3 r! X: `& R2 m$ \% W$ \& q5 F1 t
本人写了一段VBA程序用来将CAD图形转化为MDI格式,此CAD图纸也同样是由此程序生成,原来在AUTOCAD2004中可以正常生成图纸并通过plottofile方法转化为MDI格式,但是现在公司统一将CAD升级为2010,这样导致此程序不能使用。
# `; W) `; i+ A2 A
, q( N) Z8 E2 g) q问题出现在使用plottofile方法进行虚拟打印过程。5 p+ a" [1 y2 j9 V9 x8 m  ^. J9 p
, m  \/ K9 |& {: Y+ w8 C; Q7 t: t# e
原来在AUTOCAD2004中,使用plottofile方法完成虚拟打印只需要20秒左右,但是在AUTOCAD2010中,完成统一个动作需要150秒左右,这是不能接受的。而且在程序中如果连续使用两次plottofile方法,则即使对第一次使用plottofile方法生成的文件进行是否存在进行判断,第二次打印时程序仍然会跳出中断。9 k) ?, K- R; c. W9 A

6 A- Y. g4 \" ~; `0 @  `具体代码如下:2 h) K1 r" ^" F; i: D% m! ]0 k' O
4 K# U( ~0 @3 G: `* o
        point1(0) = -5 7 H5 p+ B6 e9 h, E" D( R
        point1(1) = 310 ! J* l% \$ |. u7 W- f- j, V" n
        point2(0) = 420 0 Z2 t4 a6 X+ t3 `
        point2(1) = 610
& B: P' M! q/ U% q* [       i = 0  U+ n& j% E4 R9 {8 b
        ' Send information about window to current layout! |4 s# D. D( Q
        ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
' w% E9 c# {- }        ' Read back window information
6 D, p& J  s" t$ g        ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
# a# S' |/ r: {2 F'        ThisDrawing.Plot.DisplayPlotPreview acFullPreview    '全局预览
& e' f: ]7 [' w+ P4 _        ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees
- Y# [0 q3 |! n6 M3 n/ f' B& Y         ' 将打印份数设置为 1( |( s# }. r3 j1 l( Z
        ThisDrawing.Plot.NumberOfCopies = 19 K1 B' [7 j7 [4 D; L8 W, k+ j8 d" C
        ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
# C- f6 J1 q1 j        ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
, U7 X& g8 Y1 U        ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True '. S7 S( [2 [. E  X+ J- n8 w
        ThisDrawing.Plot.QuietErrorMode = True
. A9 A1 f0 Y& X6 y        ThisDrawing.Regen acActiveViewport
7 M+ ?1 x" I1 ]         ' 初始化打印  c% P# k7 n3 {* F( ~
        RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result
: k2 m1 H$ E  \* z- `% d! h        RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
% h1 a4 l& y/ |) Y" P: G        RegCloseKey Result
( q  D- `) @5 o      W% l5 L! Y) Q
        ThisDrawing.Plot.PlotToFile KHpathmdi1" }0 Q7 m3 [, S' ?: K+ a+ [
              '判断文件是否存在
1 J9 R6 `6 [, G; T' X/ w     Do While Dir(KHpathmdi1) = ""
- Y1 U8 w& r4 Z2 e            DoEvents
- E+ N* v0 r# o0 x5 R            i = i + 1! [% j0 ?  s; M; r" o6 O) j, ?
        Loop
    2 D' S! ?( t1 ?- Z3 }
    i = 05 J) r) t) x& e
   'On Error Resume Next0 w- A! o1 M. r) I/ D( g
    point1(0) = -5
: d' X, E& G& H. E7 V
    point1(1) = -3
$ g  V5 l3 h  A  \, B    point2(0) = 420
. ]; o, W6 B+ N$ e  }& |    point2(1) = 297
7 Z9 p; x* y5 s    ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()9 S# d2 Y* c+ H! z9 `  ^
    ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()# Z: z1 @4 J( \! ?1 w% a
    ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees. F. X5 Z  e: C* T- K+ O
'    ThisDrawing.Regen acActiveViewport
' [. l! m( p* N: g. P( N. o- D    ThisDrawing.Plot.NumberOfCopies = 1
1 o, _+ J1 b/ F    ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
- d& Y/ N/ h# s. {    ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit8 t/ c$ v* R6 t, J- p# f
    ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True6 m& c+ X! V4 b& m. v( u
    ThisDrawing.Plot.QuietErrorMode = True& S8 A+ I7 r8 f% D" H
    ThisDrawing.Regen acActiveViewport( w1 l$ D# O8 \. ^: b* P
    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result7 o1 C& v: ]4 u1 d4 O! J2 |. j
    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 41 |; r( A6 k$ l9 {" Z
    RegCloseKey Result! h6 z7 M3 a7 ]0 v  j4 E! ~6 e
    ThisDrawing.Plot.PlotToFile AZpathmdi16 q: V2 @6 h+ k0 b
   Do While Dir(AZpathmdi1) = ""/ [; Q+ |% |6 t$ J
        DoEvents- a% @$ [7 N) A3 e( Q
        i = i + 1* S2 ?/ l. _6 ]% }4 F9 G- m! E( K/ j
    Loop
: l* Q* l! L: A% i$ e

0 {+ i5 T. n! n1 x5 Z在判断第一次plottofile方法是否完成时,粉色部分循环运行了40多万次;如果在粉色部分后面设置断点,然后再继续运行,则第二次使用plottofile方法调用系统打印机可以完成打印,程序可以正常运行,而为完成此次循环,蓝色部分循环需要运行运行30多万次。这两个循环中任一个都需要耗费150秒左右。$ _' `( f% d" B( _. c2 J" W

# V# f6 ?; [3 x6 s# }而原来在AUTOCAD2004中,这两个循环 i 均等于0,也就是系统打印机与VBA程序基本上是同步执行的。
+ |& A6 I# V, Z. D
/ Z1 l/ y" [- w, @; f# H) k 9 C$ U6 ?2 R1 ~/ i, l/ F
为什么会有这个差异?请各位大虾指点,谢谢
 楼主| 发表于 2010-4-28 18:06:18 | 显示全部楼层 来自: 中国浙江杭州
大家没有遇到这种情况吗?怎么都没有人回复阿
 楼主| 发表于 2010-5-1 17:07:56 | 显示全部楼层 来自: 中国浙江杭州
自己顶一下
 楼主| 发表于 2010-5-5 15:02:13 | 显示全部楼层 来自: 中国浙江杭州
问题已经解决
. |4 X# ^+ k- _% ~- _4 ~7 Q1 v
/ \) O1 n7 j0 }% o( d5 h+ s" v解决方法:
1 a% T1 Z; S" B6 `% b6 k在选项中不勾选后台打印关闭

评分

参与人数 1三维币 +5 收起 理由
woaishuijia + 5 经验分享

查看全部评分

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

本版积分规则


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

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

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