第23卷 第4期2001年12月
武汉理工大学学报・信息与管理工程版
JOURNA L OF W UT(I NFORMATI ON&MANAGE ME NT E NGI NEERI NG)
V ol.23N o.4
Dec.2001
文章编号:10072144X(2001)0420042203
使用VB应用程序调用AutoCAD和
Excel软件的方法
龙晓林1,王国顺2
(1.武汉理工大学自动化学院,湖北武汉 430070;2.武汉大学动力与机械学院,湖北武汉 430072)
摘 要:VB(Visual Basic)是一种通用性很强的程序设计语言,具有快速的程序开发环境,能迅速有效地编
制程序界面,在VB环境下可以开发出许多应用软件。文中介绍了使用VB开发应用程序调用AutoC AD、Excel和OCX等软件的方法及调用时应注意的技术问题,并给出了一系列程序代码。
关键词:软件;Visual Basic;数据库
中图法分类号:TP311.52   文献标识码:A
1 前 言
VB(Visual Basic)是一种通用性很强的程序设计语言,具有快速的程序开发环境,能迅速有效地编制程序界面。在VB5.0及VB6.0的环境下可以轻易实现数据库、多媒体、Internet程序、客户/服务机程序的开发,所以受到了广大应用程序开发者的欢迎。虽然Autodesk并未宣布Auto2 C AD支援VB,但事实上VB可以当作AutoC AD的发展工具。笔者在利用VB开发多媒体教育软件的过程中,需要在VB环境下调用AutoC AD、3DMAX等绘图和动画制作软件以及其他软件,如W ord、Excel,从而在实践中探索出使用VB控制AutoC AD等软件的方法。
2 调用AutoCAD软件的步骤
2.1 AutoC AD安装与VB系统设定
在安装AutoC AD时,除了安装VBA发展工具外,还应安装AutoC AD的Object说明书。之后执行VB,新建一个空白工程。在VB中选取“工程→引用→AutoC AD2000Object Library、Auto2 C A D/ObjectDBX C omm on Object Library”。在引用项目加入了AC AD Object Library后,在VB中用“视图→对象浏览器”来查看可使用的AutoC AD 物件,只要物件可以浏览,则Visual Basic可以使用此物件[2]。
2.2 AutoC AD物件的建立
因为AC AD物件在大部分子程序中都会使用到,因此把AC AD object设为全域变量:
Dim acadApp As Object
’建立全域的AC AD object
可以选择在Load F orm或任何其他子程序中使用AutoC AD物件,下面范例是在Load F orm时建立AutoC AD物件,必须将其Visible属性设为T URE,以防硬盘空转[2]。
Private Sub F orm-Load()
visual basic还有人用On Error Resume Next
′如果目前系统中已执行AutoC AD,则取得已执行AutoC AD物件
Set acadApp=G etObject(,“AutoC AD.Application”)
I f Err Then
Err.Clear
′如果目前系统尚未执行AutoC AD则建立Auto2 C AD物件
Set acadApp=CreateObject(“AutoC AD.Applica2 tion”)End I f
acadApp.Visible=T rue
′请务必将物件Visible属性设为T rue
End Sub
在执行这个程序前,若系统已执行Auto2 C A D,应先结束AutoC AD程序,否则无法看到执行结果,因为程序取得物件还未对物件做任何处理。执行这个程序则程序会启动AutoC AD,从执行的过程可以看到VB的方便,连程序都不必编辑,甚至不必先存档就可以执行。当建立acadApp
收稿日期:2001208217.
作者简介:龙晓林(19682),女,湖北荆州人,武汉理工大学自动化学院讲师.
物件后,就可以使用物件所提供的菜单,如利用Add Line method来绘制矩形。AddLine是M od2 elS pace Entities C ollection Object物件的method,而M odelS pace Entities C ollection Object的父物件是D ocument Object,D ocument Object的父物件是Ap2 plication Object,因此要由acadApp物件来建立Line 物件必须借用D ocument Object与M odelS pace Ob2 ject;执行Line后,应执行acadApp.Update method 才能让方框即时显示在屏幕上。
2.3 读取图档中所有T ext及Mtext文字
acad Object将目前开启的图档中所有绘图物件都放在ActiveD ocument中,而ActiveD ocument中所有M odelS pace中的物件都放M odelS pace中,因此由ActiveD ocument.M odelS pace物件的item method中取出物件,并依物件的EntityT ype属性来判断是否为文字,即可取出图档中所有文字[1]。Private Sub QueryString-Click()
Dim i As Integer
Dim retObj As Object
With acadApp.ActiveD ocument.M odelS pace
F or i=0T o.C ount-1Step1
Set retObj=.Item(i)
I f retObj.EntityT ype=acT ext Or retObj.EntityT ype= acMtext Then
String List.AddItem retObj.T extString,0
End I f
Next i
End With
String List.Refresh
End Sub
2.4 将图档中所有Line的资料写入资料库
如果想将C AD资料写入数据库,可在VB中选取“工程→引用→Micros oft DAO3.51Object Li2 brary”,使
得在VB中可使用DAO,下面给出了建立test.mdb数据库并将图档中所有Line的资料写入数据库中的程序[1]。有关数据库的建立方式可参阅Visual Basic OnlineBook的说明。
Private Sub W LineDB-Click()
Dim MyDB As Database,MyWs As W orkspace
Dim LineTd As T ableDef
Dim LineFlds(7)As Field
Dim filePath As String
Dim rstLine As Recordset
Dim i As Integer
Dim retObj As Object
Dim retPt As Variant filePath=App.Path+“\test.mdb”′Create w orkspaces
Set MyWs=DBEngine.W orkspaces(0)′Create Database
Set MyDB=MyWs.CreateDatabase(filePath, dbLangG eneral,dbVersion30)′Create T able
Set LineTd=MyDB.CreateT ableDef(“Lines”)
′设定栏位资料
Set LineFlds(0)=LineTd.CreateField(“LI NE-I D”, dbLong)
′使其成为计数资料栏。
LineFlds(0).Attributes=dbAutoIncrField
Set LineFlds(1)=LineTd.CreateField(“LI NE-P1X”, dbD ouble)
Set LineFlds(2)=LineTd.CreateField(“LI NE-P1Y”, dbD ouble)
Set LineFlds(3)=LineTd.CreateField(“LI NE-P1Z”, dbD ouble)
Set LineFlds(4)=LineTd.CreateField(“LI NE-P2X”, dbD ouble)
Set LineFlds(5)=LineTd.CreateField(“LI NE-P2Y”, dbD ouble)
Set LineFlds(6)=LineTd.CreateField(“LI NE-P2Z”, dbD ouble)
′将栏位加入T able
LineTd.Fields.Append LineFlds(0)
LineTd.Fields.Append LineFlds(1)
LineTd.Fields.Append LineFlds(2)
LineTd.Fields.Append LineFlds(3)
LineTd.Fields.Append LineFlds(4)
LineTd.Fields.Append LineFlds(5)
LineTd.Fields.Append LineFlds(6)
MyDB.T ableDefs.Append LineTd
Set rstLine=MyDB.OpenRecordset(“Lines”)
With acadApp.ActiveD ocument.M odelS pace
F or i=0T o.C ount-1Step1
Set retObj=.Item(i)
I f retObj.EntityT ype=acLine Then
rstLine.AddNew
retPt=retObj.startP oint
rstLine!LI NE-P1X=retPt(0)
rstLine!LI NE-P1Y=retPt(1)
rstLine!LI NE-P1Z=retPt(2)
retPt=retObj.startP oint
rstLine!LI NE-P2X=retPt(0)
rstLine!LI NE-P2Y=retPt(1)
34
第23卷第4期     龙晓林等:使用VB应用程序调用AutoC AD和Excel软件的方法
rstLine!LI NE-P2Z=retPt(2)
rstLine.Update
End I f
Next i
End With
rstLine.Close
MyDB.Close
End Sub
3 调用Excel软件的方法
3.1 将图档中所有Line的资料写入Excel活
页簿
VB可以控制AutoC AD,当然也可控制Excel 或其他O ffice程序,在VB中选取“工程→引用→Micros oft Excel9.0Object Library”,在VB中启动Excel的过程与启动AutoC AD物件的方式相同。将图档中Line的资料写入Excel活页簿中的范例这里限于篇幅忽略。也可以利用Excel来处理运算与分析的功能,以往需要借助ADS或ARX的计算能力才能完成的工作,都可借此方式完成[2]。3.2 在VB中使用OCX
新的开发工具最好能使用旧的程序码,否则以往所写的运算式或演算法都需改,这样就更麻烦且不切实际,利用OCX可将旧C或C++程序改写并提供给VB使用。在使用OCX之前必须先将OCX注册,这里的范例注册方式为,在VB中选取“工程→部件”,并点取“printer ActiveX C ontrol m odual”,printerocx 程序很大,这里忽略。范例中的OCX中只包含一个QueryPrinter()的Method,作用为读取系统中Printer清单,下面的程序将OCX所取得资料显示在Edit Box中[2]。
Private Sub ListPrinter-Click()
PrinterListT ext.T ext=PrnOcx.QueryPrinter PrinterListT ext.Refresh
End Sub
4 结束语
VB的功能非常强大,对于实用软件开发和工程一般应用,只要不涉及开发程序设计工具或环境,选择VB程序设计工具,具有开发周期短、见效快的特点。就运行速度来说,现阶段使用ARX 来开发AutoC AD还是占有优势,但是新版VB提供了原始码编译和速度优化功能,可以大幅度提高程序运行速度,并且随着计算机运行速度的增加,用VB开发的应用程序运行速度也将不再成为突出问题[3]。VB具有强大的功能和实用方便的特点,对VB感兴趣的开发人员完全可以应用VB作为开发工具来开发出简便实用的应用程序。
参考文献:
[1] 王国强,李家富.VB多媒体编程技术[M].北京:人
民邮电出版社,  .
[2] Evangelos Petrouts os.VB6.0从入门到精通[M].邱仲
潘译.北京:电子工业出版社,2000.
[3] 王道义,乔陶鹏.VB6.0使用详解[M].北京:机械
工业出版社,1999.
Transferring AutoCAD and Excel by Using Visual B asic
LONG Xiao2lin,WANG Guo2shun
Abstract:VB(Visual Basic)is a programming language with a strong general2purpose.I t provides a g ood condition to develop programs easily and quickly,and effectively programs inter faces.S ome applied programs can be developed with VB,such as a program of database,multimedia,internet and Client/Server.A method of how to trans fer AutoC AD,Excel and OCX with VB and problems arising from this trans ferring are introduced.Ways to s olve these problems are als o presented.
K ey w ords:AutoC AD Object;Visual Basic;Database
LONG Xiao2lin:Lect.;Department of Automation,W UT,Wuhan430070,China.
[责任编辑:李道文] 44  武汉理工大学学报・信息与管理工程版           2001年12月

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。