资源预览内容
第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
亲,该文档总共4页全部预览完了,如果喜欢就下载吧!
资源描述
VBA 读写 EXCEL 文档的一般方法与 ACAD 的 VBA 一样,MS EXCEL 也提供 ActiveX 对象模型,在 ACAD VBA 开发中使用EXCEL 文档同样也要通过其 ActiveX 对象模型。详细介绍 EXCEL 的 ActiveX 对象模型恐怕离 ACAD 太远,也没有必要。在这只说说获取 EXCEL 工作表指定单元格内容的方法。与 ACAD 的 ActiveX 对象模型一样, EXCEL 的 ActiveX 对象模型其顶层对象也是 Application 对象,EXCEL.Application 对象提供的 Workbooks 工作簿集合对象包含有全部已经启动的 EXCEL 工作簿对象,我们可以使用 Application 对象的 ActiveWorkbook 方法来获取当前活动的工作簿对象,也可以使用 Workbooks(Index)方法来得到指定的工作簿对象。获取要操作的工作簿后,需要获取工作簿中的指定工作表(worksheet)才能访问到其中的指定单元格内容。EXCEL 的单元格的确定由行和列唯一指定,例如 Range(B4)表示第 4 行第 2 列。下面的代码从 EXCEL 文档中读出数据并在 ACAD 图形的模型空间中自动根据 EXCEL 文档内容绘图。行号是我加上的,真正的程序不需要它们。1 Sub ExcelRead()2 Dim ExcelApp As New Excel.Application3 ExcelApp.Workbooks.Open d:book1.xls, , ReadOnly4 Dim pt1(0 To 2) As Double, pt2(0 To 2) As Double5 Dim Rad As Double6 Dim i As Integer7 i = 28 With ExcelApp.ActiveWorkbook.Worksheets(sheet1)9 Do10 Select Case .Range(A & i)11 Case 直线:12 pt1(0) = .Range(B & i)13 pt1(1) = .Range(C & i)14 pt1(2) = 015 pt2(0) = .Range(D & i)16 pt2(1) = .Range(E & i)17 pt2(0) = 018 ThisDrawing.ModelSpace.AddLine pt1, pt219 Case 圆:20 pt1(0) = .Range(B & i)21 pt1(1) = .Range(C & i)22 pt1(2) = 023 Rad = .Range(D & i)24 ThisDrawing.ModelSpace.AddCircle pt1, Rad25 Case Else:26 Exit Do27 End Select28 i = i + 129 Loop30 End With31 ExcelApp.Workbooks.Close32 ExcelApp.Quit33 ThisDrawing.Application.Update34 End Sub运行这段代码需要加载 EXCEL ActiveX 对象模型。在 ACAD VBA 编辑器中选择“工具”菜单-“引用”,选择合适的 Microsoft Excel Object Library。这段代码第 2 行先声明并新建一个 EXCEL.Application 对象。新建 EXCEL 对象,也可以调用VB 库函数 CreateObject():Dim ExcelApp As Excel.ApplicationSet ExcelApp = CreateObject(Microsoft Excel)程序第 3 行调用 EXCEL 的 Application 对象的 Workbooks 集合的 Open 方法,以只读方式打开指定的 EXCEL 文档。第 4-7 行声明一些变量。i 用于表明要操作的 EXCEL 单元格的行号,通常 EXCEL 文档第 1 行是表头说明,我们从第 2 行开始读数据。程序第 8 行告诉编译程序以下对当前活动的 EXCEL 文档的 Sheet1 工作表进行操作。程序第 9 行到第 29 行循环读取 EXCEL 文档的 Sheet1 工作表中对于自动绘图有用的单元格内容并在 ACAD 模型空间中绘图。循环内部用 Select Case 语句根据 EXCEL 文档的第 1 列内容选择不同的绘图方法。为了说明问题,程序仅对直线和圆两种 ACAD 图元对象进行操作并将其它对象出现作为循环退出条件。实际编程时可以对更多 ACAD 图元对象进行操作。程序第 31、32 行释放不再使用的 EXCEL 对象,第 33 行刷新 ACAD 图形以显示自动绘制的图形。 下面的代码由用户在 ACAD 图形中选择对象并将对象部分属性写入 EXCEL 文档。Sub WriteExcel()Dim ExcelApp As New Excel.ApplicationDim ExcelWkbk As Excel.WorkbookSet ExcelWkbk = ExcelApp.Workbooks.AddDim sel As AcadSelectionSetDim i As Integeri = 2On Error Resume NextSet sel = ThisDrawing.SelectionSets.Add(ssel)If Err ThenErr.ClearSet sel = ThisDrawing.SelectionSets.Item(ssel)End IfOn Error GoTo 0sel.SelectOnScreenDim Ent As AcadEntityDim pt1 As Variant, pt2 As VariantMsgBox ExcelWkbk.NameWith ExcelWkbk.Worksheets(sheet1)For Each Ent In selSelect Case UCase(Ent.ObjectName)Case ACDBLINE:.Range(A & i) = 直线pt1 = Ent.StartPointpt2 = Ent.EndPoint.Range(B & i) = pt1(0).Range(c & i) = pt1(1).Range(D & i) = pt2(0).Range(E & i) = pt2(1)i = i + 1Case ACDBCIRCLE:.Range(A & i) = 圆pt1 = Ent.Center.Range(B & i) = pt1(0).Range(C & i) = pt1(1).Range(D & i) = Ent.Radiusi = i + 1Case Else:End SelectNext EntEnd WithExcelApp.ActiveWorkbook.SaveAs d:book1.xlsExcelApp.Workbooks.CloseExcelApp.Quitsel.DeleteEnd Sub VBA 读写 EXCEL 文档的一般方法与 ACAD 的 VBA 一样,MS EXCEL 也提供 ActiveX 对象模型,在 ACAD VBA 开发中使用 EXCEL 文档同样也要通过其 ActiveX 对象模型。详细介绍 EXCEL 的 ActiveX 对象模型恐怕离 ACAD 太远,也没有必要。在这只说说获取 EXCEL 工作表指定单元格内容的方法。与 ACAD 的 ActiveX 对象模型一样, EXCEL 的 ActiveX 对象模型其顶层对象也是 Application 对象,EXCEL.Application 对象提供的 Workbooks 工作簿集合对象包含有全部已经启动的 EXCEL工作簿对象,我们可以使用 Application 对象的 ActiveWorkbook 方法来获取当前活动的工作簿对象,也可以使用 Workbooks(Index)方法来得到指定的工作簿对象。获取要操作的工作簿后,需要获取工作簿中的指定工作表(worksheet)才能访问到其中的指定单元格内容。EXCEL 的单元格的确定由行和列唯一指定,例如 Range(B4)表示第 4 行第 2 列。下面的代码从 EXCEL 文档中读出数据并在 ACAD 图形的模型空间中自动根据 EXCEL 文档内容绘图。行号是我加上的,真正的程序不需要它们。1 Sub ExcelRead()2 Dim ExcelApp As New Excel.Application3 ExcelApp.Workbooks.Open d:book1.xls, , ReadOnly4 Dim pt1(0 To 2) As Double, pt2(0 To 2) As Double5 Dim Rad As Double6 Dim i As Integer7 i = 28 With ExcelApp.ActiveWorkbook.Worksheets(sheet1)9 Do10 Select Case .Range(A & i)11 Case 直线:12 pt1(0) = .Range(B & i)13 pt1(1) = .Range(C & i)14 pt1(2) = 015 pt2(0) = .Range(D & i)16 pt2(1) = .Range(E & i)17 pt2(0) = 018 ThisDrawing.ModelSpace.AddLine pt1, pt219 Case 圆:20 pt1(0) = .Range(B & i)21 pt1(1) = .Range(C & i)22 pt1(2) = 023 Rad = .Range(D & i)24 ThisDrawing.ModelSpace.AddCircle pt1, Rad25 Case Else:26 Exit Do27 End Select28 i = i + 129 Loop30 End With31 ExcelApp.Workbooks.Close32 ExcelApp.Quit33 ThisDrawing.Application.Update34 End Sub运行这段代码需要加载 EXCEL ActiveX 对象模型。在 ACAD VBA 编辑器中选择“工具”菜单-“引用”,选择合适的 Micro
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号