第一课:入门
1.为什么要写这个教程
市面上ACAD VBA 的书不多,它的帮助是英文版的,很多人看不懂。其实我转行已经好几年了,而且手艺也
慢慢生疏了,写个教程对自己来说也是一次复习。
2.什么是Autocad VBA
VBA Visual Basic for Applications 的英文缩写,它是一个功能强大的开发工具,学好VBA 可以成倍
甚至成百、成万倍提高工作效率,在工作中,有很多任务仅用ACAD 命令不可能完成的,只要学好VBA 就可
以做到,相信到时候您一定会得到同事的佩服、老板的器重。
3VBA 有多难?
相信大家都知道Basic 是的含义。应该承认,我的水平还不高,错误之处在所难免,如果大家发现错误一
定要提出批评,以便及时更正。
4、怎样学习VBA
介绍大家一个学习公式:信心+恒心=开心。仔细阅读本教程,完成例题,在学习的过程中一定要多思考,
多想一些是什么、为什么。本教程将陆续发布在CAD 世界论坛上,您不需要付费就可以学习。本作者在此
郑重承诺:关于本教程中有任何疑问,可以跟贴提问,只要有时间,本人一定会耐心解答。我不会发到任
何人的邮箱中,您自己在论坛上就可以了,请不要再向我索要这份教程。
5、现在我们开始编写第一个程序:画一百个同心圆
第一步:复制下面的红代码
第二步:在模型空间按快捷键Alt+F8,出现宏窗口
第三步:在宏名称中填写C100,点“创建”、“确定”
第四步:在Sub c100()End Sub 之间粘贴代码
第五步:回到模型空间,再次按Alt+F8,点击“运行”
Sub c100()
Dim cc(0 To 2) As Double '声明坐标变量
cc(0) = 1000 '定义圆心座标
cc(1) = 1000
cc(2) = 0
For i = 1 To 1000 Step 10 '开始循环
Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆
Next i
End Sub
也许您还看不懂上面的代码,这没有关系,只要能把同心画出来就可以了,祝您成功。
第二课编程基础
本课主要任务是对上一课的例程进行详细分析
下面是源码:
Sub c100()
Dim cc(0 To 2) As Double '声明坐标变量
cc(0) = 1000 '定义圆心座标
cc(1) = 1000
cc(2) = 0
For i = 1 To 1000 Step 10 '开始循环
Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10) '画圆
vba编程免费教程Next i
End Sub
先看第一行和最后一行:
Sub C100()
……
End Sub
C100 是宏的名称,也叫过程名称,当用户执行C100 时程序将运行sub end sub 之间的所有指令。
第二行:
Dim cc(0 To 2) As Double '声明坐标变量
后半段“'声明坐标变量”自动变为绿字体,它是代码语句的注释,它不会影响程序运行,它的作用是告
诉阅读者程序员的想法。对于简单的程序,一般不需要写注释,如果要编写非常复杂的程序,最好要多加
注释,越详细越好,对于程序员来说,这是一个好习惯。
电脑真正编译执行的是这条语句:Dim cc(0 To 2) As Double
它的作用就是声明变量。
Dim 是一条语句,可以理解为计算机指令。
它的语法:Dim 变量名As 数据类型
本例中变量名为CC,而括号中的0 to 2 声明这个CC 是一个数组,这个数组有三个元素:CC(0)CC(1)
CC(2),如果改为CC(1 to 3),则三个元素是CC(1)CC(2)CC(3),有了这个数组,就可以把坐标数值放
到这个变量之中。
Double 是数据类型中的一种。ACAD 中一般需要定义坐标时就用这个数据类型。在ACAD 中数据类型的有很
多,下面两个是比较常用的数据类型,初学者要有所理解。
Long(长整型),其范围从-2,147,483,648 2,147,483,647
Variant 它是那些没被显式声明为其他类型变量的数据类型,可以理解为一种通用的数据类型,这是最常
用的。
下面三条语句
cc(0) = 1000 '定义圆心座标
cc(1) = 1000
cc(2) = 0
它们的作用是给CC 变量的每一个元素赋,值其顺序是XYZ 坐标。
For i = 1 To 1000 Step 10 '开始循环
……
Next i '结束循环
这两条语句的作用是循环运行指令,每循环一次,i 值要增加10,当i 加到1000 时,结束循环。
i 也是一个变量,虽然没有声明i 变量,程序还是认可的,VB 不是C 语言,每用一个变量都
要声明,不声
明就会报错。简单是简单了,这样做也有坏处,如果不小心打错了一个字母,程序不会报错,如果程序很
长,那就会出现一些意想不到的错误。
step 后面的数值就是每次循环时增加的数值,step 后也可以用负值。
例如:For i =1000 To 1 Step -10
很多情况下,后面可以不加step 10
如:For i=1 to 100,它的作用是每循环一次i 值就增加1
Next i 语句必须出现在需要结束循环的位置,不然程序没法运行。
下面看画圆命令:
Call ThisDrawing.ModelSpace.AddCircle(cc, i * 10)
Call 语句的作用是调用其他过程或者方法。
ThisDrawing.ModelSpace 是指当前CAD 文档的模型空间
AddCircle 是画圆方法
Addcicle 方法需要两个参数:圆心和半径
CC 就是圆心坐标,i*10 就是圆的半径,本例中,这些圆的半径分别是10110210310……
本课到此结束,下面请完成一道思考题:
1.(4,2)为圆心,画5 A
utocad VBA 初级教程
(第三课编程基础二)
有一位叫自然9172 的网友提出了下面的问题:
绘制三维多段线时XY 值在屏幕上用鼠标选取,Z 值用键盘输入
本课将讲解这个问题。
为了简化程序,这里用多条直线来代替多段线。以下是源码:
Sub myl()
Dim p1 As Variant '申明端点坐标
Dim p2 As Variant
p1 = ThisDrawing.Utility.GetPoint(, "输入点:") '获取点坐标
z = ThisDrawing.Utility.GetReal("Z 坐标:") '用户输入Z 坐标值
p1(2) = z 'Z 坐标值赋予点坐标中
On Error GoTo Err_Control '出错陷井
Do '开始循环
p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "输入下一点:") '获取下一个点的坐标
z = ThisDrawing.Utility.GetReal("Z 坐标:") '用户输入Z 坐标值
p2(2) = z 'Z 坐标值赋予点坐标中
Call ThisDrawing.ModelSpace.AddLine(p1, p2) '画直线
p1 = p2 '将第二点的端点保存为下一条直线的第一个端点坐标
Loop
Err_Control:
End Sub
先谈一下本程序的设计思路:
1、获取第一点坐标
2、输入第一点Z 坐标
3、获取第二点坐标
4、输入第二点Z 坐标
5、以第一、二点为端点,画直线
6、下一条线的第一点=这条线的第二点
7、回到第3 步进行循环
如果用户没有输入坐标或Z 值,则程序结束。
首先看以下两条语句:
p1 = ThisDrawing.Utility.GetPoint(, "输入点:") ‘获取点坐标
……
p2 = ThisDrawing.Utility.GetPoint(p1, vbCr & "输入下一点:") '获取下一个点的坐标
这两条语句的作用是由用户输入点用鼠标选取点坐标,并把坐标值赋给p1p2 两个变量。
ThisDrawing.Utility.GetPoint()在ACAD 中这是最常用的方法之一,它需要两个参数,在逗号前面的参
数应该是一个点坐标,它的作用是在屏幕上画一条线,前一个端点位于点坐标位置,后一个端点跟随鼠标
移动,逗号之前可以什么都不填,这时没有线条会跟随鼠标移动,但逗号必须保留。
逗号后面使用一串字符,程序在命令行显示这串字符,这不难理解。
VbCr 通常代表一个回车符,而在这个语句中,它的作用是在命令行不显示“命令:”
&的作用是连接字符。举例:
“爱我中华”&”抵制日货”&”从我做起”
z = ThisDrawing.Utility.GetReal("Z 坐标:") '用户输入Z 坐标值
由用户输入一个实数
On Error GoTo Err_Control '出错陷井
……
Err_Control:
On Error 是出错陷井语句,在程序出错时将执行On Error 后面的语句
GoTo Err_contorl 是程序跳转语句,它的作用是在程序中寻Err_control:,并执行这一行后面的语句,
本例中Err_Control:后就是结束宏,所以只要出现错误,程序中止。
Do '开始循环
……
Loop ‘结束循环
这个循环就历害了,它会无休止地进行循环,好在本例中已经有了一个出错陷井,当用户
输入回车时,由
于程序没有得到点或坐标,程序出错,跳出循环,中止程序。如果要人为控制跳出循环,可以在代码中用
Exit Do 语句跳出循环。在For 变量和Next 变量之间如果要跳出循环,那么只要在循环体内加一个Exit
for 就可以跳出循环,关于这方面的例程以后会讲到。
Call ThisDrawing.ModelSpace.AddLine(p1, p2) '画直线
画直线方法也是很常用的,它的两个参数是点坐标变量
本课到此结束,请做思考题:
连续画圆,每次要求用户输入圆心、半径,当用户不再输入圆心或半径时程序才退出

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。