VBA开发指南

更新时间:2024-01-30 07:24:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

VBA开发指南

主要内容 1.VBA简介 2.一个简单的实例 3.使用VBA命令

4.使用VBA管理器组织工程 5.使用宏

6.使用VBA IDE编辑工程 7.VBA语言概述 8.VBA编程实例

9.ZwCAD常用VBA接口 10.移植VBA工程 11.对象模型

1.VBA简介

VBA是Visual Basic for Application的简称,它是为Microsoft Windows应用程序提供的宏程序设计语言,因此Microsoft Windows系统下的一些应用程序,包括Microsoft Office系列下的Word、Excel和PowerPoint等都支持这种语言。VBA的强大开发功能与易用性相结合,与VB一样,VBA也是一种面向对象的、可视化的、事件驱动的高级程序设计语言。VBA的语法、功能甚至开发环境跟VB都是基本相同的,可以说VBA是VB的一个子集。但VB具有自己的开发环境,而且VB开发出的应用程序最终是编译成二进制可执行文件(*.EXE),而VBA通常寄生于已有的应用程序. 以代码文本方式存在,不需要编译,只需要通过应用程序中的VBA解释器进行解释运行,Word、Excel等支持VBA宏语言的应用程序,都带有VBA的编辑器和解释器。

简单来说,VBA是一个系统环境,它支持VBA语言的解释运行及提供相关的功能支持,而ZwCAD专业版也同样是一个支持VBA宏语言的应用程序,提供了一套专用于ZwCAD平台上的VBA接口,通过调用ZwCAD专业版平台所提供的VBA接口库,可以对ZwCAD平台进行控制和扩展,也就是我们通常所说的二次开发。ZwCAD所提供的VBA接口,遵循COM接口定义标准,所以不仅仅是VBA语言,其它一些支持自动化的编程语言,都可以通过自动化调用的方

式来调用ZwCAD的VBA接口,重而实现对ZwCAD平台功能的控制和扩展,这种方式跟其它一些支持VBA的应用程序是一致的。

相对于其它一些二次开发方式(如Lisp),在ZwCAD中利用VBA进行二次开发有以下的优点:

1)VBA语法易于学习,容易掌握。 2)ZwCAD专业版带有一个功能非常强大的VBA编辑器,可以对VBA宏进行逐步调试及对代码的运行进行监控查看,提高二次开发的效率。

3)对话框的构造快速而有效。 这使开发人员可以构造原型应用程序并迅速收到设计的反馈。

2.一个简单的实例

这里先介绍一个简单的VBA实例让大家有一个认识,以助于逐步了解VBA。这个实例的功能很简单,就是在当前DWG图形中画一条直线。此实例保存在ZwCAD安装目录下的\\Sample\\VBA\\vbaTest.zvb中,ZwCAD的VBA工程文件都保存成扩展名为.zvb的文件。

1.首先是加载工程文件,在ZwCAD命令行处输入“vbaload”命令,然后回车,会弹出选择文件对话框,定位到上述的ZwCAD安装目录下的\\Sample\\VBA子目录中,选择vbaTest.zvb文件(如下图)。

用鼠标点击“打开”按钮,就会加载此工程。

2.然后运行该实例中的VBA宏命令,在ZwCAD命令行处输入“-vbarun”命令,然后回车,命令行会提示“宏名:”,然后输入“drawline”,按回车即可运行该宏命令(如下图)。

你会看到在当前DWG图形上画了一条直线(如下图)。

3.查看该实例的宏命令代码,在ZwCAD命令行处输入“vbaide”命令,然后回车,会弹出vba编辑器(如下图)。

双击文件夹左侧工程窗口的“模块”(“Modules”)会出现“Module1”项(如下图)。

然后双击“Module1”项在右则会看到代码(如下图)。

如果用户想进一步了解VBA请参看8. VBA编程实例。

3.使用VBA命令

在ZwCAD专业版中,与VBA相关的命令主要有如下几个:vbaide,vbaman,vbaload,-vbaload,vbarun,-vbarun,vbaunload。

3.1命令: vbaide

在ZwCAD的底部的命令行处输入vbaide命令然后回车。将弹出VBA编辑器(如下图)。 此VBA编辑器功能非常强大,使用它可以可以查看当前所有已经加载的VBA工程、编写代码、设计对话框,也可以调试和运行宏命令。

3.2命令行: vbaman

在ZwCAD的底部的命令行处输入vbaman命令然后回车。将显示VBA管理器对话框(如下图)。

通过VBA管理对话框,可以加载/卸载VBA工程,新建/保存VBA工程,也可以弹出VBA宏对话框或者VBA编辑器。

3.3命令: vbaload

对话框模式加载VBA工程,在ZwCAD的底部的命令行处输入vbaload命令然后回车。将显示“打开VBA工程”对话框(如下图)。

ZwCAD专业版允许VBA工程文件存放于任何地方,在打开VBA工程文件对话框中定位你所开发的VBA工程文件(.zvb),选择后打开即可加载,支持选择多个文件同时加载。

3.4命令: -vbaload

命令行模式加载VBA工程,在ZwCAD的命令行处输入-vbaload命令然后回车。在命令行提示“打开VBA工程 :”中输入要打开的工程的路径和文件名,不分大小写,另外,如果输入的VBA工程文件路径名不是一个绝对路径,则ZwCAD会在系统设置的搜索路径中搜索定位,还可以省略后缀名.zvb(如下图)。

