|
|
发表于 2020-1-30 09:03:11
|
显示全部楼层
来自: 中国北京
本帖最后由 woaishuijia 于 2020-1-31 04:24 编辑 % C4 p8 Y, Y6 x/ q
}; n0 `; s0 b, R结合你另外一个帖子“”,我好像明白你的意思了。9 M# X7 G- Q' A, B+ q9 L* [8 c1 S
那个帖子里的Print #语句后面的文件号用的是1,这是有问题的。按照VB的语法规则,这个文件号是一个1~511的正整数,应该是由电脑自动生成。你这个直接使用1的情况,除非电脑只打开了一个文档,否则文件号1被其它文档占用,就出错了。只能先手动创建文档,再执行程序,我在那个帖子里的回复就是这样子的(那个回复为了简短,没有讨论编程技巧),为了保证程序顺利运行,要求先创建文档。
# d0 x1 _/ D0 R0 I* |把那个主程序和子程序的代码改一下
" I1 b5 C# }8 S4 e/ A) L- Dim FileNumber As Integer- Y: j3 p; S$ w
- + Y0 ^9 u J U) ^" [: p8 ^
- Sub A()3 o0 Q: Z, R( m1 Y& P6 m
- FileNumber = FreeFile()0 A8 c' ?: X' B/ H
- Open "c:\1.dxf" For Output As #FileNumber
2 R3 e' M; f8 r) `& [ K; u - Print #FileNumber, 0
% @- t/ n5 [* e0 F* ^: A - Print #FileNumber, "SECTION"7 l* X& l- y! v2 H
- Print #FileNumber, 23 h* b. [2 M3 n) a
- Print #FileNumber, "ENTITIES"
1 b: K' x- B& n6 | - Print #FileNumber, 05 S' P. Q. l1 o& L% U
- DxfLine 0, 0, 100, 100, 1, "Continuous"
, t/ b. }; O/ N0 @. E( ~& J8 u9 w - Print #FileNumber, "ENDSEC"$ f4 N F) k9 Q/ V7 Q* D( k
- Print #FileNumber, 0
3 R# K4 u3 P! j; M - Print #FileNumber, "EOF"$ I3 C7 c. A/ N& e( @ D
- Close #FileNumber/ Y) X3 O3 P0 f# }" i
- End Sub
7 x" e3 i, q4 ~- [& p n - 8 E, E) g9 V3 G7 D( Y# }9 W) T# b
- Sub DxfLine(xs#, ys#, xe#, ye#, cl%, Optional Typ$)
2 f4 O7 D8 R' {1 j2 v- ]9 r - Print #FileNumber, "LINE"
# d" Z: P! G3 v C3 K' s - Print #FileNumber, 8) R& @; g$ {3 X3 u; `6 Z! C+ v
- Print #FileNumber, "0"
$ K% \% ^! v3 S) B; |0 g - If Typ <> "" Then
9 M" M/ [% a# i6 | - Print #FileNumber, 6! G! Z; C. I- }
- Print #FileNumber, Typ' `" V5 J2 i8 j6 k0 l9 o* d+ }
- End If7 \# C: q& u; ^, [& V
- Print #FileNumber, 62' x% W) f: |0 M9 R7 W1 d- J
- Print #FileNumber, cl
9 n( ~+ ]0 g" ~/ T - Print #FileNumber, 108 E; x% f# O( C! w" ]4 e' j
- Print #FileNumber, xs' x: B& {" x* f1 E: I
- Print #FileNumber, 20
4 @- G" Q/ F' Q' S6 z+ x) p; ~5 k - Print #FileNumber, ys# d7 W* b1 i/ `1 ]
- Print #FileNumber, 30! Z3 K5 b$ s9 `* d
- Print #FileNumber, 0#
& D0 k/ r, v/ ?7 u( w3 W - Print #FileNumber, 11
- U9 F) I1 W8 g - Print #FileNumber, xe
$ l( M& z* I% W, J - Print #FileNumber, 21( t5 u# S) J$ [ M) x! R
- Print #FileNumber, ye% O7 I$ ?& s U7 w, i
- Print #FileNumber, 31
! Z W; b- m+ B - Print #FileNumber, 0## S; N9 o' t _+ y
- Print #FileNumber, 0 w1 ] C9 v6 Y& T
- End Sub
4 S0 v1 J3 h9 C& w, _7 n" R" i
复制代码 代码中第一行是在通用声明区声明一个名为 FileNumber 的整型全局变量,用于保存文件号
; D- n; \/ W3 O( h/ f5 @7 f( J$ x7 w第四行用 FreeFile 函数获得可用的文件号,后面的代码都使用这个文件号,包括子程序中的Print #语句,这也是使用全局变量的原因1 W, Y; G9 ~3 m2 `
第十八行,子程序的参数中的前四个都使用了显式类型声明字符“#”,表明这是Double 数据类型;第六个参数使用了Optional 关键字,表明这后面的参数是可选的:在调用子程序时,如果线形是“BYLAYER”,则不必带这个参数。如果不用这个关键字,在调用子程序时,就必须有这个参数,尽管它可能是空字符串。
) ?* P5 G, n8 h# {3 \% b+ H5 C+ N8 t第二十、二十三、二十六、二十八、三十、三十二、三十四、三十六、三十八和四十行,都去掉了双引号和空格,这里没必要使用字符串类型,用整型就可以3 e- |7 p7 k9 g O
第二十二、二十四行去掉了变量后面的显式类型声明字符“$”,没必要(已经在在第十八行的参数列表中声明了)。同理,第二十七行去掉了双引号及其内部空格及逗号,去掉了变量后面的显式类型声明字符“%”,没必要/ m6 f- b) F. f0 j- B
第三十三、三十九行把"0.00"改成了0#
" I L7 S6 T& O' l1 I8 o+ i, f: e) j去掉了原子程序中的- Label:* e: o# r2 T4 F
- Exit Sub
复制代码 |
评分
-
查看全部评分
|