VBA和VB应用程序之异同和相互移植

来源:百度文库 编辑:神马文学网 时间:2024/04/23 19:34:13
VBA和VB应用程序之异同和相互移植
Microsoft VBA是一个面向对象的编程环境。它提供了与Visual Basic (VB)相似的丰富的开发能力。VBA和VB的最主要的区别在于VBA运行在与AutoCAD相同的处理空间,从而提供了一个具有AutoCAD智能的,非常快的编程环境。

VBA同时也提供与其它有VBA编程能力的应用程序的应用集成。这意味着AutoCAD利用其它应用程序的对象库可以控制其它应用程序,例如Microsoft Word和Excel。

VB是一个独立的开发版本,必须单独购买,但是它为AutoCAD VBA提供了许多附加的组件,象外部数据库引擎和报告输出能力等。

执行AutoCAD VBA有四点好处:

Visual Basic编程环境易学易用;
VBA运行在与AutoCAD相同的处理空间。使程序执行速度非常快。
对话框构建快速,高效。允许开发者快速地定制程序原形和收到TRANBBS设计的及时反馈。
工程可以单独存在,亦可嵌入在图形中。这就给了开发者在发行他们的应用程序时极大的灵活性。
要想用VB改写VBA的示例代码,你必须首先引用AutoCAD类型库。在VB里,从工程选单中选择引用选项激发引用对话框。从引用对话框,选择AutoCAD 版本15然后击OK。
下一步,在示例代码中用用户定义的指向当前活动文档的专门变量替代所有对ThisDrawing的引用。为了达到这个目的,定义一个AutoCAD应用程序的变量(acadApp)和一个当前文档的变量(acadDoc)。然后,设置应用程序变量(acadApp)为当前AutoCAD应用程序。

如果AutoCAD正在运行,GetObject方法就提取出AutoCAD应用程序对象。如果AutoCAD没有正在运行,一个错误就会发生,VB程序就应该捕捉并且清除它。CreateObject方法然后试图生成一个AutoCAD应用程序对象。如果成功,AutoCAD就启动;如果失败,一个显示错误描述的信息框就会出现。

下面的代码示例演示了VB如何连接到AutoCAD并且如何用Clear和Description属性处理错误信息变量Err。如果你的编程环境不支持这些属性,你需要适当地修改示例。

示例一:从Visual Basic 连接到AutoCAD


Sub ConnectToAcad()
Dim acadApp As AcadApplication
On Error Resume Next
Set acadApp = GetObject(, "AutoCAD.Application")
If Err Then
Err.Clear
Set acadApp = CreateObject("AutoCAD.Application")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If
MsgBox "Now running " + acadApp.Name + _
" version " + acadApp.Version
End Sub

下一步,设置文档变量为AutoCAD应用程序的文档对象。文档对象从应用程序对象的ActiveDocument属性返回。
 

示例二:获取AutoCAD文挡对象
 

Dim acadDoc as AcadDocument
Set acadDoc = acadApp.ActiveDocument
 

从这里开始,就可以使用acadDoc变量来引用当前的AutoCAD图形。

注意:当运行多个AutoCAD例程时,GetObject方法将返回在Windows运行对象表中的第一个AutoCAD例程。关于运行对象表(ROT)和GetObject方法请参看Microsoft Visual Basic相应文档。


示例三:VBA和VB代码对照


用VBA生成一条线

Sub AddLineVBA()
' This example adds a line
' in model space
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
' Define the start and end
' points for the line
startPoint(0) = 1
startPoint(1) = 1
startPoint(2) = 0
endPoint(0) = 5
endPoint(1) = 5
endPoint(2) = 0

' Create the line in model space
Set lineObj = ThisDrawing. _
ModelSpace.AddLine _
(startPoint, endPoint)

' Zoom in on the newly created line
ZoomAll
End Sub
 

用VB生成一条线

Sub AddLineVB()
On Error Resume Next
' Connect to the AutoCAD application
Dim acadApp As AcadApplication
Set acadApp = GetObject _
(, "AutoCAD.Application")
If Err Then
Err.Clear
Set acadApp = CreateObject _
("AutoCAD.Application")
If Err Then
MsgBox Err.Description
Exit Sub
End If
End If

' Connect to the AutoCAD drawing
Dim acadDoc As AcadDocument

Set acadDoc = acadApp.ActiveDocument
' Establish the endpoints of the line
Dim lineObj As AcadLine
Dim startPoint(0 To 2) As Double
Dim endPoint(0 To 2) As Double
startPoint(0) = 1
startPoint(1) = 1
startPoint(2) = 0
endPoint(0) = 5
endPoint(1) = 5
endPoint(2) = 0
' Create a Line object in model space
Set lineObj = acadDoc.ModelSpace.AddLine _
(startPoint, endPoint)
ZoomAll
End Sub