QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

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

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

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

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

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

x
本帖最后由 157787698 于 2010-4-27 09:17 编辑 0 i% p8 j" b" L9 d' z. K3 N

/ d, {2 W2 A- s. X, E7 z& @8 y本人写了一段VBA程序用来将CAD图形转化为MDI格式,此CAD图纸也同样是由此程序生成,原来在AUTOCAD2004中可以正常生成图纸并通过plottofile方法转化为MDI格式,但是现在公司统一将CAD升级为2010,这样导致此程序不能使用。6 |3 ~0 m5 ~$ e  F# s  C# ^5 k, N

' k1 z" C( l: L$ s% X问题出现在使用plottofile方法进行虚拟打印过程。- P# M8 Q+ n5 L! R9 n
' z8 a# m6 A$ @
原来在AUTOCAD2004中,使用plottofile方法完成虚拟打印只需要20秒左右,但是在AUTOCAD2010中,完成统一个动作需要150秒左右,这是不能接受的。而且在程序中如果连续使用两次plottofile方法,则即使对第一次使用plottofile方法生成的文件进行是否存在进行判断,第二次打印时程序仍然会跳出中断。. P  W, @+ E. k* q4 U' S$ d% \

, w% i6 h: ?& T8 n0 H) v/ B具体代码如下:) }( M! R0 r# e9 m' \! F

6 S* t; D' J6 w5 V/ d0 E- ]" j  N6 o        point1(0) = -5 6 _- a: Y# I- m: g; n2 B+ s& p& S
        point1(1) = 310
# e9 U) W" G5 t% Z8 I) @. z8 L0 W        point2(0) = 420
/ b+ j3 D6 }4 C6 R6 X, M        point2(1) = 610
  [  |0 }! N0 l" L: G% G# N% {, z       i = 0
7 d  O5 d. \0 Q% Q        ' Send information about window to current layout8 y% r! S5 V1 K5 H% B7 m
        ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()5 ?. b& m- g$ x( \
        ' Read back window information
2 j! k+ ]& |) N1 k& e3 b1 K        ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2()' }5 o8 N3 ~7 ?
'        ThisDrawing.Plot.DisplayPlotPreview acFullPreview    '全局预览
' \6 Q; F% a1 g& L: f3 r$ V        ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees" R* Z# S" G" c
         ' 将打印份数设置为 1
3 k6 L; ~) I: V( E0 _7 w- z        ThisDrawing.Plot.NumberOfCopies = 1
$ r% v% Y7 _  z; f        ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
! Q+ t- m# K9 W) z        ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit1 H) K. n3 j+ u* F/ R4 [9 f
        ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True '9 U/ |/ t7 q/ X1 M( A; q
        ThisDrawing.Plot.QuietErrorMode = True7 f8 U7 e4 a% z1 Z, [) p' J
        ThisDrawing.Regen acActiveViewport) }  E3 S5 ?2 e! |- y; E$ z3 z5 |
         ' 初始化打印