如果加载成功,会弹出“病毒警告”对话框(如下图),关于安全设置可以参阅4.3.1的详细说明。

如果加载的工程已被加载会弹出“文件已加载”的对话框提示。如下图:

3.5命令: vbarun

对话框模式运行VBA宏命令,在ZwCAD的底部的命令行处输入vbarun命令然后回车。将显示“宏”对话框(如下图),在宏列表中选择要选择的VBA宏,点击“运行”按钮即可。

3.6命令行: -vbarun

命令行模式运行VBA宏命令,在ZwCAD的底部的命令行处输入-vbarun命令然后回车。在命令行提示“宏名称: ”中输入要运行的宏命令的名称(如下图),回车后即可执行指定的宏命令,

如果成功会执行宏。如下图:

该示例宏命令的代码如下图:

如果没有这个宏命令,或者输入的宏命令名称不对,会提示“未找到宏”。如下图:

3.7命令行: vbaunload

命令行模式卸载VBA工程,在ZwCAD的命令行处输入vbaunload命令然后回车。在命令行提示“卸载VBA工程: ”中输入要卸载的工程名称,输入的工程名不分大小写,另外同样可以省略后缀名.zvb(如下图).

如果工程名不存在,会提示“文件名无效”(如下图)。

4.使用VBA管理器组织工程

使用VBA管理器可以查看当前ZwCAD中已经加载的所有VBA工程。可以从“工具->VBA宏->VBA管理器”菜单或在ZwCAD命令行中通过运行VBAMAN命令打开VBA管理器。

4.1创建新工程

创建新VBA工程的步骤: 1)打开VBA管理器。 2)选择“新建”。

新工程会被创建为未保存的全局工程,工程名默认为ZWCADProject,要更改工程名,可以进入VBA编辑器相应的工程属性中进行设置修改。

4.2保存工程

使用VBA管理器保存工程的步骤:

1)打开VBA管理器,并选择要保存的工程。 2)选择“另存为”。 将会打开“另存为”对话框。 3)选择用于保存该工程的文件的名称。 4)选择“保存”。

4.3加载现有的工程

加载现有VBA工程文件的步骤:

1)在“VBA管理器”中,使用“加载”选项打开“打开VBA工程”对话框。 2)在“打开VBA工程”对话框中,选择要打开的zvb工程文件。

3)选择“打开”。

如果指定要加载的工程文件已被加载,则会弹出“文件已加载”的对话框提示。将VBA

工程加载到ZwCAD后,就可以直接在VBA编辑器中进行编辑修改,或者通过运行宏命令的方式(包括对话框模式和命令行方式)来运行VBA工程中的宏命令。

用户还可以使用以下任意方法来加载工程文件:

1)输入VBALOAD命令,该命令会打开“打开VBA工程”对话框。

2) 输入—VBALOAD命令,可通过输入所要加载VBA工程路径文件名来加载工程 关于和VBALOAD和—VBALOAD命令的使用的详细信息请参见“3.使用VBA命令”一节

4.3.1病毒警告

因为VBA工程文件中的VBA宏命令,除了可以实现对应用程序的扩展操作之外,还可以操作其它的一些功能,比较说访问SQL-Server数据库、Access数据库、操作磁盘文件等等,所以在加载一个VBA工程文件时,根据当前系统的安全设置级别有可能会进行“病毒警告”,这只是VBA系统出于安全的考虑,用户并不需要紧张,只要是确认当前加载的是可信任的工程文件,即可放心加载。

而如果觉得每次加载VBA工程文件都自动弹出“病毒警告”不方便,可以选择菜单“工具->VBA宏->安全”,打开“安全性”对话框进行设置。如下图:

可以看到有“无”、中、高三种安全级别。

在选择“无”时,程序将不受保护,有些宏可能具有不安全因素。 选择“高”时,只有具有可靠来源签署的宏可以运行。

如果选择“无”和“高”安全级别,当用户加载工程时不会弹出“病毒警告”对话框.但如果选择“中” 安全级别,每当用户加载工程时,会弹出“病毒警告”对话框.如下图

用户要选择是启用还是禁用工程中的代码,以此作为防范病毒的保护措施。 如果用户启用了代码,则代码中的病毒就可以开始执行。 如果用户禁用代码,则仍会加载工程,但是该工程中的所有代码均不能运行。

4.3.2自动加载VBA工程文件ZwCAD.zvb

ZwCAD专业版所提供的VBA是一种非常简单而又实用的二次开发方式,用户如果自己编写了一个VBA工程文件,这个VBA工程中有一些非常实用的宏命令,需要在每次启动ZwCAD时都自动加载这个工程文件,以便于在使用过程中运行宏命令,那么当用户可以把这个VBA工程文件(.zvb)改名为zwcad.zvb,并放在ZwCAD可搜索范围的路径下(直接的办法是把文件复制到ZwCAD的安装目录下),这样每当启动ZwCAD时,ZwCAD都会自动在可搜索路径下搜索并加载zwcad.zvb文件,如果找不到该文件,则不作任何加载处理。

下面演示自动加载步骤,把一个名为zwcad.zvb工程文件放在了C:\\Program Files\\ZwCAD\\Sample\\VBA路径下。 自动加载步骤:

