| 网站首页 考试频道 交流论坛 |
![]() |
|
1 前言
Visual Basicfor Application(VBA)是Microsoft面向最终用户的应用软件编程语言。它最早出现于Microsoft的Excel和Project中,如今VBA已成为VB和所有Office产品的组件。常用的绘图软件AutoCAD也已支持VBA作为二次开发工具。
VBA最大特点和最大优点是利用面向对象(OOP)的ActiveXAutomation技术,使语言的引擎在技术上与开发环境分离。它的功能在很大程度上依赖于它的客户显露的Automation接口。同时,由于VBA是基于ActiveXAutomation技术,它可以使用任何Automation技术的应用程序共同工作。
VBA作为一个集成的开发环境,它提供了高质量的用户化编程能力,能够使AutoCAD数据与其它的VBA应用程序,如MicrosoftExcel软件,直接共享,实现无缝连接,交换数据非常方便。
4.1
Dim Excel AsExcel.Application
'激活要与之通信的Excel应用程序
On Error Resume Next
Set Excel = GetObject(, "Excel.Application")
If Err <> 0 Then
Set Excel = CreateObject("Excel.Application")
End If
4.2
4.2.1
4.2.2
4.2.3
Dim i As Integer
Dimlineobj As AcadLine
DimsPnt(0 To 2) As Double
DimePnt(0 To 2) As Double
Worksheets("sheet1").Activate
i =3 ‘由第三行起
Do Untilcells(i, 1).Value = ""
Ifcells(i + 1, 1) = 0 Then
Exit Do
End If
sPnt(0) =cells(i, 1).Value
sPnt(1) =10 * cells(i, 2).Value
sPnt(2) =0
ePnt(0) =cells(i + 1, 1).Value
ePnt(1) =10 * cells(i + 1, 2).Value
ePnt(2) =0
Setlineobj = ThisDrawing.ModelSpace.AddLine(sPnt, ePnt)
i = i + 1
Loop
4.3
4.3.1
4.3.2
4.4
4.4.1
4.4.2
5.1
5.2
5.3
Sub ZDM()
Dim ExcelAs Excel.Application
DimExcelSheet As Object
DimExcelWorkbook As Object
Dim i AsInteger
Dimlineobj As AcadLine
Dimklineobj As AcadLine
DimsPnt(0 To 2) As Double
DimePnt(0 To 2) As Double
DimkPnt(0 To 2) As Double
DimhPnt(0 To 2) As Double
DimksPnt(0 To 2) As Double
DimkePnt(0 To 2) As Double
DimdmPnt(0 To 2) As Double
DimtextObj As AcadText
DimtxtStr As String
DiminsPnt As Variant
DimtxtHeight As Double
DimlayObj As AcadLayer
DimnewLayer As AcadLayer
SetlayObj = ThisDrawing.Layers.Add("标注")
SetlayObj = ThisDrawing.Layers.Add("地面线")
SetlayObj = ThisDrawing.Layers.Add("网格线")
DimatTxtobj As AcadTextStyle
SetatTxtobj = ThisDrawing.ActiveTextStyle
atTxtobj.fontFile = "c:/windows/fonts/simfang.ttf"
'创建Excel应用程序
On ErrorResume Next
Set Excel= GetObject(, "Excel.Application")
If Err <>0 Then
SetExcel = CreateObject("Excel.Application")
End If
'打开Excel表
ExcelName= InputBox("路径:")
Excel.Workbooks.Open ExcelName
'表格不可见
Excel.Visible = False
'读入坐标点画地面线
Worksheets("sheet1").Activate
i = 3
Do Untilcells(i, 1).Value = ""
Ifcells(i + 1, 1) = 0 Then
Exit Do
End If
sPnt(0) =cells(i, 1).Value
sPnt(1) =10 * cells(i, 2).Value
sPnt(2) =0
ePnt(0) =cells(i + 1, 1).Value
ePnt(1) =10 * cells(i + 1, 2).Value
ePnt(2) =0
SetnewLayer = ThisDrawing.Layers("地面线")
ThisDrawing.ActiveLayer = newLayer
newLayer.Color = acWhite
Setlineobj = ThisDrawing.ModelSpace.AddLine(sPnt, ePnt)
Ifcells(i, 2) = "" Then lineobj.Delete
i = i + 1
Loop
'画辅助网格线及插入数据
i = 3
Do Untilcells(i, 1).Value = ""
'画辅助网格线
ksPnt(0)= cells(i, 1).Value: ksPnt(1) = 0: ksPnt(2) = 0
kePnt(0)= cells(i, 1).Value: kePnt(1) = 10 * cells(i, 2).Value: kePnt(2) = 0
dmPnt(0)= cells(i, 1).Value: dmPnt(1) = 48: dmPnt(2) = 0
SetnewLayer = ThisDrawing.Layers("网格线")
ThisDrawing.ActiveLayer = newLayer
newLayer.Color = acGreen
Setklineobj = ThisDrawing.ModelSpace.AddLine(ksPnt, kePnt)
'插入桩号
Set newLayer= ThisDrawing.Layers("标注")
ThisDrawing.ActiveLayer = newLayer
newLayer.Color = acCyan
a =cells(i, 1).Value
b = Int(a/ 1000)
c =Format((a - b * 1000), "000.000")
'd = a -Int(a)
E ="+" + Format(c, "000.000")
If c = 0Then E = "K" + LTrim(Str(b))
txtStr =E
txtHeight= 4
textObj.Rotation = 3.14159 / 2
insPnt =ksPnt
SettextObj = ThisDrawing.ModelSpace.AddText(txtStr, insPnt, txtHeight)
Ifcells(i, 2) = "" Then textObj.Delete
'插入地面高程
txtStr =Format(cells(i, 2).Value, "###0.##0")
txtHeight= 4
textObj.Rotation = 3.14159 / 2
insPnt =dmPnt
SettextObj = ThisDrawing.ModelSpace.AddText(txtStr, insPnt, txtHeight)
i = i + 1
Loop
ZoomAll
'该语句用来等待查看显示结果
MsgBox"按‘确定’键将关闭Excel的运行!"
'保存传过来的数据
ExcelWorkbook.Save
'关闭Excel应用程序
Excel.Application.Quit
'删除Excel应用程序实例
Set Excel= Nothing
End Sub
6.1
6.2