mccad 发表于 2009-6-4 21:44:00

[连载]《VBA精彩实例教程》1.1 Hello,VBA

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

hillskysea 发表于 2009-6-4 22:53:00

沙发了,支持老大!!

等着 发表于 2009-10-24 15:35:00

<p>不错</p><p>Public Sub HELLO()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;Dim insertionPoint As Variant<br/>&nbsp;&nbsp;&nbsp;&nbsp;insertionPoint = ThisDrawing.Utility.GetPoint(, vbCrLf &amp; "请选择插入点:")</p><p>&nbsp;&nbsp;&nbsp;&nbsp;Dim value As Integer<br/>&nbsp;&nbsp;&nbsp; value = MsgBox("Hello,VBA!" &amp; vbNewLine &amp; "是否在图形中添加?", vbYesNo, "获得用户选择")<br/>&nbsp;&nbsp;&nbsp; If value = 6 Then&nbsp;&nbsp;&nbsp;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;ThisDrawing.ModelSpace.AddText "Hello,VBA!",&nbsp;insertsionPoint 100<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp; End If</p><p>ThisDrawing.SaveAs ("Hello.dwg")&nbsp; <br/>End Sub</p><p>这个例子我自己把其修改成这个样了</p>

xiaowen 发表于 2010-6-9 17:03:00

<p>很感谢分享,多谢了.</p>

rzq1211 发表于 2010-6-12 10:15:00

<p>三楼,有点小错<font face="Verdana">&nbsp;ThisDrawing.ModelSpace.AddText "Hello,VBA!", insertionPoint, 100</font></p>

libo19861230 发表于 2010-6-13 15:32:00

感谢分享,多谢了.
页: [1]
查看完整版本: [连载]《VBA精彩实例教程》1.1 Hello,VBA