1)选择菜单“工具->选项”会弹出“选项“对话框(如下图).

2)单击“文件“选项,单击“图形文件搜索路径” 然后“增加“按钮,再单击“浏览“按钮。会弹出“浏览文件夹“对话框,选择zwcad.zvb所在的目录。如下图

3)单击“浏览文件夹”对话框的确定按钮后,会看到“图形文件搜索目录”下多了个子目录“C:\\Program Files\\ZwCAD\\Sample\\VBA”,最后单击“选项“对话框的“确定”按钮。

4)重新打开ZwCAD,在命令行输入vbaide命令,会看到工程窗口里已加载了zwcad.zvb这个工程。如下图:

4.3.3 启动组中自动加载VBA工程

上面讲述了将VBA工程文件命令为ZwCAD.zvb,并放在可搜索目录范围中来实现自动加载功能,另外一种方式,可以将VBA工程文件添加到启动组中来实现自动加载,而且这种方式对VBA工程文件的命名没有要求,也可以存放在任何目录下面,在命令行处执行“appload”命令,会弹出“加载应用程序”对话框(如下图).

如果用户有一些文件需要经常加载,可选择“添加”选项将文件路径加到“程序文件名”列表中,然后选择“加载”选项加载文件。这样就不必每次都通过文件选择对话框来查找文件,非常方便,这也是加载VBA工程文件的一种方式,效果跟直接运行vbaload命令或者在VBA工程管理对话框中加载是一样的。

如果用户有一些文件需要在程序启动时自动加载,可通过“启动组”选项实现。在“加载应用程序文件”对话框中的列表中选择要添加到“启动组”的工程文件,点击“添加到启动组”按钮即可将所选择的VBA工程文件添加到启动组中,或者点击 “启动组”按钮弹出“启动组”对话框,通过“添加”和“删除”按钮来从启动组列表中增加或删除VBA工程文件。在“应用程序列表”中的文件会在启动ZwCAD时自动加载这些工程文件。(如下图)

4.4卸载工程

卸载VBA工程的步骤:

通过选择要卸载的工程并选择“卸载”可以卸载VBA工程,或使用VBAUNLOAD命令,该

命令会提示您提供要卸载的工程。

关于和VBAUNLOAD命令的使用的详细信息请参见“3.使用VBA命令”一节。

5.使用宏

VBA宏命令是一个公共(public)的子过程,一个VBA工程中有任意多个宏命令,只要宏命令的名字不相同即可,在宏命令中,用户可以编写代码,对ZwCAD平台进行操作控制和访问扩展,一个简单的宏命令示例如下:

Public Sub TestMacro()

Msgbox “TestMacro” End Sub

5.1使用“宏”对话框

通过“VBA宏命令”对话框,用户可以运行、编辑、删除和创建VBA宏命令。 从ZwCAD中选择菜单“工具->VBA宏->VBA宏”,或在ZwCAD命令提示下执行VBARUN命令,打开“VBA宏命令”对话框。

此对话框显示了有效范围中所有宏的名称。 使用“宏位置”的下拉列表可以更改有效范围。 此列表指定的是显示了VBA宏命令的工程或图形,可选择显示以下范围中的宏:

1)所有工程。

2)ZwCAD中当前加载的任意单个VBA工程。

通过限制有效范围,可以控制列表中显示的宏名称的数目。 如果加载的工程中有很多的宏,就可以使用以上方式控制显示。

创建新宏的步骤:

1)打开“宏”对话框,然后输入新宏的名称。

2)在“宏位置”下拉列表中,选择将创建新宏的工程。 3)选择“创建”。

如果选择“取消”,“宏”对话框消失,而且不会创建任何新宏。 删除宏的步骤

1)打开“宏”对话框并选择要删除的宏。

2)选择“删除”。 将提示用户确认删除操作。

3)出现提示时,选择“是”删除宏,或者选择“否”取消删除。

5.2运行宏

运行宏命令的方式有多种,可以在VBA管理器中或在VBA 编辑器中运行宏,还可以通过VBARUN和-VBARUN命令来运行宏命令。对于VBA工程中的宏命令,ThisDocument对象指向当前DWG文档,各个VBA工程中都自动生成唯一一个ThisDocument的对象,用于对当前文档进行操作和访问,有关于这个对象的使用,可以参考相关资料说明。

在VBA管理器中运行宏的步骤:

1)打开“宏”对话框并选择要运行的宏。

2)选择“运行”。 在VBA IDE运行宏的步骤:

从“运行”菜单中选择“运行宏”菜单选项。

如果没有任何现成的宏或窗体,将会显示一个对话框供用户选择要运行的宏。 如果当前存在某个给定的宏(光标位于其过程中),则会执行该宏。

在命令行中输入VBARUN命令,会弹出“宏”对话框,用法参考上述的“VBA宏命令”对话框。

在命令行中输入—VBARUN命令,会要求输入宏名,然后执行指定的宏命令。 关于和VBARUN和—VBARUN命令的使用的详细信息请参见“使用VBA命令”一节

5.3编辑宏

编辑宏会打开VBA IDE,并在“代码”窗口中打开选中的宏。 关于在VBA IDE中编辑宏的详细信息,请参见“使用VBA IDE编辑工程”一节。 编辑宏的步骤