2 e+ c7 J/ O2 P$ a" L2 b        RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result
  @$ v) X  h9 ]. _  T        RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4. D: ]7 i/ I: g$ l
        RegCloseKey Result$ _2 F2 Y% T- |7 K8 L6 D/ C( R
    4 @# J% H+ }& J' }$ e
        ThisDrawing.Plot.PlotToFile KHpathmdi1! P2 w  s. T: F/ m  ^' \
              '判断文件是否存在2 q# @  I0 _: o# D' }* X. W3 W% f
     Do While Dir(KHpathmdi1) = ""
1 G! c6 U7 M; q, o6 v- f            DoEvents# A) H% V# X# |# @( F
            i = i + 1' v; Q8 t: W+ V% V) _- V  Y
        Loop
    9 T. T( f+ p4 C  I" m
    i = 0, S  }- r( Y  `2 }
   'On Error Resume Next
) n% K' l) i7 n; f    point1(0) = -5 $ M' D& K+ ?& |; A
    point1(1) = -3
( {0 P% T. J% i5 e" ^    point2(0) = 420
; e4 F2 m9 L" q    point2(1) = 297
5 U2 M- X/ Q* x: B  h  \    ThisDrawing.ActiveLayout.SetWindowToPlot point1(), point2()
" W8 G! i" I1 G/ V7 ^( X7 \* Q    ThisDrawing.ActiveLayout.GetWindowToPlot point1(), point2(), z- G5 o1 B' X
    ThisDrawing.ModelSpace.LAYOUT.PlotRotation = ac0degrees
5 c, [9 t$ _6 J9 C'    ThisDrawing.Regen acActiveViewport
4 H) G0 U- ~8 `) n+ B    ThisDrawing.Plot.NumberOfCopies = 1+ `0 t! _' I9 m- _9 X
    ThisDrawing.ModelSpace.LAYOUT.PlotType = acWindow
# v& s) J" F7 }3 z9 m3 T    ThisDrawing.ModelSpace.LAYOUT.StandardScale = acVpScaleToFit
/ ^) Z$ n' @: @, G- c6 r* \! a    ThisDrawing.ModelSpace.LAYOUT.CenterPlot = True& D. b$ E# @' ^: J3 L! l* J/ b
    ThisDrawing.Plot.QuietErrorMode = True
! `4 Q; T/ u5 n/ L; o. m    ThisDrawing.Regen acActiveViewport) f( ]' u2 `7 C
    RegOpenKeyEx HKEY_CURRENT_USER, regpath, 0, KEY_ALL_ACCESS, Result, A3 L8 A* t; N- o: p
    RegSetValueEx Result, "OpenInMODI", 0, reg_dword, 0, 4$ p# u/ T7 j8 a3 K) P( Q
    RegCloseKey Result6 T% Q, ^6 V# n& p3 I7 {5 b
    ThisDrawing.Plot.PlotToFile AZpathmdi17 w- C/ w; k. y% P; ?& ~- h) E/ ]
   Do While Dir(AZpathmdi1) = ""5 [& [3 l; H2 ?9 Y3 f& u: p
        DoEvents5 A# [$ j  d* t0 T( c% m
        i = i + 1
: s1 D7 S9 @$ l& B    Loop
% G6 A' e/ p9 T9 d
; @( K) T5 _2 a: ~
在判断第一次plottofile方法是否完成时,粉色部分循环运行了40多万次;如果在粉色部分后面设置断点,然后再继续运行,则第二次使用plottofile方法调用系统打印机可以完成打印,程序可以正常运行,而为完成此次循环,蓝色部分循环需要运行运行30多万次。这两个循环中任一个都需要耗费150秒左右。; b" f# f& N6 m+ o

% {& S+ ^* ^2 {! {8 z, {而原来在AUTOCAD2004中,这两个循环 i 均等于0,也就是系统打印机与VBA程序基本上是同步执行的。8 d9 A! p: b3 ?- E9 O6 g

; @' }2 i$ t0 T6 i( L/ b! p/ f
9 X$ i/ J8 _4 \* T- [* v, \9 ]为什么会有这个差异?请各位大虾指点,谢谢
 楼主| 发表于 2010-4-28 18:06:18 | 显示全部楼层 来自: 中国浙江杭州
大家没有遇到这种情况吗?怎么都没有人回复阿
 楼主| 发表于 2010-5-1 17:07:56 | 显示全部楼层 来自: 中国浙江杭州
自己顶一下
 楼主| 发表于 2010-5-5 15:02:13 | 显示全部楼层 来自: 中国浙江杭州
问题已经解决
/ c; T- O" L( Q9 X( ]1 h
, \2 }2 v9 L- T  Z, F8 {4 _5 V解决方法:
7 _& _0 e. H" P& P) }6 q% O在选项中不勾选后台打印关闭

评分

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

查看全部评分

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

本版积分规则

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

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

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