AutoCAD VBA二次开发教程4:VB/VBA语法基础

cut-off

书写规定

长语句续行

语句的长度其实没有明确的限制,但窗口的尺寸却有限。为了使语句具有更好的可读性,往往在编写代码语句时,将一个长语句行断为两行或多行,断行处要用下划线"_”连接,下划线左右至少应有一个空格。如下所示:

MsgResult = MsgBox(“请选择 ‘是 ’或 ‘否 ’,决定是否打印图形文件 ” _

     vbYesNo + vbQuestion + vbDefaultButton2)

注释语句

使用英文状态下的单撇号‘作为注释语句的开始,注释语句不会编译和执行。

大小写的约定

关键字、类对象名、内置常数符号等,字母的大小写有特定的设定,无须用户干涉,也不论用户怎么书写,均按系统规定的形式显示,如:Dim blkObj As AcadBlock。

从功能上讲,代码中字母的大小写一般不会影响程序的运行,使用大小写,目的也是为了提高代码的可读性。如上语句,当你声明对象变量为bikObj之后,在后续代码输入中,不论你全部用大写字母,还是全部用小写字母,总是只有字母0为大写,其余均为小写。

cut-off

对象、属性、方法和事件

对象

对象(Object)是VB程序设计的核心。窗体、控件、屏幕、打印机、数据库和应用程序等都是对象。(一切皆对象)

属性

属性是对象的特征。

  1. 设置属性值
  2. 设置属性的方法有两种,一种是直接在【属性】窗口设置属性的值而无须编写任何代码,另一种是通过代码在运行时设置。设置属性采用对象.属性=属性值(或表达式)语法。
  3. 读取属性值
  4. 对象的属性值可以赋给变量,或称读取属性值。使用变量=对象.属性语法。
  5. 读写属性与只读属性
  6. 在运行时可以设置并可获得值的属性叫做读写属性。在运行时只能读取的属性叫做只读属性。只读属性在属性窗口设置。

例如,在AutoCAD中Circle对象的Center属性表示位于圆心在3D世界坐标系中的坐标。更改圆心,只需将属性设置为新坐标。

方法

对象可调用的过程称为方法,对象用方法来执行动作。

  1. 如果方法不要求参数,则用对象.方法语法。
  2. 如果方法要用多个参数,就用逗号将它们分开。
  3. 如果要保存方法的返回值,就必须把参数用括号括起来。
  4. 如果没有返回值,则参数不会出现在括号中。

例如,在AutoCAD中Circle对象的Offset方法可以在距现有圆的指定偏移距离处创建新对象。

事件

事件是可被对象识别的动作,例如单击鼠标、文本框中的文字改变、加载或卸载窗体等都是事件。通过向对象的事件过程中添加代码,使得应用程序可以响应该对象的事件。当对象的事件被激发时,VB执行对象的事件过程中的代码。

cut-off

变量与常量

变量说明

任何编程语言都离不开变量。变量用来指定内存中的某一位置及大小,在变量的有效期内,该位置为用户保存特定的数据,直到该变量被释放。要正确地使用变量,有两个要素:确定变量的类型及在程序中声明变量。

  • 变量的类型(货架)
  • 变量能够保存任何数据,比如一个数字、文本字符串、日期等,甚至对象的一个实例,比如窗体控件、数据库对象等,而保存对象实例的变量,我们称之为对象变量。但由于数字、字符串或对象实例等数据,从结构到形式都有很大的不同,因此,在使用变量保存这些数据时,程序需要知道某一变量要用来存放哪一类数据,即要明确变量的类型。
  • 变量声明
  • 变量在程序中使用时,程序必须知道该变量用来的数据类型,这就是变量声明。对于VB和VBA你可以只声明一个变量,而不定义它的数据类型,此时程序就将未声明的变量定义成变体(Variant)类型。如果我们在使用某个变量时,想明确知道它的类型,最好给出明确的声明。

数据类型

VB中常见的数据类型有字节型(Byte)、整数型(Integer)、长整数型(Long)、单精度浮点型(Single)、双精度浮点型(Double)、货币型(Currency)、小数型(Decimal)、字符串型(String)、日期型(Date)、布尔型(Boolean)等。

定义数据类型的优点如下:

  • 便于内存管理
  • (举例:房间的货架)
  • 便于程序进行计算(数值型)和其它使用(非数值型)
  • (举例:对比梦诚和我们的钢筋与其他的计算分类)

1. 字符串 String

字符串是用于保存文本数据的,字符串内容应放置于双引号内。