1)打开“宏”对话框并选择要编辑的宏。 2)选择“编辑”。

5.4单步运行进入宏

单步运行进入宏会开始执行宏,然后在第一行代码处中止执行,主要是用于调试跟踪VBA代码。 此时,VBA IDE打开,并在“代码”窗口中显示所选宏中要执行的行。 单步运行进入宏的步骤

1)在“宏”对话框中,选择要单步运行进入的宏。

2)选择“单步执行”。

6.使用VBA IDE编辑工程

将工程加载后,用户就可以使用VBA交互式开发环境来编辑该工程的代码、窗体和自定义类对象。 而且还可以在VBA IDE中调试和运行工程。 打开之后,使用VBA IDE可以访问所有已加载的工程。用户可以从命令行或菜单栏打开VBA IDE。从命令行输入VBAIDE命令,或从“工具”菜单中选择“VBA宏->VBA编辑器”

6.1查看工程信息

VBA IDE包含了“工程”窗口,其中显示了所有已加载的VBA工程列表。 这个窗口还显示工程中包含的代码、类和窗体模块,与工程关联的文档,从工程引用的所有其他VBA工程,以及工程的实际位置(路径)。

“工程”窗口有自己的工具栏,可用来打开工程的各个组件进行编辑。 使用“查看代码”按钮可打开选定模块的代码。 使用“查看对象”按钮可显示选定的对象,例如窗体。默认情况下,“工程”窗口是可见的。 如果此窗口不可见,请从“查看”菜单中选择“工程”窗口,或按CTRL+R组合键。

查看对象 查看代码

6.2 VBA工程中的组件类型

每个工程可以包含许多不同的组件。 ZwCAD的VBA工程中通常包含有ThisDocument对象、窗体、标准模块、类模块。

ThisDocument对象

ThisDocument对象表示当前DWG图形,是在创建VBA工程时自动生成的,不可删除。 窗体

窗体组件包含由用户构造的、用于宏命令执行过程中的自定义对话框。 标准模块

代码模块组件包含用户的常用过程和函数。 标准模块也称为代码模块,或简称为模块,通常宏命令都在标准模块中定义。 类模块

类模块组件包含用户自己定义的类对象。

6.3添加新组件

添加新组件将在工程中创建空白组件。 用户可以将新的标准模块、窗体和类模块添加到自己的工程中。

向工程中添加新组件的步骤:

1)在VBA IDE的“工程”窗口中,选择要向其中添加组件的工程。

2)从“插入”菜单中选择“用户窗体”、“模块”或“类模块”来向工程中添加新组件。

新组件将会被添加到工程中并显示在“工程”窗口中。

6.4编辑组件

在VBA IDE中,可以编辑标准模块、类模块和窗体。 标准模块和类模块均在“代码”窗口中编辑; 窗体则在“用户窗体”窗口中使用特殊的的工具箱进行编辑。

由于可以打开的“代码”窗口与拥有的模块数目一致,因此可以很容易地查看不同窗体或模块中的代码,并在它们之间互相复制和粘贴。

1)在VBA IDE的“工程”窗口中,选择要编辑的组件。

2)在“工程”窗口中,选择“查看代码”按钮打开“代码”窗口。

3)在“工程”窗口中,选择“查看对象”按钮打开“用户窗体”窗口和关联的工具箱。 访问与窗体关联的代码的步骤

要访问与某个控件关联的代码,请双击“窗体”窗口中的任意控件。 “代码”窗口中将打开与该控件关联的代码。 使用“代码”窗口

代码”窗口包含两个下拉列表、一个拆分栏、一个边界指示栏、一个“完全视图”图标和一个“过程视图”图标。

“代码”窗口顶部的两个下拉列表显示当前的对象和过程。更改这些下拉列表中的对象或过程,就可以在工程中来回移动。

“代码”窗口右侧的拆分栏可以水平拆分窗口, 只要向下拖动此栏即可创建另一个窗格。使用此功能,可以同时查看同一个模块的两个不同部分。要关闭窗格,只需将拆分栏拖回初始位置即可。

边界指示栏位于“代码”窗口的左下方, 用于显示编辑和调试代码期间用到的边界标识符。

“完全视图”和“过程视图”图标位于“代码”窗口的左下角,使用它们可以在一次仅显示一个过程与一次查看整个模块之间来回切换。

当前对象 当前过程

过程/完整 视图按钮

使用“用户窗体”窗口

过“用户窗体”窗口,可以在工程中创建自定义对话框。

要添加控件,只需从工具箱中将所需的控件拖放到窗体上即可。 从“选项”对话框的“常规”选项卡中,可以将控件设置成与窗体栅格对齐。 从“选项”对话框的“常规”选项卡中,还可以查看窗体栅格,以及确定栅格线的大小。 关于“选项”对话框的详细信息,请参见“设置VBA IDE选项”。

设计好的每个窗体都自动拥有“最大化”、“最小化”和“关闭”按钮, 这些按钮是预先设计好的。

要向控件中添加代码,只需双击已放置在窗体上的控件即可。 这将会打开控件的“代码”窗口。

6.5命名工程

