QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 157787698 于 2010-4-27 09:17 编辑 - f) c* v% B# j

: S6 A" f* C7 F1 a8 A2 ]+ Y# Z/ E9 I本人写了一段VBA程序用来将CAD图形转化为MDI格式,此CAD图纸也同样是由此程序生成,原来在AUTOCAD2004中可以正常生成图纸并通过plottofile方法转化为MDI格式,但是现在公司统一将CAD升级为2010,这样导致此程序不能使用。  M2 I, C0 B. B3 Q) u
9 X* ?8 B; D) K, G: I8 G
问题出现在使用plottofile方法进行虚拟打印过程。. U2 {' Q  ]' }: o9 N
1 Z% {# F) _; [. L5 l3 ~( O( a
原来在AUTOCAD2004中,使用plottofile方法完成虚拟打印只需要20秒左右,但是在AUTOCAD2010中,完成统一个动作需要150秒左右,这是不能接受的。而且在程序中如果连续使用两次plottofile方法,则即使对第一次使用plottofile方法生成的文件进行是否存在进行判断,第二次打印时程序仍然会跳出中断。& J) k* Z* L2 M/ {

4 K. z) \- P5 ~0 I( a具体代码如下:
4 Y' U( M  f# C3 D" l' W: G2 o
" }: i# T$ f. S9 T+ B        point1(0) = -5
' H4 K. C" J7 Q0 I3 j( ^/ b        point1(1) = 310
$ o: ?% K* R0 d4 z5 D* l        point2(0) = 420 6 v& a0 m2 y# E. J! e
        point2(1) = 610
( o+ h7 K" p8 L# z  w- |" c       i = 0
# i; L6 ^* p& g! d% `, K% w        ' Send information about window to current layout! A% ?4 h' s& h7 ^) M6 R9 o0 O) J/ i1 i
        ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2(): L+ x0 w( a' n, C
        ' Read back window information1 N/ v8 i& r5 i
        ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
% B0 J, k8 @$ O0 ~% r0 I'        ThisDrawing.Plot.DisplayPlotPreview acFullPreview    '全局预览4 w& w' X* ^2 V8 w- g! j
        ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees0 o! ^" ]* |: ?  w9 ?
         ' 将打印份数设置为 1  {' n1 k; B5 J* _1 j, E0 G
        ThisDrawing.Plot.NumberOfCopies = 1
1 B' ~; ^! o7 V4 E' n; W        ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow9 j% o( a8 |/ z8 E3 s, I6 ?
        ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit7 L- ~7 R, n  g0 T% h
        ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True '
7 Q: D2 Q% ~5 S' j7 m9 O- L        ThisDrawing.Plot.QuietErrorMode = True9 y8 m: Z' D& W& Z( q! c
        ThisDrawing.Regen acActiveViewport
( n+ w5 h# N9 o: s2 ~& g/ t         ' 初始化打印
) @2 Y$ l) s3 w5 {! \& H        RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result
% o6 _( `6 K' r$ \9 t. s        RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
2 l3 _- O3 n  V" O+ M4 F        RegCloseKey Result
+ k0 w& S' h# p    7 U' j4 |; p+ }
        ThisDrawing.Plot.PlotToFile KHpathmdi17 ^# `) S& S. D. v4 Y; J8 k
              '判断文件是否存在
8 v: ?  G& d; D$ k; c     Do While Dir(KHpathmdi1) = ""# ^% u2 j. C; L
            DoEvents
) X6 _0 z8 y" J/ n. k8 g2 M            i = i + 1' L7 }0 \$ R$ g( M% i- |
        Loop
    / P& a' I" Z2 c; w
    i = 0
. s7 C; G* q" Q* T8 m) p   'On Error Resume Next
; b" L8 q. [4 T# C" O    point1(0) = -5
6 Q% I5 B/ K$ p+ L7 I
    point1(1) = -3 4 g; e( V7 q8 N( l( T. T
    point2(0) = 420
' j1 U! S) O) Q$ a    point2(1) = 297* g2 R8 _& |2 u2 r! n) b9 ]
    ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
0 k7 l" e0 i0 M9 W. M/ R+ r/ Z: K- J# c    ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()0 n- P6 ?( J1 Q
    ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees3 C. x+ f6 T! a  i
'    ThisDrawing.Regen acActiveViewport3 e( S+ T* `+ n; Z* T
    ThisDrawing.Plot.NumberOfCopies = 1
9 [+ j  z! {# g# Y/ G    ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
$ m8 \: j3 U9 `" T' P, ^8 x, H    ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
: a5 H4 e0 l- f% z8 T    ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True6 m* W# a  U: n0 Q
    ThisDrawing.Plot.QuietErrorMode = True  T) J7 l; u* x! Z" H3 }- O& c/ }
    ThisDrawing.Regen acActiveViewport- ~- t+ |; _( x0 m' j' ~
    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result: S; I3 n7 N. G0 J1 C; w
    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4. z( U0 z. b8 y# \- W
    RegCloseKey Result
% ^) l8 D9 b3 W8 Y: Y2 [8 @0 Y    ThisDrawing.Plot.PlotToFile AZpathmdi19 x1 w* ~# S  l. W/ }/ \* [
   Do While Dir(AZpathmdi1) = ""/ f# s& P0 c& w& n3 k% }+ f  N
        DoEvents4 x  F8 c' A$ E! S/ u% m- d
        i = i + 1
5 d! t% v4 v  S6 ^& B1 ]7 q    Loop

1 f  f1 I, P$ X7 a 3 z" b  p5 h' e" @7 K
在判断第一次plottofile方法是否完成时,粉色部分循环运行了40多万次;如果在粉色部分后面设置断点,然后再继续运行,则第二次使用plottofile方法调用系统打印机可以完成打印,程序可以正常运行,而为完成此次循环,蓝色部分循环需要运行运行30多万次。这两个循环中任一个都需要耗费150秒左右。
0 S7 F. S- M7 d* R' r! b   e, N5 L# @. N6 N* ]& N" t( ^
而原来在AUTOCAD2004中,这两个循环 i 均等于0,也就是系统打印机与VBA程序基本上是同步执行的。
* x" w& [, [& _5 m$ Y : H& p4 i  A5 t  p" V2 i% ~& f
( U* Q- d' R6 _. @% R4 F# s
为什么会有这个差异?请各位大虾指点,谢谢
 楼主| 发表于 2010-4-28 18:06:18 | 显示全部楼层 来自: 中国浙江杭州
大家没有遇到这种情况吗?怎么都没有人回复阿
 楼主| 发表于 2010-5-1 17:07:56 | 显示全部楼层 来自: 中国浙江杭州
自己顶一下
 楼主| 发表于 2010-5-5 15:02:13 | 显示全部楼层 来自: 中国浙江杭州
问题已经解决" ^) A# Q! d/ i; j! W

- J7 s' m1 w& X: ~  f, u# I2 Z解决方法:! K# W* q0 m3 f# s
在选项中不勾选后台打印关闭

评分

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

查看全部评分

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

本版积分规则


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

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

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