QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 157787698 于 2010-4-27 09:17 编辑
( F7 P, G4 `! {7 P. H# W' C: B) s! e% T$ R9 z! }3 t
本人写了一段VBA程序用来将CAD图形转化为MDI格式,此CAD图纸也同样是由此程序生成,原来在AUTOCAD2004中可以正常生成图纸并通过plottofile方法转化为MDI格式,但是现在公司统一将CAD升级为2010,这样导致此程序不能使用。8 T7 z) q2 y4 ?# I$ H% N
9 Z7 h* T: Q% ?8 `* v9 E  u" k
问题出现在使用plottofile方法进行虚拟打印过程。
0 l1 m* Z  N( z6 I/ F6 P* M
) U2 z: ^2 K9 C( F! a原来在AUTOCAD2004中,使用plottofile方法完成虚拟打印只需要20秒左右,但是在AUTOCAD2010中,完成统一个动作需要150秒左右,这是不能接受的。而且在程序中如果连续使用两次plottofile方法,则即使对第一次使用plottofile方法生成的文件进行是否存在进行判断,第二次打印时程序仍然会跳出中断。
$ {1 V7 A+ u# ]# y, B4 A5 n* w. L' \
具体代码如下:; K4 s$ Y" v8 D6 f$ W# ^4 G( M5 y0 w
% y1 }/ j5 p* c3 ?4 a
        point1(0) = -5
1 m, Q# S8 B9 o; w* a5 w        point1(1) = 310 2 S- l/ S. s6 c/ z. R
        point2(0) = 420 " h/ }7 S0 U9 Y0 x2 i# S" J5 j
        point2(1) = 610 " e% X6 l. s$ `9 M( \; t
       i = 0
$ x+ x& ~/ y5 M+ L        ' Send information about window to current layout
$ M; A+ O* k- }3 n, f" r        ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
$ \) w. H  C  A. I: z        ' Read back window information
% ?0 y  g& ], \% E+ }4 K  w3 F        ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2(). m- @6 M* D0 S1 w8 x
'        ThisDrawing.Plot.DisplayPlotPreview acFullPreview    '全局预览
+ d7 Z; g/ r7 v& d# w  F        ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees
7 }3 }* z2 Z0 e6 G9 ^3 i         ' 将打印份数设置为 1
. {8 v2 E9 J/ B        ThisDrawing.Plot.NumberOfCopies = 1
  I# q7 C5 V' b; {4 g( O# N3 h        ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
1 @3 y6 P0 }/ @6 J$ n5 g. k( j, V        ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit1 @  W$ O# Q. g- f! T& F
        ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True '! {7 U0 N' D5 c; V$ {) j* x
        ThisDrawing.Plot.QuietErrorMode = True
  a# Y/ f( {  M  K; k1 p        ThisDrawing.Regen acActiveViewport
% i! k( G- l2 H8 T+ J         ' 初始化打印
. {  b! V: ^3 I0 k4 K9 n/ G        RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result
- c+ g+ O' M- q! Q3 y, V  x9 X5 V        RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 42 _* q" `0 b# q% D
        RegCloseKey Result5 i# c/ m: _/ z6 T
    6 W) X1 N- @# [
        ThisDrawing.Plot.PlotToFile KHpathmdi1
0 w* p' d" X9 @" R1 T" s; a) q+ U              '判断文件是否存在
" u8 l* y. J. r1 ~2 G  s     Do While Dir(KHpathmdi1) = """ `9 S) [5 l7 n  P
            DoEvents
  ~7 h: U2 [  k' T            i = i + 1
, X% i; L; I+ E, n8 d        Loop
   
0 Q: f0 _$ h$ Q1 ^- H0 e, L    i = 0
+ U) a3 ]1 Y3 M+ ^- y   'On Error Resume Next1 Q9 c6 I+ n7 ~. @; I1 y
    point1(0) = -5 ! C1 I( \( ]: |/ B
    point1(1) = -3 6 A  H) B6 _- q' q% n* X
    point2(0) = 420
; c8 b- M" `; y( y9 H7 b    point2(1) = 297
0 t2 c+ y* w) f& _    ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()0 ^5 n6 Q# X* Q5 Z1 B1 Z, J
    ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
* B; t' M, f( z# Y  k. `    ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees5 @4 {8 W4 `' Z  J1 x4 }, S
'    ThisDrawing.Regen acActiveViewport1 L. m" `; q. S% m
    ThisDrawing.Plot.NumberOfCopies = 1( e. c6 S3 D. i. ~+ f% V
    ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
/ f! K. y4 h! `. s' Q4 ]# d    ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit" k" b7 g$ w! z, d6 Y0 L  Z) Z
    ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True) F0 X0 J" r0 R7 B" a; X$ v% G% n
    ThisDrawing.Plot.QuietErrorMode = True' Z  U& [6 l9 z# g8 S9 g$ [7 h
    ThisDrawing.Regen acActiveViewport& v- s, V! m6 y' d& L
    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result- O* }6 d6 D( W% Q# U
    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
4 Z( a' h+ U- F( p    RegCloseKey Result1 w6 I. b+ N" Z  f$ v+ U
    ThisDrawing.Plot.PlotToFile AZpathmdi1+ ?) g# d' I1 F) D4 z6 k
   Do While Dir(AZpathmdi1) = ""
7 I* a' u( Z# r; d! C/ G2 I        DoEvents
4 Q& M3 R3 ^5 T+ j        i = i + 1% k$ y! G* N, X* \! L) ^
    Loop

! z( G; n9 V* R1 R2 g
1 l( x8 d# Z* ?* y* W" q" x$ g在判断第一次plottofile方法是否完成时,粉色部分循环运行了40多万次;如果在粉色部分后面设置断点,然后再继续运行,则第二次使用plottofile方法调用系统打印机可以完成打印,程序可以正常运行,而为完成此次循环,蓝色部分循环需要运行运行30多万次。这两个循环中任一个都需要耗费150秒左右。
& h6 e) j; I8 X) w$ I6 ]  L$ P* y5 m ( X4 a! A( @( A& v, ^& ?1 l7 o
而原来在AUTOCAD2004中,这两个循环 i 均等于0,也就是系统打印机与VBA程序基本上是同步执行的。; W  W- O7 l* `
& ?- u# J  H3 y, D4 N+ O: y

# K& m( O% ]4 P5 P+ ^) ?为什么会有这个差异?请各位大虾指点,谢谢
 楼主| 发表于 2010-4-28 18:06:18 | 显示全部楼层 来自: 中国浙江杭州
大家没有遇到这种情况吗?怎么都没有人回复阿
 楼主| 发表于 2010-5-1 17:07:56 | 显示全部楼层 来自: 中国浙江杭州
自己顶一下
 楼主| 发表于 2010-5-5 15:02:13 | 显示全部楼层 来自: 中国浙江杭州
问题已经解决& O& U% [6 C6 B6 P7 f2 X" V4 C

! r% K/ U% O$ L- Q解决方法:
0 W' U+ O! S9 B* R# P( S在选项中不勾选后台打印关闭

评分

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

查看全部评分

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

本版积分规则


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

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

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