工程名称与存储该工程的.zvb文件名称可以是不同的,独立的。存储该工程的 .zvb文件名称在保存工程时指定,而工程名称则在VBA IDE的“特性”窗口中设置。 如果用户没有设置工程名和文件名,ZwCAD会自动指定以下默认名称: 工程名:ZWCADProject 文件名:Project.zvb

更改工程名:

1)在VBA IDE的“工程”窗口中,选择要更改的工程。 2)在“属性”窗口中编辑工程的“名称”特性。 更改文件名:

1)在VBA IDE中,从“文件”菜单中选择“保存”选项。 2)在“另存为”对话框中输入工程文件的新名称和位置。

6.6保存工程

SAVE命令位于VBA IDE的“文件”菜单和VBA管理器中。 当发生以下任何情况时,对VBA工程进行任何更改,都将出现标准的“保存VBA工程”对话框:

1)从VBA IDE中选择SAVE命令。

2)选择了VBA管理器中的“另存为”选项。

在保存工程之前,已为工程指定了默认的文件名project.zvb。

6.7保护工程

可以通过在工程属性中设置密码来保护工程的代码。只允许具有特定权限的用户来查看工程。

这里工程名为“ZWCADProject”。

1)在vbaIde的工程窗口处单击右键,选择“ZWCADProject属性?”项,会弹出工程属性框(如下图)。

2)单击“保护”选项,选中“查看时锁定工程”选项,在“密码”

后输入密码,在“确认密码”后输入确认密码。单击“确定”按钮(如下图)。

3)重新启动ZwCAD并打开vbaIde后,在vbaIde的工程窗口处单击右键,选择“ZWCADProject属性?”项,会弹出密码框。要求输入密码,正确输入密码后才可以看到属性。这里“ZWCADProject”这个目录只有输入密码后才能展开,因为在2)中选中了“查看时锁定工程”选项,也就是说,在这种状态下,用户可以通过设置密码及锁写查看工程来保护你所编写的VBA代码,这对于二次开发的用户来说,非常重要(如下图)。

4)如果在2)中不选中“查看时锁定工程”选项,那么可以看到工程的结构。但查看属性仍需密码。

关于VBA IDE的详细说明请参考VBA IDE的“帮助”菜单下的“Microsoft Visual Basic 帮助 F1”菜单。

7.VBA语言概述

Dim语句

使用Dim语句或其它的声明语句之一(Public、Private、或Static)去声明对象变量。一引用对象的变量必须是Variant、Object,或是一个对象的指定类型。例如,下列声明是有效的:

‘声明MyObject为Variant数据类型。 Dim MyObject

‘声明MyObject为Object数据类型。 Dim MyObject As Object

‘声明center为ZwcadPoint数据类型。ZwcadPoint为ZwCAD的点的类型。 Dim center As New ZwcadPoint Set语句

使用Set语句可以赋值一个对象给对象变量。可以赋值对象表达式或是Nothing 。例如,下列的对象变量赋值是有效的:

Set MyObject = YourObject ‘ 赋值对象引用。 Set MyObject = Nothing ‘ 中断关联。

可以同时使用New关键字和Set语句来声明对象变量,并赋值一对象给它。例如: Set MyObject = New Object ‘ 创建和赋值 If...Then...Else语句

根据条件的值,可使用If...Then...Else语句运行指定的语句或一个语句块。If...Then...Else语句可根据需要嵌套多级。然而,为了可读性可能会使用Select Case语句而不使用多嵌套级的If...Then...Else语句。 如果条件为True则运行语句

如果条件为True,运行某些语句;条件为False,运行其它的语句

使用If...Then...Else语句可以定义两个可执行的语句块:其中一个块会在条件为True时执行;而另一个块会在条件为False时执行。 下列的示例显示了语法

Sub AlertUser(value as Long)

If value = 0 Then

AlertLabel.ForeColor = vbRed

AlertLabel.Font.Bold = True AlertLabel.Font.Italic = True Else

AlertLabel.Forecolor = vbBlack AlertLabel.Font.Bold = False AlertLabel.Font.Italic = False End If End Sub

Select Case语句

当一个表达式与几个不同的值相比较时,可以使用Select Case语句来交替使用在If...Then...Else语句中的ElseIf。If...Then...Else语句会计算每个ElseIf语句的不同的表达式,在控制结构的顶部,Select Case语句只计算表达式一次。

在下面的示例中,Select Case语句会计算发送给此过程的参数performance。请注意,每个Case语句可以包含一个以上的值,一个值的范围,或是一个值的组合以及比较运算符。如果Select Case语句与Case语句的任何值不匹配,则可选的Case Else语句运行。

Function Bonus(performance, salary)

Select Case performance

Case 1

Bonus = salary * 0.1

Case 2, 3

Bonus = salary * 0.09 Case 4 To 6

Bonus = salary * 0.07 Case Is > 8 Bonus = 100 Case Else Bonus = 0

End Select End Function For Each...Next语句

For Each...Next语句会重复一个语句块,而它是作用于集合中的每个对象或是数组中的每个元素。当循环执行一次则Visual Basic会自动设置一个变量。

下面的代码会在数组的每个元素中循环,并且将每个值设置成它的索引变量I的值。

Dim TestArray(10) As Integer, I As Variant

For Each I In TestArray

TestArray(I) = I Next I Do...Loop语句

可以使用Do...Loop语句去运行语句的块,而它所用掉的时间是不确定的。当条件为True或直到条件变成True时,此语句会一直重复。

