自从1986年AutoLISP作为第一个用于AutoCAD二次开发的编程语言被引入到AutoCAD中,从此许多计算机软件开发商和用户用AutoLISP编写了数以万计的实用系统和应用程序。还有大量的程序是利用AutoCAD的外部文件(Script)对AutoCAD进行二次开发。对AutoCAD来说这无疑是一笔巨大的资源和财富,也是其赖以发展的基础之一。
1 概述
1.1 AutoCAD中实现ActiveX
AutoCAD ActiveX使用户能够从AutoCAD的内部或外部以编程方式来操作AutoCAD,它是通过将AutoCAD对象显示到“外部世界”来做到这一点的。一旦这些对象被显示,许多不同的编程语言和环境以及其他应用程序(例如Microsoft Office中的Word VBA或Excel VBA)就可以访问它们。
在AutoCAD中实现ActiveX接口有两大优点:
(1) 更多的编程环境可以编程访问AutoCAD图形。在ActiveX Automation出现以前,开发人员只能使用AutoLISP或C++接口。
(2) 与其他Windows应用程序(例如Microsoft Office中的Excel和Word)共享数据变得更加容易。
对象是所有ActiveX应用程序的主要构造块,每一个显示的对象均精确代表一个AutoCAD组件,AutoCAD ActiveX接口中有许多不同类型的对象。例如,直线、圆弧、文字和标注等图形对象是对象;线型与标注样式等样式设置是对象;图层、编组和块等组织结构是对象;视图与视口等图形显示是对象;甚至图形、AutoCAD应用程序本身也是对象。
1.2 AutoCAD中的VBA[1]
Microsoft VBA是一个面向对象的编程环境,可提供类似Visual Basic(VB)的丰富开发功能。VBA和VB的主要差别是VBA和AutoCAD在同一进程空间中运行,提供的是具有AutoCAD智能的、非常快速的编程环境。VBA也向其他支持VBA的应用程序提供应用程序集成,这就意味着AutoCAD(使用其他应用程序对象库)可以是如Microsoft Word或Excel之类的其他应用程序的Automation控制程序。
在AutoCAD中实现VBA有四大优点:
(1) Visual Basic编程环境易于学习和使用。
(2) VBA可与AutoCAD在同一进程空间中运行,这使程序执行得非常快。
(3) 对话框的构造快速而有效。这使开发人员可以构造原型应用程序并迅速收到设计的反馈。
(4) 工程可以是独立的,也可以嵌入到图形中。这样就为开发人员提供了非常灵活的方式来发布他们的应用程序。
新工程会被创建为未保存的全局工程。创建完成后,可以将它嵌入到图形中或保存到工程文件中。
2 VBA基础
2.1 VBA工程
AutoCAD VBA工程是由许多程序模块、类模块和窗体组成的集合,他们同时运行即可完成指定的功能。VBA工程可以保存于AutoCAD图形文件内部,称为内嵌VBA工程;亦可保存为独立的工程,称为全局VBA工程,以*.dvb文件格式保存。
对于内嵌VBA工程,当打开包含该工程的AutoCAD图形文件时,它将被自动加载。因此,在运行内嵌VBA工程程序之前,其用户不须在文件夹中去寻找工程文件并加载该工程,使得工程管理更加方便。
全局VBA工程的功能较多。全局工程可在任何AutoCAD图形中运行,亦可在工程中打开或关闭AutoCAD图形。全局工程容易与其他用户共享,且可制作成共享的宏[2]资源库,因此应用VBA开发通用应用程序时,应将其保存为全局工程。但全局工程也有一些缺点,它不会随AutoCAD图形文件的打开而自动加载。所以,用户在运行全局工程程序之前须要知道哪个工程文件中包含了所需的宏,然后加载该工程文件,最后才能执行相应的宏。
2.2 VBA管理器
在当前AutoCAD进程中加载的所有VBA工程均可用VBA管理器来管理,亦可用它来新建、保存、加载、卸载、嵌入或提取工程。“VBA管理器”对话框如图1所示。
启动“VBA管理器”对话框的命令调用方法为:
命令行:VBARUN
菜单栏:【工具】→【宏】→【VBA管理器】
与VBA应用程序开发、管理相关的下拉菜单如图2所示。
图1 “VBA管理器”对话框
图2 与VBA应用程序开发、管理相关的下拉菜单
1. 创建新VBA工程
创建新VBA工程的步骤如下:
(1) 打开“VBA管理器”对话框。
(2) 选择“新建”。
新工程将以默认的名称“ACADProject”创建。如要更改工程名称,必须进入“Visual Basic编辑器”中,在“工程属性”窗口中更名。其操作方法步骤如下:
(1) 单击“VBA管理器”中的“Visual Basic编辑器”按钮(如图1所示)或用菜单选择“Visual Basic编辑器”(如图2所示),打开“Microsoft Visual Basic”,如图3所示。
(2) 在VB的“工程资源管理器”选中“ACADProject(Global1)”,单击右键,在弹出菜单中选择“ACADProject属性…”选项,打开“工程属性”对话框,在“工程名称”中输入用户欲更改的名称,如图4所示。
图3 Visual Basic编辑器
图4 “工程属性”对话框
2. 保存新VBA工程
每次保存图形文件时,都将保存其内嵌工程。而全局工程必须使用VBA管理器或VB编辑器来保存。使用VBA管理器保存工程的步骤:
(1) 打开VBA管理器,并选择要保存的工程。
(2) 选择“另存为”,将会打开“另存为”对话框。
(3) 选择用于保存该工程的文件的名称。
(4) 单击“保存”按钮。
3. 加载VBA工程
将工程加载到AutoCAD图形中时,所有的公用子程序(也称为宏)均为可用程序。每次打开图形时,内嵌在图形中的工程就会被自动加载,而以*.dvb文件格式保存的全局工程必须明确加载方能运行。
每次加载工程时,都将自动加载此工程引用的任何其他工程。此外,AutoCAD在启动时会自动加载任何名为acad.dvb的工程文件。
加载已有VBA工程文件的步骤如下:
(1) 在“VBA管理器”对话框中单击“加载”按钮,弹出“打开VBA工程”对话框,如图5所示。
图5 “打开VBA工程”对话框
(2) 在“打开VBA工程”对话框中选择欲加载的工程文件。
(3) 单击“打开”按钮,再单击“启用宏”按钮。打开VB编辑器即可查看、编辑或运行该程序。
注意:用户在加载工程时,均会显示“禁用宏”或“启用宏”的选项提示,作为防范病毒的提示,如图6所示。若启用了带病毒的宏,程序中的病毒会一并运行;若禁用该宏,工程仍可被调用,但不能运行该工程中的任何程序。
图6 工程加载防范病毒提示提示