|
|
发表于 2020-1-30 09:03:11
|
显示全部楼层
来自: 中国北京
本帖最后由 woaishuijia 于 2020-1-31 04:24 编辑 # s1 w n+ u/ e) Y
& X1 N) }( M, g# c
结合你另外一个帖子“”,我好像明白你的意思了。2 w( m, f; P# e P
那个帖子里的Print #语句后面的文件号用的是1,这是有问题的。按照VB的语法规则,这个文件号是一个1~511的正整数,应该是由电脑自动生成。你这个直接使用1的情况,除非电脑只打开了一个文档,否则文件号1被其它文档占用,就出错了。只能先手动创建文档,再执行程序,我在那个帖子里的回复就是这样子的(那个回复为了简短,没有讨论编程技巧),为了保证程序顺利运行,要求先创建文档。
: x$ P9 L+ W8 X: K- S8 i把那个主程序和子程序的代码改一下
" s, C1 M6 P+ D- Dim FileNumber As Integer, r" d0 b! n1 V5 e% f. g- J+ y
" T0 h+ f4 D, {( z7 q; J9 U- Sub A()$ J' O) v H8 E; g6 v6 n& `% ]7 l5 Z
- FileNumber = FreeFile()
h/ ~0 U9 Z# _- {. @9 @# R - Open "c:\1.dxf" For Output As #FileNumber- A5 G7 F5 F" Y- ^4 H7 m
- Print #FileNumber, 0
9 ~4 F% ` c* w9 E4 V' ? - Print #FileNumber, "SECTION"
) a9 t6 T0 u3 J - Print #FileNumber, 2
; g- T7 _" f# V w% s, N# J - Print #FileNumber, "ENTITIES"# {$ M! @9 u5 n! m6 m
- Print #FileNumber, 0
) R2 D4 J$ O! B1 X - DxfLine 0, 0, 100, 100, 1, "Continuous"" | d, c* ^8 @5 {% z
- Print #FileNumber, "ENDSEC"
7 _2 t% g1 L# m: j - Print #FileNumber, 08 S7 B+ _ K( a, \9 w
- Print #FileNumber, "EOF"
9 M6 m. y( c y4 f4 z" L - Close #FileNumber1 p! G2 h" S4 t+ }/ g
- End Sub
- ]5 ~) `/ V, r9 Z7 y6 [2 G1 R
2 N% r( S4 b8 X; X8 f2 L) f- Sub DxfLine(xs#, ys#, xe#, ye#, cl%, Optional Typ$)9 ^4 C0 @, @' s r. h' N: {; s
- Print #FileNumber, "LINE"
; w4 T) j7 K4 j5 q4 M; Q - Print #FileNumber, 8
" l- R. V; ~5 k2 R0 J! X - Print #FileNumber, "0"
& L9 J; M9 ?) M9 l4 ^ - If Typ <> "" Then: U1 E6 z2 a+ o
- Print #FileNumber, 6+ m" u6 c/ r, I- h
- Print #FileNumber, Typ5 C, N# d% X4 F2 B
- End If5 p; I" H0 x$ r1 ?
- Print #FileNumber, 62
+ d/ @$ I& j5 q3 D, F - Print #FileNumber, cl9 f5 N. n# Q o* P2 n% N. v
- Print #FileNumber, 10
0 B" D, `; c+ ?1 _3 L2 m9 E# A - Print #FileNumber, xs
5 W9 h! j# |3 D# T - Print #FileNumber, 203 l7 F5 i5 a" }7 j* r9 u
- Print #FileNumber, ys
: Z- Q, {0 c# ~& Q7 ` - Print #FileNumber, 30
& B1 c' _( r5 p. n - Print #FileNumber, 0#+ g% Q, A! T3 d/ a* P) F$ n
- Print #FileNumber, 117 C: M1 {2 W6 q
- Print #FileNumber, xe
3 W: t6 ^4 D$ P' d8 A8 e - Print #FileNumber, 21
5 g. D, j6 U5 N$ {! \7 `8 H: g: \ - Print #FileNumber, ye8 L/ a/ J% T: m5 ?# Q
- Print #FileNumber, 319 P/ T+ N# W4 X) t
- Print #FileNumber, 0#: N% E1 o' ?3 V3 T
- Print #FileNumber, 0
$ n2 w7 a: |7 O& c1 P' l5 D - End Sub
, ^# _: O. W7 J! ?/ G4 z
复制代码 代码中第一行是在通用声明区声明一个名为 FileNumber 的整型全局变量,用于保存文件号1 U4 ] H- ]1 v5 x: D
第四行用 FreeFile 函数获得可用的文件号,后面的代码都使用这个文件号,包括子程序中的Print #语句,这也是使用全局变量的原因
7 n2 M& q( S, G第十八行,子程序的参数中的前四个都使用了显式类型声明字符“#”,表明这是Double 数据类型;第六个参数使用了Optional 关键字,表明这后面的参数是可选的:在调用子程序时,如果线形是“BYLAYER”,则不必带这个参数。如果不用这个关键字,在调用子程序时,就必须有这个参数,尽管它可能是空字符串。3 |0 y8 z$ e/ h* L$ B2 B9 B
第二十、二十三、二十六、二十八、三十、三十二、三十四、三十六、三十八和四十行,都去掉了双引号和空格,这里没必要使用字符串类型,用整型就可以2 M3 S% Y8 G+ O
第二十二、二十四行去掉了变量后面的显式类型声明字符“$”,没必要(已经在在第十八行的参数列表中声明了)。同理,第二十七行去掉了双引号及其内部空格及逗号,去掉了变量后面的显式类型声明字符“%”,没必要" \9 Z! j0 `* i" H4 G$ Y( i9 w
第三十三、三十九行把"0.00"改成了0#
& H4 F" V( h* G7 C6 i4 l7 T: h去掉了原子程序中的- Label:
1 h' e( [) O1 {: o; j - Exit Sub
复制代码 |
评分
-
查看全部评分
|