VBA读写EXCEL文档的一般方法

上传人:平*** 文档编号:12802360 上传时间:2017-10-20 格式:DOC 页数:4 大小:46.50KB
返回 下载 相关 举报
VBA读写EXCEL文档的一般方法_第1页
第1页 / 共4页
VBA读写EXCEL文档的一般方法_第2页
第2页 / 共4页
VBA读写EXCEL文档的一般方法_第3页
第3页 / 共4页
VBA读写EXCEL文档的一般方法_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《VBA读写EXCEL文档的一般方法》由会员分享,可在线阅读,更多相关《VBA读写EXCEL文档的一般方法(4页珍藏版)》请在金锄头文库上搜索。

1、 VBA 读写 EXCEL 文档的一般方法与 ACAD 的 VBA 一样,MS EXCEL 也提供 ActiveX 对象模型,在 ACAD VBA 开发中使用EXCEL 文档同样也要通过其 ActiveX 对象模型。详细介绍 EXCEL 的 ActiveX 对象模型恐怕离 ACAD 太远,也没有必要。在这只说说获取 EXCEL 工作表指定单元格内容的方法。与 ACAD 的 ActiveX 对象模型一样, EXCEL 的 ActiveX 对象模型其顶层对象也是 Application 对象,EXCEL.Application 对象提供的 Workbooks 工作簿集合对象包含有全部已经启动的 E

2、XCEL 工作簿对象,我们可以使用 Application 对象的 ActiveWorkbook 方法来获取当前活动的工作簿对象,也可以使用 Workbooks(Index)方法来得到指定的工作簿对象。获取要操作的工作簿后,需要获取工作簿中的指定工作表(worksheet)才能访问到其中的指定单元格内容。EXCEL 的单元格的确定由行和列唯一指定,例如 Range(B4)表示第 4 行第 2 列。下面的代码从 EXCEL 文档中读出数据并在 ACAD 图形的模型空间中自动根据 EXCEL 文档内容绘图。行号是我加上的,真正的程序不需要它们。1 Sub ExcelRead()2 Dim Exce

3、lApp 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) =

4、 .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

5、 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

6、 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 文档的

7、Sheet1 工作表中对于自动绘图有用的单元格内容并在 ACAD 模型空间中绘图。循环内部用 Select Case 语句根据 EXCEL 文档的第 1 列内容选择不同的绘图方法。为了说明问题,程序仅对直线和圆两种 ACAD 图元对象进行操作并将其它对象出现作为循环退出条件。实际编程时可以对更多 ACAD 图元对象进行操作。程序第 31、32 行释放不再使用的 EXCEL 对象,第 33 行刷新 ACAD 图形以显示自动绘制的图形。 下面的代码由用户在 ACAD 图形中选择对象并将对象部分属性写入 EXCEL 文档。Sub WriteExcel()Dim ExcelApp As New Exc

8、el.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.SelectOnScree

9、nDim 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).R

10、ange(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 读写 EXC

11、EL 文档的一般方法与 ACAD 的 VBA 一样,MS EXCEL 也提供 ActiveX 对象模型,在 ACAD VBA 开发中使用 EXCEL 文档同样也要通过其 ActiveX 对象模型。详细介绍 EXCEL 的 ActiveX 对象模型恐怕离 ACAD 太远,也没有必要。在这只说说获取 EXCEL 工作表指定单元格内容的方法。与 ACAD 的 ActiveX 对象模型一样, EXCEL 的 ActiveX 对象模型其顶层对象也是 Application 对象,EXCEL.Application 对象提供的 Workbooks 工作簿集合对象包含有全部已经启动的 EXCEL工作簿对象,

12、我们可以使用 Application 对象的 ActiveWorkbook 方法来获取当前活动的工作簿对象,也可以使用 Workbooks(Index)方法来得到指定的工作簿对象。获取要操作的工作簿后,需要获取工作簿中的指定工作表(worksheet)才能访问到其中的指定单元格内容。EXCEL 的单元格的确定由行和列唯一指定,例如 Range(B4)表示第 4 行第 2 列。下面的代码从 EXCEL 文档中读出数据并在 ACAD 图形的模型空间中自动根据 EXCEL 文档内容绘图。行号是我加上的,真正的程序不需要它们。1 Sub ExcelRead()2 Dim ExcelApp As New

13、 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 &

14、 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

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号