在下面的TestLoop过程中,在进入循环之前检查条件。如果将myNum的值由20替换成9,则循环中的语句将永远不会运行。 Sub TestLoop ()

counter = 0

myNum = 20

Do While myNum > 10

myNum = myNum - 1

counter = counter + 1 Loop

MsgBox “The loop made “ & counter & “ repetitions.” End Sub Function函数

Function函数是一系列由Function和End Function语句所包含起来的Visual Basic语句组成。Function函数和Sub过程很类似,但函数可以返回一个值。Function过程可经由调用者过程通过传递参数,例如常数、变量、或是表达式等来调用它。如果一个Function过程没有参数,它的Function语句必须包含一个空的圆括号。函数会在过程的一个或多个语句中指定一个值给函数名称来返回值。

下面这个实例中ZwcadPoint为ZwCAD的点的类型,ZwcadCircle为ZwCAD圆对象的类型,AddCircle()方法会在ZwCAD图形上画一个圆。 Function vbaCircle(rad)

Dim center As New ZwcadPoint Dim cir As ZwcadCircle

center.x = 10 center.y = 10 center.z = 0

Set cir = ThisDocument.ModelSpace.AddCircle(center, rad) cir.Update End Function

Sub main()

vbaCircle (100) End Sub Sub过程

Sub过程是一系列由Sub和End Sub语句所包含起来的Visual Basic语句,它们会执行动作却不能返回一个值。Sub过程可有参数,例如常数、变量、或是表达式等来调用它。如果一个Sub过程没有参数,则它的Sub语句必须包含一个空的圆括号。 下面Sub过程中将调用上面的Function vbaCircle(rad)。 Sub main()

Dim t As Double t = 150

vbaCircle (t)

End Sub

通常VBA的宏命令就是通过定义一个公共(Public)的没有参数和反回值的Sub过程来实现,在标准模块中定义一个Sub子过程,如果没有指定Public关键字,则默认为公共(Public)类型的,也就是我们通常所说的“VBA宏命令”,可以通过上述运行宏命令的方式来执行该Sub过程(宏命令)。

8.VBA编程实例

本节将介绍一个相对详细的VBA编程实例,以供用户参考。这个例子会用到前面介绍的知识,是对前面知识的综合应用。此实例”vbaExample”主要实现了新建图层,设置活动图层和画圆的操作。

此实例在ZwCAD安装目录下的Sample\\VBA下,文件名为vbaExample.zvb。

8.1加载工程

请按照“2.一个简单的实例“的加载工程的步骤来加载此工程。

8.2运行此实例

在ZwCAD命令行处输入“-vbarun“命令,然后回车,最后在提示“宏名:”后输入“vbaExample”回车。结果如下图:

图层颜色的组合框选择“绿“,名字的文本框输入“Green”,选上“活动图层”(如下图)。

左键单击“新建图层”按钮。结果如下图:

可以看到增加了一个名字为“Green”颜色为绿色的图层。

接着运行画圆功能,圆心输入100,100,0。半径R输入50. 如下图:

左键单击“画圆”按钮。结果如下图:

8.3代码介绍

从命令行输入VBAIDE命令,或从“工具”菜单中选择“VB宏” ->“VB编辑器。如下图:

双击UserForm1,在右侧可看到对话框UserForm1。如下图: 查看代码

单击工程窗口的“查看代码“图标,会看到对象UserForm1对应的代码。下面按代码顺序介绍此代码。

Dim actLayer As Boolean

此语句定义一个Boolean类型变量actLayer来区别用户在UserForm1中是选择了“活动图层”还是“非活动图层”。

Private Sub activeLayer_Click()

ActLayer = True

End Sub

当在UserForm1中选择“活动图层”时,activeLayer_Click()这个过程会响应,设变量ActLayer为True.

Private Sub noActiveLayer_Click()

actLayer = False

End Sub

当在UserForm1中选择“非活动图层”时,noActiveLayer_Click()这个过程会响应,设变量ActLayer为False.

Private Sub buttonclose_Click() Unload Me End Sub

当在UserForm1中单击“关闭”按钮时buttonclose_Click()这个过程会响应,关闭UserForm1。

'调用vbaCircle画圆

Private Sub drawCircle_Click()

Dim center As New ZwcadPoint Dim rad As Double

Dim cir As ZwcadCircle

'将用户输入的坐标值赋给center center.x = UserForm1.coX.Text center.y = UserForm1.coY.Text center.z = UserForm1.coZ.Text

'将用户输入的半径赋给rad rad = UserForm1.r.Text

Set cir = ThisDocument.ModelSpace.AddCircle(center, rad) cir.Update

ThisDocument.ActiveViewport.ZoomAll

End Sub

当在UserForm1中单击“画圆”按钮时drawCircle_Click()这个宏会响应来画圆。宏根drawCircle_Click()据用户在UserForm1中输入的坐标和半径值来画圆。

Private Sub newLayer_Click()

Dim newLayer As ZwcadLayer

Set newLayer = ThisDocument.Layers.Add(layerName)

‘判断图层颜色

If StrComp(layerColor.SelText, “红”, 0) = 0 Then newLayer.Color = zcRed

ElseIf StrComp(layerColor.SelText, “绿”, 0) = 0 Then