2. 数字类型

VBA中用于表示数字的数据类型有4种:整型 Integer、长整型 Long、单精度浮点型 Single、双精度浮点型 Double。整型及长整型用于表示整数,单精度与双精度浮点型都用于表示小数。

整型与长整型的区别在于两者所能表示的数值范围不同:

  • 整型数据能表示的数据范围:-32768 ~ 32767
  • 长整型数据能表示的数据范围:-2147483648 ~ 2147483647

单精度浮点数与双精度浮点数除了在数值范围不同之外,两者所能表示的数据精度(即小数点后多少位)也是不同

  • 单精度浮点型能表示的数据范围
  • 在表示负数时: -3.402823E38 ~ -1.401298E-45
  • 在表示正数时: 1.401298E-45 ~ 3.402823E38
  • 双精度浮点型能表示的数据范围
  • 在表示负数时: -1.79769313486231E308 ~ -4.94065645841247E-324
  • 在表示正数时: 4.94065645841247E-324 ~ 1.79769313486231E308

反正一句话,它们可以表示非常大的数据,但要注意的时,单精度浮点型其精度是6,即只能保存小数点后最多6位的数据;双精度浮点型其精度是14,即只能保存小数点后最多14位的数据。如果超出以上长度,则超出部分会被去掉,并且会自动四舍五入。

3. 日期型 Date

日期型数据不仅可以表示日期,还可以表示时间。可以表示的日期范围是:100年1月1日 ~ 9999年12月31日;可以表示的时间范围是:0:00:00 ~ 23:59:59。

4. 布尔型 Boolean

布尔型数据用于表示逻辑值:真、假 。其中“真”为True,“假”为False。布尔值数据常用于条件判断语句。应当注意的是,当其它数据类型转换为布尔值时,0会转成False,其它值则变成True。当把布尔值转换成其他数据类型时,False会转换为0,True则是-1。

5. 变体型 Variant

变体型数据是一种特殊的数据类型,几乎可以用于保存所有其它数据类型的数据。可以简单地理解为:当不知道变量所要表示的数据是什么类型时,就把它定义为Variant。

变量声明

变量的声明在形式上有显式声明、隐式声明和用户自定义类型声明3种。

显式声明

Dim 变量名1 As 变量类型1

Private 变量名1 As 变量类型1

Public 变量名1 As 变量类型1

Dim、Private和Public是声明变量的关键字。

  • Dim关键字
  • 可用于模块级和过程级声明变量。在模块级声明的变量可用于该模块的所有过程中,而在过程级声明的变量只能用于该过程。
  • Private关键字
  • 只能在模块级声明变量,效果与Dim一样 ,所以很少使用 。
  • Public关键字
  • 必须放在模块级声明变量。Public变量在整个工程内的所有模块和窗体中可用,使用时应特别注意。

注意:固定长度字符串的声明格式如下:Dim 变量名 As String*strLength。

隐式声明

变量的隐式声明要求,在首次分配变量值时,在变量的结尾处使用一种特殊的字符,例如:IntVal%=1。

以下为变量类型与标识字符表:

变量类型标识字符整型%长整型&单精度!双精度#货币型@字符串$

自定义类型声明

用户自定义数据类型,可使用户创建包含混合信息。

[Public] Type 变量名

   元素 1 As 数据类型 1

   元素 2 As 数据类型 2

End Type

以下为代码示例:

Type Employee

   FirstName As String

   LastName As String

   Salary As Single

End Type

Public Sub User_Defined()

   Dim NewEmployee As Employee

   Dim FullName As String

   NewEmployee.FirstName = "John"

   NewEmployee.LastName = "Dole"

   NewEmployee.Salary = 3500

   FullName = NewEmployee.FirstName & "," & NewEmployee.LastName

   MsgBox FullName & "的月薪是" & NewEmployee.Salary

End Sub

注意:Option Explicit是强制变量声明语句。

常量声明

常量的区别在于,常量符号代表的数据不能在程序的运行过程中被修改。常量符号可以自定义,也可以使用VBA定义的内置常量符号。语法如下:

Const 常量名称 As 数据类型 = 值

cut-off

基本语句

赋值语句

常见的语法格式为:变量=表达式。对象变量的赋值必须使用Set关键字。其语法格式如下:set 对象变量 =对象运算表达式,以下为示例:

Set blkobj = ThisDrawing.Blocks.Add("TestBlock")

IF条件语句

语法格式1:

If condition Then Command

语法格式2:

