|
|
发表于 2020-1-30 09:03:11
|
显示全部楼层
来自: 中国北京
本帖最后由 woaishuijia 于 2020-1-31 04:24 编辑
/ v+ f3 ?& C( M2 f
4 P; A2 t% X" k- B: B结合你另外一个帖子“”,我好像明白你的意思了。
0 q" |( o) j& r5 n# ^那个帖子里的Print #语句后面的文件号用的是1,这是有问题的。按照VB的语法规则,这个文件号是一个1~511的正整数,应该是由电脑自动生成。你这个直接使用1的情况,除非电脑只打开了一个文档,否则文件号1被其它文档占用,就出错了。只能先手动创建文档,再执行程序,我在那个帖子里的回复就是这样子的(那个回复为了简短,没有讨论编程技巧),为了保证程序顺利运行,要求先创建文档。# `6 E% a9 F7 D; C
把那个主程序和子程序的代码改一下' v9 F3 L" u$ x7 v
- Dim FileNumber As Integer8 U& S3 V$ @! T" e a/ G
2 @1 I2 h, m6 B: P& _, K/ {% m4 e; [- Sub A()
: \. k' O: L. n/ o' \' h5 E - FileNumber = FreeFile()
7 \7 v) d3 ? Y# h5 f( T - Open "c:\1.dxf" For Output As #FileNumber
7 n( w. |% X. c - Print #FileNumber, 0
# r/ e, G5 U2 |& v+ ~2 F* Q - Print #FileNumber, "SECTION"
* {+ u$ i% R5 L, } - Print #FileNumber, 2; y7 t$ D/ r' v, m+ L1 E% n# r
- Print #FileNumber, "ENTITIES"
8 F5 n# W! d% T) x* [ - Print #FileNumber, 05 _. P7 k1 {" U- v2 b8 e
- DxfLine 0, 0, 100, 100, 1, "Continuous"
5 }: }$ b/ V, i8 M- r4 F* Z V7 S - Print #FileNumber, "ENDSEC") _/ u8 K2 P- W9 |- W. }
- Print #FileNumber, 0% [7 O" ?9 I! [, \$ p" m: M
- Print #FileNumber, "EOF"- j: g1 P4 y; W) P! [
- Close #FileNumber7 A0 T! \; t/ O- p" k E
- End Sub. ~ z1 p4 c2 o9 p6 `
% c$ r, E/ ?+ F& }+ S" F- Sub DxfLine(xs#, ys#, xe#, ye#, cl%, Optional Typ$)
- g' B1 r- x( }: y7 [0 s- W* @ - Print #FileNumber, "LINE"
6 }8 c2 ` r4 ^2 E3 M - Print #FileNumber, 8
3 F) a, }# f; f Y+ d9 j - Print #FileNumber, "0"' I& R( \+ N% ?8 Q9 o% Q! i
- If Typ <> "" Then4 w3 x" ^( e# ~. G
- Print #FileNumber, 6& q4 \. H1 g2 j; b" s- l
- Print #FileNumber, Typ
a, V7 Q- |4 J - End If3 @2 h$ ]& h9 D% d
- Print #FileNumber, 623 @$ }) V; E2 l1 F+ S) `0 O/ k
- Print #FileNumber, cl/ {; s4 ^, g: s B. C
- Print #FileNumber, 10
2 i Z0 h- M2 s$ P4 n - Print #FileNumber, xs
5 x% L( G+ l+ [8 M. W - Print #FileNumber, 20
% n: U, o& f9 x! j- `, T - Print #FileNumber, ys* I) m D% \; n+ ^# ^% f
- Print #FileNumber, 30
( u' ?, J2 T- D2 ~4 w - Print #FileNumber, 0#
1 D% b6 ?4 L( j& L - Print #FileNumber, 11
- o' }. a1 e. ]1 J( Q6 c - Print #FileNumber, xe
: X5 I: ^- j" t2 T5 C - Print #FileNumber, 21
, P, `2 V& b/ j6 N( I! D2 n - Print #FileNumber, ye
/ T5 H/ e- W( {) f. U; f) q - Print #FileNumber, 31; X, n% ~* N* b) ?' [9 O+ ]8 ~
- Print #FileNumber, 0#. j/ }1 w$ U; `; F/ O; {
- Print #FileNumber, 0" l* a' e, N7 i! z
- End Sub" i/ U9 j' R( y
复制代码 代码中第一行是在通用声明区声明一个名为 FileNumber 的整型全局变量,用于保存文件号8 _* ~. U3 j1 X6 X% k
第四行用 FreeFile 函数获得可用的文件号,后面的代码都使用这个文件号,包括子程序中的Print #语句,这也是使用全局变量的原因
3 n+ k" |3 H6 M, W; H( e4 j: [& b第十八行,子程序的参数中的前四个都使用了显式类型声明字符“#”,表明这是Double 数据类型;第六个参数使用了Optional 关键字,表明这后面的参数是可选的:在调用子程序时,如果线形是“BYLAYER”,则不必带这个参数。如果不用这个关键字,在调用子程序时,就必须有这个参数,尽管它可能是空字符串。
t4 e* j) l; E. z( |8 t第二十、二十三、二十六、二十八、三十、三十二、三十四、三十六、三十八和四十行,都去掉了双引号和空格,这里没必要使用字符串类型,用整型就可以
6 V" j" H3 h ~0 p第二十二、二十四行去掉了变量后面的显式类型声明字符“$”,没必要(已经在在第十八行的参数列表中声明了)。同理,第二十七行去掉了双引号及其内部空格及逗号,去掉了变量后面的显式类型声明字符“%”,没必要" X: c+ X8 u4 O+ c2 u
第三十三、三十九行把"0.00"改成了0# o" E( Q% i$ E B/ T
去掉了原子程序中的- Label:
* C+ j$ l1 w/ J4 ~ - Exit Sub
复制代码 |
评分
-
查看全部评分
|