newLayer.Color = zcGreen

ElseIf StrComp(layerColor.SelText, “兰”, 0) = 0 Then newLayer.Color = zcBlue End If

‘设置新建图层为活动图层

If actLayer = True Then

ThisDocument.activeLayer = newLayer End If End Sub

当在UserForm1中单击“新建图层”按钮时newLayer_Click()这个宏会响应,根据输入的名字和颜色来新建一个图层。

Private Sub UserForm_Initialize()

actLayer = False

‘初始化颜色组合框的值

layerColor.AddItem (“红”) layerColor.AddItem (“绿”) layerColor.AddItem (“兰”)

End Sub

这个宏主要完成一些初始化工作,将变量actLayer初始化为false,并初始化颜色组合框的值。

双击Module1会看到右侧的代码如下: Sub vbaExample()

UserForm1.Show

End Sub

宏vbaExample中的UserForm1.Show语句显示了对话框UserForm1.

9.ZwCAD常用VBA接口

9.1 ZwcadApplication接口

ZwCAD应用程序对象接口,可以通过此接口对当前ZwCAD平台应用程序对象进行操作和访问,在VBA中访问Application对象,通过ThisDocument.Application方法访问。Application对象的属性反映了主应用程序窗口的属性,可以通过改变Application对象的属性来改变主应用程序窗口的属性。Application对象的方法可以加载或者列出外部的应用程序和接口对象。

主要方法

RunCommand(Command As String)

在RunCommand命令中的Command参数处输入要运行的命令名,运行结果和在命令行处输入结果一样。

例如

Sub runExample()

RunCommand(“vbaman”) End Sub

运行宏runExample后会弹出vba管理器对话框。和在命令行处输入vbaman结果一样。 LoadSDS(ApplicationName As String)

方法LoadSDS主要用来加载制定的SDS应用程序。在ApplicationName参数里需要输入SDS应用程序路径名.

LoadLISP(ApplicationName As String)

方法LoadLisp主要用来加载制定的LISP应用程序。在ApplicationName参数里需要输入LISP应用程序路径名.

ListSDS()

方法ListSDS()主要用来返回已经加载的SDS应用程序。

9.2 ZwcadDocument接口

ZwCAD的文档对象,可以通过此接口来操作和访问指定的DWG文档,如果在VBA编辑器中,可以通过VBA工程的ThisDocument来访问当前活动文档。

主要方法

Regen([Viewports As ZcWhichViewport = zcActiveViewport])

Regen方法用来重新生成视口,当参数ZcWhichViewport = zcActiveViewport时,只重新生成当前视口。当参数ZcWhichViewport = zcAllViewports时,重新生成文档的所有视口。

PrintDrawing([nCopies As Integer = 1])

打印文档

PrintPreview()

用当前的打印设置来预览文档。 GetVariable(Name As String)

用来获得指定的系统变量值。Name参数为要输入的系统变量名。

SetVariable(Name As String, Value)

用来给指定的系统变量设置新值。Name参数为要设置的系统变量名,Value参数为系统变量的新值。

Save()

用来保存文档

SaveAs(SaveFile As String, [Version As ZcFileVersions = zcVersionR14]) 使用不同的名字来保存文档,并且可选不同的版本。参数SaveFile为要保存的文件名,参数ZcFileVersions为要保存的文件版本。 主要属性

Layers /ActiveLayer Layers代表文档的层集合

ActiveLayer代表当前活动的图层,新对象被创建时会被放在当前图层。 Linetypes/ ActiveLinetype Linetypes代表文档的线类型集合。

ActiveLinetype代表画图所使用的当前线类型。

TextStyles/ ActiveTextStyle

TextStyles代表文档类型集合,ActiveTextStyle代表画图所使用的当前文本类型。 DimensionStyles/ ActiveDimStyle

DimensionStyles代表维类型集合,ActiveDimStyle代表画图所使用的当前维类型。 ModelSpace

ModelSpace代表模型空间里所有对象的集合。不可以建立和删除ModelSpace集合,因为在图里始终只能有一个ModelSpace集合。

9.3 ZwcadBlock/ZwcadModelSpace/ZwcadPaperSpace接口

ZwcadBlock:有三种类型的块,简单块、用块、局块。简单块是一组对象的集合,这些对象可以组装起来形成单独的对象或块定义。可以在图形中插入,放大,和旋转简单块。

引用块是从另一个图形到当前图形的外部连接。只要原始图形改变引用块也会被更新。 布局块代表模型空间和图纸空间的几何排列。

ZwcadModelSpace:ModelSpace代表模型空间里所有对象的集合。ModelSpace集合实际上是块,所以拥有块的一些属性。

ZwcadPaperSpace:这个集合代表活动图纸空间布局的所有对象。如果不同的图纸空间的布局被设为活动的,PaperSpace将会改变以反映新的活动图纸空间的数据。

这三个接口具有很多相同的方法。下面介绍的方法就是三个接口所共有的。

主要方法

InsertBlock(InsertionPoint As ZwcadPoint, BlockName As String, [XScale As Double = 1], [YScale As Double = 1], [ZScale As Double = 1], [Rotation As Double]) As ZwcadBlockInsert

InsertBlock方法同来插入图形文件或者已经命名的块。 InsertionPoint参数是块插入的位置。BlockName参数是要插入的块名,Xscale,Yscale,Zscale参数为插入块的比例,默认情况下为1。Rotation参数为插入块的旋转角度。

