QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
9天前
查看: 4414|回复: 3
收起左侧

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

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

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

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

x
本帖最后由 157787698 于 2010-4-27 09:17 编辑 ! \8 L; w2 V$ ?+ K5 Y, Z* Y

5 u2 I, p* r! h8 r: }& Y/ U本人写了一段VBA程序用来将CAD图形转化为MDI格式,此CAD图纸也同样是由此程序生成,原来在AUTOCAD2004中可以正常生成图纸并通过plottofile方法转化为MDI格式,但是现在公司统一将CAD升级为2010,这样导致此程序不能使用。8 k8 R# T1 p2 Q) `! d$ y& a- h
, w! B# B% S- H; @5 V
问题出现在使用plottofile方法进行虚拟打印过程。
: ]! o8 K. ?2 W. q! u: F, e6 t* j9 `( j5 m) ~# Q0 R# W# e" W6 ?# h7 a
原来在AUTOCAD2004中,使用plottofile方法完成虚拟打印只需要20秒左右,但是在AUTOCAD2010中,完成统一个动作需要150秒左右,这是不能接受的。而且在程序中如果连续使用两次plottofile方法,则即使对第一次使用plottofile方法生成的文件进行是否存在进行判断,第二次打印时程序仍然会跳出中断。% R; t' M4 {+ |" Y

/ N/ r; g' q6 \* @: R) `6 m具体代码如下:
1 m4 c: V% Y. {$ n2 w& m* `7 j9 b7 Z! }
        point1(0) = -5 5 z, |- [1 C6 D' v* G6 e
        point1(1) = 310 ' h% `& z' J( l9 u. Z( I9 s( Y
        point2(0) = 420
" d; |7 o' V0 N7 l. r8 l1 v+ W        point2(1) = 610
1 v' M) ?$ s# R; C5 I       i = 08 S* n  @; t) G- j; H5 ~  e7 L
        ' Send information about window to current layout
$ A9 w5 P3 j1 ^1 \4 _5 c* j        ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
: P# y; [, F) h, {9 W& f        ' Read back window information5 B% A% W7 N4 o) i8 l8 i' O
        ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()* o: G9 P4 m$ P# F- r, n8 O
'        ThisDrawing.Plot.DisplayPlotPreview acFullPreview    '全局预览5 v. j: y/ _: W* g
        ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees
4 ]# |8 b0 W1 C1 Z& r% \         ' 将打印份数设置为 1& H6 z3 S* _4 C; j
        ThisDrawing.Plot.NumberOfCopies = 1
5 \8 L$ t/ R. u% B        ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
  m: N& W, O3 _- A' P4 j        ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
* L/ L& ~: L' K$ z1 \  I        ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True '
- r) U: V" ]" j9 S" k4 _2 u        ThisDrawing.Plot.QuietErrorMode = True
6 k% d; G$ w$ `5 M* N        ThisDrawing.Regen acActiveViewport
. _$ g/ U1 ]4 f$ }8 B9 x         ' 初始化打印0 D" O2 K2 J5 S' n
        RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result) q' F# u( d* @$ o9 i$ F  E
        RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4
# G: U; Z' q- X1 x" \$ t' u0 V( @        RegCloseKey Result
# |- m$ [4 z; X! Z2 @) Q4 Q   
: |  Y5 Y* E' v% U% E" ~        ThisDrawing.Plot.PlotToFile KHpathmdi1
0 v( T, D+ }9 ~( S  H5 h" Z( Z% h, p$ ^              '判断文件是否存在
- G/ O4 t3 }& G7 j" a8 ^     Do While Dir(KHpathmdi1) = ""
. Q" s# w. @) A& R) W            DoEvents5 ^/ F) ?0 q% n) X+ F
            i = i + 1- {9 ^0 U1 q+ }- X1 A# [) w
        Loop
   
3 Q, G( \" X9 V    i = 0
3 z1 }& g% M9 D3 L0 m( ]0 w# ?   'On Error Resume Next
+ i- Z' z# }0 \1 h* ]$ i3 m    point1(0) = -5 ' }6 P) E; y, x
    point1(1) = -3
  w" |+ l* y$ o6 T$ t* M    point2(0) = 420
' M. E# ^5 a6 K. Z( N. o    point2(1) = 2973 }( g- i+ `2 s7 o+ }+ L) ~! d! C( v
    ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()" B! Y4 Y* M7 ^6 A/ C& v
    ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()
/ C  V( n& ?. @1 K+ G7 y9 @    ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees
3 @7 j3 f) v/ Z$ I6 s  D'    ThisDrawing.Regen acActiveViewport
& V; J' W. V! F+ e0 d! Y    ThisDrawing.Plot.NumberOfCopies = 1
* U& B% M4 I6 w& w4 V    ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow/ x/ R( N2 t7 i2 u; L
    ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit, a5 k% W5 f$ m: l8 a5 [% o
    ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True3 O, j8 |8 v: n6 ]) T  K4 ^( P' g
    ThisDrawing.Plot.QuietErrorMode = True
' y  c( i% G5 K% |, ?) @    ThisDrawing.Regen acActiveViewport/ M" @* P  l# Q. y$ c+ N
    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result
1 n* [( X0 X7 Z    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 45 t) o: y7 T. Y: f: D( e% U
    RegCloseKey Result$ K- c& g! E! w2 U" A( e
    ThisDrawing.Plot.PlotToFile AZpathmdi1. J( ?5 F& e: f2 }
   Do While Dir(AZpathmdi1) = ""7 m; E4 J; {1 h+ G5 r
        DoEvents
0 [; T0 _# u& ^        i = i + 13 [( Q9 @6 F, _# _, M. v
    Loop

" Q. F2 J  v' x7 l 3 s- Z& {4 w! n. _) ^
在判断第一次plottofile方法是否完成时,粉色部分循环运行了40多万次;如果在粉色部分后面设置断点,然后再继续运行,则第二次使用plottofile方法调用系统打印机可以完成打印,程序可以正常运行,而为完成此次循环,蓝色部分循环需要运行运行30多万次。这两个循环中任一个都需要耗费150秒左右。
" d- @: z0 _" {5 D * k6 ]7 N: ?/ i) x: Z; v
而原来在AUTOCAD2004中,这两个循环 i 均等于0,也就是系统打印机与VBA程序基本上是同步执行的。2 G; b% j: s) l, x/ k' X

5 C/ ]  a3 E2 z) d3 \% c 7 a0 C2 e  m! n+ Y% L/ Z6 Z+ a
为什么会有这个差异?请各位大虾指点,谢谢
 楼主| 发表于 2010-4-28 18:06:18 | 显示全部楼层 来自: 中国浙江杭州
大家没有遇到这种情况吗?怎么都没有人回复阿
 楼主| 发表于 2010-5-1 17:07:56 | 显示全部楼层 来自: 中国浙江杭州
自己顶一下
 楼主| 发表于 2010-5-5 15:02:13 | 显示全部楼层 来自: 中国浙江杭州
问题已经解决' A6 N" f  p) |) y

! m2 D* C+ Q  ?* C解决方法:- C  M" J4 n5 _6 L+ K
在选项中不勾选后台打印关闭

评分

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

查看全部评分

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

本版积分规则

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

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

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