1.1.1 实例说明 “Hello VBA”实例将通过一个简单实例,向读者展示开发AutoCAD VBA应用程序的一般过程,涉及到AutoCAD VBA工程项目的建立、调试和保存等。 运行该实例,会弹出一个询问是否在图形窗口中添加“Hello,VBA”文字的对话框,如果用户单击【是】按钮确认,就会在图形窗口中创建“Hello,VBA”的文字。 1.1.2 编程思路 实现在对话框中提示“Hello,VBA!”,可以直接使用VBA的内置函数MsgBox,按照其语法要求指定适当的参数即可。 在AutoCAD图形窗口中添加“Hello,VBA!”的文字,涉及到AutoCAD文字添加的方法,本例中使用了AddText方法,其语法格式为: RetVal = object.AddText(TextString, InsertionPoint, Height) 本例中不需要返回值,因此在指定参数时不用括号。如果你对VB中使用函数的格式有什么疑问,请先阅读一本VB基础的图书。 1.1.3 步骤 (1)在AutoCAD 2004的环境中,选择【工具/宏/VBA管理器】菜单项,系统会弹出【VBA管理器】对话框。默认情况下,初次打开此对话框,工程列表中已经包含了一个工程。如果工程列表为空,单击【新建】按钮,就能在当前图形中新建一个名称为ACADProject的全局工程,如图1.1所示。
图1.1 新建工程 (2)在【工程】列表中选择ACADProject,单击【VBA管理器】中的【另存为】按钮,系统弹出【另存为】对话框。在对话框的保存位置下拉列表中指定工程文件的保存目录,如图1.2所示,然后单击【保存】按钮关闭【另存为】对话框。
图1.2 保存工程文件 (3)在【工程】列表中选择ACADProject,单击【Visual Basic编辑器】按钮,进入AutoCAD VBA的集成开发环境,如图1.3所示。在VBA IDE(集成开发环境)的左侧,分布着“工程资源管理器”和“属性窗口”,“工程资源管理器”中显示了当前打开的工程名称,以及该工程的文件结构。
图1.3 AutoCAD VBA集成开发环境 (4)在“工程资源管理器”中选择ThisDrawing,选择【视图/代码窗口】菜单项,或者直接双击ThisDrawing,系统会弹出如图1.4所示的代码窗口。当前的代码窗口没有任何的语句,后面就要为其添加适当的语句。
图1.4 代码窗口 (5)在VBA集成开发环境中,选择【插入/过程】菜单项,系统会弹出如图1.5所示的【添加过程】对话框。在【名称】文本框中,输入HelloVBA,【类型】为【子程序】,【范围】为【公共的】,单击【确定】按钮。
图1.5 添加子程序 (6)完成上一步骤的操作后,在ThisDrawing模块的代码中,就完成了HelloVBA子程序的定义,如图1.6所示。当然,目前这个子程序是空的,未实现任何功能。
图1.6 完成子程序的定义 提示:实际上,我一般不用这样的方法创建子程序,而是直接在代码区中添加这些代码。在代码窗口中输入“Public Sub HelloVBA”后按下Enter键,系统会自动补全剩下的代码。 (7)完成子程序的实现代码,首先系统弹出一个对话框,讯问用户是否要在图形窗口中添加文字,如果用户选择【是】,就在图形中添加文字对象。在HelloVBA子程序(宏)中添加下面的代码: Public Sub HelloVBA() '定义点 Dim pt(0 To 2) As Double '为点赋值 pt(0) = 100 pt(1) = 100 pt(2) = 0 '显示对话框,并添加文字 Dim value As Integer value = MsgBox("Hello,VBA!" & vbNewLine & "是否在图形中添加?", vbYesNo, "获得用户选择") If value = 6 Then '6代表vbYes ThisDrawing.ModelSpace.AddText "Hello,VBA!", pt, 10 '放在thisDrawing模块中的代码,可以省略thisDrawing对象 'ModelSpace.AddText "Hello,World!", pt, 10 End If End Sub 考虑到初学者,对程序进行下面的分析。 在VBA中,Dim关键字用来创建对象和数据的定义,数组pt(0 To 2)用来表示一个点的坐标,这在VBA中非常普遍。 MsgBox是VBA的一个内置函数,能够显示系统默认的消息对话框,其语法格式为: MsgBox(prompt[, buttons] [, title] [, helpfile, context]) AddText函数是VBA中向图形中添加单行文字的一种方法,如果需要获得该函数的详细信息,可在该函数上单击鼠标左键,使光标在AddText中的任一个位置上闪烁,然后按下F1键,就可以弹出如图1.7所示的帮助窗口,这与VB 6.0的MSDN使用方法相同。
(8)此时代码的编写已经完成,单击“标准”工具栏上的“保存”按钮,将当前的工程保存在指定的位置。 1.1.4 实例效果 (1)在VBA集成开发环境中,按下F5键,系统会弹出【宏】对话框(如果当前仅使用了一个宏,则不会弹出该窗口,而是直接执行该宏),在其中选择名称为HelloVBA的宏,单击【运行】按钮,就能在AutoCAD主程序中运行。 (2)切换到AutoCAD主程序窗口中,出现如图1.8所示的对话框,正是提示“Hello,VBA!”的对话框。
图1.8 消息框 (3)单击消息框中的【是】按钮,程序会继续运行,并且在运行完毕之后返回VBA的开发窗口。在Windows任务栏上单击AutoCAD主程序的图标,回到主程序窗口,得到如图1.9所示的结果。
图1.9 程序运行结果 1.1.5 小结 HelloWorld是编程学习中一个非常经典的实例,其旨在以最为简洁的语言使读者了解开发的过程。读者需要通过这个事例掌握AutoCAD VBA编程的基本过程,为进一步的学习做好准备。 这里,要为大家澄清几个名词的含义: 全局工程:全局工程是相对于嵌入工程而言的,它是保存在硬盘上的一个独立文件,以DVB为扩展名。在AutoCAD运行的任何时候,都可以将全局工程加载到系统中,使用它完成包括打开、关闭图形在内的操作。一般的工程都采用这种方式保存。 嵌入工程:嵌入的工程保存在某一个AutoCAD图形文件中。当AutoCAD打开嵌入工程所在的文件时,该工程就会被自动加载,这种工程的缺点是不能打开或关闭AutoCAD图形,仅能对所在的图形文件进行操作。 宏:宏是一个公共的可执行子程序,每个工程中至少包含一个宏。在VBA中,宏在代码窗口中就是一个子程序。例如一个文字工具程序中可能包含文字替换、文字编辑、文字查找的功能,该工程就可以由文字的替换、编辑和查找三个宏组成。 |