Item(Index As Long) As Object

Item方法通过指定的索引来获得成员对象。Item参数为将要查询的对象成员的索引。返回值为在给定索引位置的对象。

AddLine(StartPoint As ZwcadPoint, EndPoint As ZwcadPoint) As ZwcadLine

AddLine方法通过传进的两个点来建立一条线。StartPoint参数为线的起点,EndPoint参数为线的终点。返回值为新创建的线对象。

主要属性 Count

Count代表集合中实体个数。

9.4 ZwcadCircle/ZwcadLine/ZwcadPolyline接口

这三个接口分别代表圆、线和多段线。这三个接口具有很多相同的方法。下面介绍的方法和属性就是三个接口所共有的。

主要方法 Update()

当圆、线等实体修改后,Update会更新这些实体。

Move(Point1 As ZwcadPoint, Point2 As ZwcadPoint) Move方法使对象沿着向量方向移动。参数Point1指定移动向量的第一个点,参数Point2指定移动向量的第二个点。

主要属性

Color

Color属性主要用来指定对象的颜色。 Visible

Visible属性主要用来指定对象是否可见。

10.移植VBA工程

多数同类CAD软件都支持VBA二次开发,但其他CAD软件的VBA工程不能直接移植到ZwCAD上,就是说,不可以直接在ZwCAD上面加载其它同类CAD软件的VBA工程文件,但因为VBA工程实际上只是一些文本信息,包括VBA宏命令及脚本语言,所以可以通过“导出文件”、“导入文件”的方法来或者“复制/粘贴”的方法来把已有的VBA代码移植ZwCAD上来。

我们这里以AutoCAD的工程为例,首先将AutoCAD的VBA工程模块导出。用鼠标单击“模块1”图标然后单击右键,在弹出菜单中选择“导出文件”。如下图:

单击“导出文件”后,会弹出“导出文件”对话框,如下图:

然后选择目录保存即可。

接着将导出的文件导入ZwCAD中,在ZwCAD的工程窗口单击右键,在弹出菜单中选

择“导入文件”。如下图:

单击“导入文件”后,会弹出“导入文件”对话框,如下图:

然后选择要导入的文件(从AutoCAD中导出的文件),单击打开即可。

同样对于工程中的“窗体”和“类模块”都可以按照上面的方法移植。但是对于“ThisDocument”中的内容是不可以通过这种方法的,如AutoCAD中“ThisDrawing”中的内容就不能直接导入到“ThisDocument”里。可以将AutoCAD中“ThisDrawing”中的代码复制到ZwCAD的“ThisDocument”中以实现移植。

还可以使用“复制”、“粘贴”的方法来移植VBA工程,例如如果要将AutoCAD中的“模块”移到ZwCAD中只需在复制AutoCAD中的“模块”代码,然后在ZwCAD中新建一个模块,粘贴即可。同理对于工程中的“窗体”、“类模块”、“ThisDocument”都可以按照上面的方法移植。

但需要注意的是,可能代码中会用到这些模块的名字,包括“用户窗体”、“类模块”,所以在移植模块的时候,最好把模块的名字设置成跟原来的模块名字一样,否则的话有可能影响代码的运行。

在VBA工程中常用的接口对象有Application、Document、ModelSpace、PaperSpace等,这些VBA对象名字在不同的CAD软件中都大同小异。而ZwCAD中的接口对象名称都以Zwcad为头,如ZwcadApplication、ZwcadDocument、ZwcadModelSpace、ZwcadPaperSpace等。所

以从其他CAD软件移植的工程代码中的接口对象名称等都要做一定的修改才能运行,但因为名字都大同小异,主要是名字的前缀不一样,但绝大多数的函数名字和属性都是一样的,类型也大同小异,所以只要做一些文本查找替换就行,而ZwCAD平台所带的VBA编辑器,具有非常强大的编辑功能,简单的文本查找替换是非常容易方便的事情,因此,从其它CAD软件移植VBA工程到ZwCAD上也是非常容易方便的。

另外,早期的ZwCAD版本将VBA工程文件保存成.vbi文件,包括启动时自动加载的CommonProject.vbi文件,现在都已经不再采用这种文件格式了,在新版本的ZwCAD中,VBA工程文件统一保存为.zvb格式,如果用户需要将旧版本的VBA工程移植到新版的ZwCAD上,可以参考上面所说的方法进行移植操作。

11.对象模型

Application Documents Face3D Polyline3D Solid Document Blocks Block ModelSpace PaperSpace PViewport DimensionStyles DimensionStyle Arc AttributeDef BlockInsert Attributes Circle Dim3PointAngular Attribute DimAligneDimAngular DimDiameDimOrdinate DimRadial DimRotateLayers Linetypes RegisteredApplications Layer Linetype RegisteredApplication Ellipse ExternalReference Image InfiniteLine SelectionSets UserCoordSystems TextStyles Viewports SelectionSet UserCoordSystem TextStyle Leader LWPolyline View Line Utility MText Point Library Matrix Points Vector Point PolyfaceMesh Polyline PolygonMesh Ray Shape Solid Spline Text Tolerance Trace

本文来源:https://www.bwwdw.com/article/mt1w.html

Top