QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 157787698 于 2010-4-27 09:17 编辑
6 h$ W6 f! }# w8 M8 z8 @2 u$ p& z1 `& S1 m2 E7 e* G5 t& Y0 X9 ]
本人写了一段VBA程序用来将CAD图形转化为MDI格式,此CAD图纸也同样是由此程序生成,原来在AUTOCAD2004中可以正常生成图纸并通过plottofile方法转化为MDI格式,但是现在公司统一将CAD升级为2010,这样导致此程序不能使用。: ^1 f- Y8 a4 I! }
  N6 C+ S* `. V+ M' A
问题出现在使用plottofile方法进行虚拟打印过程。" j0 E- u0 Q" w  e6 M! a( _. l9 \1 n

. t* M0 ?+ d& f3 R$ Y, s+ K% d8 O原来在AUTOCAD2004中,使用plottofile方法完成虚拟打印只需要20秒左右,但是在AUTOCAD2010中,完成统一个动作需要150秒左右,这是不能接受的。而且在程序中如果连续使用两次plottofile方法,则即使对第一次使用plottofile方法生成的文件进行是否存在进行判断,第二次打印时程序仍然会跳出中断。
/ `1 n, U$ \" I$ ~& \9 [# @
% v. u) x& _4 `具体代码如下:8 z2 x; r5 q5 D; [1 `

( C7 }6 ^3 Z. J4 c" K; {8 ?( _        point1(0) = -5
! G' O% R  b* ^) \& ~        point1(1) = 310 - Q. k: f9 Y) o6 v- Z- x
        point2(0) = 420
6 N0 `5 `3 s# Q        point2(1) = 610
1 X3 b# E* X8 _5 f+ j+ |9 V% c       i = 0
1 k) Q6 M2 w/ P        ' Send information about window to current layout
. O# c. X0 Y( z( V3 K+ j5 L4 S8 t        ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
* y$ C/ v0 I. _" ]        ' Read back window information
  r# J8 D+ w2 S* W4 W8 D        ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()! x$ B4 K% d7 Z& Z( ?4 C1 L
'        ThisDrawing.Plot.DisplayPlotPreview acFullPreview    '全局预览1 p5 T* P- V, S! \0 I) u7 B
        ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees# S" o* @5 ]. s+ h' N$ P
         ' 将打印份数设置为 1
( y" ]9 I  p9 ?- c' x        ThisDrawing.Plot.NumberOfCopies = 1
' d% f  @- V4 N- o( |% a2 ?        ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
: s- _2 j% y4 n# m: W8 Q        ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
0 y6 ^. E( b; H+ r* l& b* I+ K        ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True '- W  \  G3 Q, \' o3 K
        ThisDrawing.Plot.QuietErrorMode = True( T6 Z# g  _1 ^- z
        ThisDrawing.Regen acActiveViewport% \/ A5 a, m! M. z
         ' 初始化打印6 M+ `' L1 @+ R+ _% z  B' l1 D
        RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result: p) V- `! v: U2 j! W
        RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
8 w5 a  v3 Q9 f) d' A6 J: ~4 n        RegCloseKey Result
( F3 t4 \0 q' |$ C! Q8 g   
+ M* t) I# Z9 f        ThisDrawing.Plot.PlotToFile KHpathmdi1
5 j& ?. z0 v9 N8 ~0 O) m              '判断文件是否存在9 B3 A" p8 R' I  H
     Do While Dir(KHpathmdi1) = ""# M5 G6 d$ W8 r9 h+ W4 @- O
            DoEvents
5 h! U/ y4 p3 y. I( I            i = i + 1
( r) L9 p1 T0 V" \        Loop
   
. U8 l  r4 q3 ]% c    i = 0  M4 t7 X0 K$ X9 N4 q
   'On Error Resume Next4 U% y* E( s: C# R4 x+ n" B3 q
    point1(0) = -5
6 t7 r4 S9 L. \, S( i: T# K
    point1(1) = -3
, O$ J5 d; k( E1 J: j/ q    point2(0) = 420
% H: Z; H1 `' N/ w- N    point2(1) = 297
/ Y; o1 s0 K; e/ F8 y/ i: F- \    ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2(); ~0 ~: V- O8 d* ~& p
    ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()6 P+ x& {! l0 ]% M
    ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees
, d' \1 m. d7 h: _'    ThisDrawing.Regen acActiveViewport. x. r7 i2 Z5 O" a
    ThisDrawing.Plot.NumberOfCopies = 1
3 W4 ~2 u/ _! J" h    ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
: t0 V3 q4 u, g    ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
+ A, c! T: D9 p* m! Z4 m; D) t( T/ J    ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True: S3 x! V! B3 c  d' A
    ThisDrawing.Plot.QuietErrorMode = True
6 ?3 @) \5 O! Y9 L! Q: G9 ?+ S    ThisDrawing.Regen acActiveViewport
/ X, _0 q4 X1 k+ y8 s    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result
' _/ S( `, u( w% ~3 Q% v# R6 i    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
( k/ C7 v& s" Q# ^" v; b    RegCloseKey Result
. w2 ]4 O1 `/ J% q) q    ThisDrawing.Plot.PlotToFile AZpathmdi1
- n, k, R9 p, K! b, D5 ~% y6 ]7 U; b, G    Do While Dir(AZpathmdi1) = ""
( F; C8 o: Z, H- {        DoEvents
7 G' @5 S# @/ A# b$ N( r; i        i = i + 10 `3 H$ R' ]1 ?& E" `( F
    Loop

3 o0 H. `2 Y; C0 N" G2 M6 `+ M/ z
  A) {5 K% ^; q% v$ d在判断第一次plottofile方法是否完成时,粉色部分循环运行了40多万次;如果在粉色部分后面设置断点,然后再继续运行,则第二次使用plottofile方法调用系统打印机可以完成打印,程序可以正常运行,而为完成此次循环,蓝色部分循环需要运行运行30多万次。这两个循环中任一个都需要耗费150秒左右。
$ F! X$ l/ r$ n* \ ' i6 s# G: e* N+ A
而原来在AUTOCAD2004中,这两个循环 i 均等于0,也就是系统打印机与VBA程序基本上是同步执行的。+ l2 O  I/ S. Q' [9 H& P

, j  d. I7 z7 V8 R , u% V2 ?2 Q* a
为什么会有这个差异?请各位大虾指点,谢谢
 楼主| 发表于 2010-4-28 18:06:18 | 显示全部楼层 来自: 中国浙江杭州
大家没有遇到这种情况吗?怎么都没有人回复阿
 楼主| 发表于 2010-5-1 17:07:56 | 显示全部楼层 来自: 中国浙江杭州
自己顶一下
 楼主| 发表于 2010-5-5 15:02:13 | 显示全部楼层 来自: 中国浙江杭州
问题已经解决
( c& b) ^6 Y: m9 _, R4 s8 f) u$ q2 k
解决方法:: Y1 y3 n- {/ P% |1 l! m
在选项中不勾选后台打印关闭

评分

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

查看全部评分

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

本版积分规则


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

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

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