If condition Then

   Code Lines 1

  [Else]

  [Code Lines 2]

End If

语法格式3:

If condition1 Then

   Code Lines 1

ElseIf condition2 Then

   Code Lines 2

  [Else]

  [Code Lines n]

End If

Select Case语句

Select Case compvalue

   Case valuel

       Code Lines 1

   Case value2

       Code Lines 2

  [Case Else ]

      [Code Lines n]

End Select

Do...Loop语句

语法格式1:

Do While condition

   Code Lines

Loop

语法格式2:

Do Until condition

   Code Lines

Loop

语法格式3:

Do

   Code Lines

Loop While condition

语法格式4:

Do

   Code Lines

Loop Until condition

For...Next语句

For counter = s_value To e_value[ Step stepvalue]

   Code Lines

Next [counter]

For Each...Next语句

For Each Object In collection

   Code Lines

Next [Object]

With...End With语句

从严格意义上说,With...End With语句不是一个控制语句,它是一种简化对象对属性引用的结构语句。

With Object

   Statements

End With

Goto语句

Goto语句是一个无条件跳转语句,它可以使程序的执行指针,转移到任意一条语句上。

语法格式:Goto Line_tag,其中的Line_tag是一个行标志或行号。行标志的名称由编程者设定,以冒号“:”结束。在一个过程中可以使用许多行标志,但每一个行标志必须有一个唯一的名称。

Exit语句

  • Exit Do:能够跳出一个 Do...Loop 循环。
  • Exit For:能够跳出一个 For...Next 或 For Each...Next 循环。
  • Exit Function:可以结束包含本语句的函数过程。
  • Exit Property:可以结束包含本语句的属性过程。
  • Exit Sub:可以结束包含本语句的 Sub 过程。

On Error语句

  • On Error Resume Next:忽略错误时,使用此语句。此语句捕获错误,而不是显示错误消息并终止程序,它只是移动到下一行代码并继续处理。
  • On Error GoTo Label:想要编写显式错误处理程序时,将使用此语句。此语句捕获错误,并跳转到代码中的特定位置,而不是显示错误消息并终止程序,特定位置的代码可以通过适合的方式响应错误。
  • On Error GoTo 0:取消当前错误处理程序。On Error Resume Next和On Error GoTo Label语句将一直有效,直到子过程结束、声明另一个错误处理程序或使用On Error GoTo 0语句取消错误处理程序。

On Error Resume Next示例:

Sub Ch11_ColorEntities()

   Dim entry As Object

   On Error Resume Next

For Each entry In ThisDrawing.ModelSpace

  entry.Color = acRed

Next entry

End Sub

On Error GoTo Label示例:

Sub Ch11_ColorEntities2()

Dim entry As Object

On Error GoTo MyErrorHandler

For Each entry In ThisDrawing.ModelSpace

  entry.Color = acRed

Next entry

Exit Sub

MyErrorHandler:

Msgbox entry.EntityName + " is on a locked layer." + _

" The handle is: " + entry.Handle

Resume Next

End Sub

关于处理错误

对于VB和VBA,对错误的默认反应是显示错误消息并终止应用程序,但这是不够的,可能存在要忽略的错误,或者要提供特殊响应的错误。通常,只要需要用户输入以及使用文件I/O,就必须进行错误处理。

应用程序中主要有以下类型错误:

  • 编译时错误:发生在应用程序的创建过程中。这些错误主要由语法错误、变量范围问题或数据类型问题组成。在VBA中,开发环境会捕获这些类型的错误并高亮显示。
  • 运行时错误:一般更难查找和更正。它们发生在代码执行期间,通常涉及从用户接收信息。例如,如果应用程序要求用户输入图形的名称,而用户输入不存在的图形的名称,则会发生运行时错误。若要有效地处理运行时错误,必须预测可能发生的问题类型,捕获它们,然后编写代码来处理这些情况。
  • 逻辑错误:是最难发现和纠正的。逻辑错误的症状包括没有编译时错误和运行时错误,但程序的结果仍然不正确。

VB和VBA提供Err对象捕获错误类型的信息。Err对象具有多个属性:Number、Description、Source、HelpFile、HelpContext和LastDLLError。Err对象最重要的属性是“Number”和“Description”属性。Number属性包含与错误关联的唯一错误代码,而Description属性包含通常显示的错误消息。

cut-off

说明:本篇内容由SudoMe整理修改AutoCAD的官方开发文档而来,如有内容表述不准确或理解错误的,请及时反馈。

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空