第11章VB与Excel的数据交换Excel是目前非常流行的电子表格软件,很多人都习惯于在EXCEL中处理数据,并在Excel 中完成报表输出等功能,但Excel的数据处理功能相对较弱,而VB具有强大的数据处理功能,但报表输出功能相对较弱。
本章以实例的形式介绍VB如何从Excel中获得数据,再将处理后的数据保存到Excel工作表中,并调用Excel中的VBA指令对排版,生成数据报表。
VB中Excel的启动与关闭11.1.1 Excel对象库引用在VB中调用Excel,首先需要打开VB编程环境“工程”菜单中的“引用”项目,并选取项目中的“Microsoft Excel object library”(Excel版本不同,这个选项中的的版本号可能不一样)。
引用Excel对象库后,对编写代码会带来很多便利。
11.1.2 Excel对象声明EXCEL是以层次结构组织对象的,其对象模型中含有许多不同的对象元素。
编程过程中主要用到以下4个层次的对象。
1.Application对象,即Excel程序本身;2.WorkBook对象,即Excel的工作簿文件对象;3.WorkSheets对象,表示的是Excel的工作表对象集;例如:worksheets(1)表示第一个工作表。
4.Cells、Range、Rows、Columns对象,分别表示Excel工作表中的单元格对象集、区域对象、行对象集、列对象集。
例如:Cells(3,5) 表示第3行第5列的那个单元格Range("C5") 表示第3行第5列的那个单元格Range("A1:C5") 表示从A1单元格到C5单元格的矩形区域Rows(1) 表示第1行Range("1:1") 表示第1行Range("1:10") 表示第1到10行的区域Columns(1) 表示第1列Range("A:A") 表示第1列Range("A:D") 表示从第A到D列11.1.3 VB中Excel的启动与关闭例11-1 新建立一个VB的工程,在窗体上添加2个命令按钮(Command1和Command2),2个按钮的Caption分别为“启动Excel”和“关闭Excel”,输入以下代码即可。
Dim xls As New '声明一个Excel应用程序对象Dim xbook As New '声明一个Excel工作薄对象Dim xsheet As New '声明一个Excel工作表象Private Sub Command1_Click()Set xbook = '启动Excel,并将自动创建的工作薄赋给xbookSet xsheet = (1) '将第一个工作表赋给xsheet= True '显示Excel窗口,程序调试阶段显示该窗口非常重要End SubPrivate Sub Command2_Click()Set xls = Nothing '释放对象变量Set xbook = NothingSet xsheet = NothingEnd Sub这里将有关对象声明放在通用声明段是为了在两个命令按钮中均可以调用对象xls。
VB与Excel的数据交换当VB程序启动Excel后,就可以对其中的单元格进行任意处理了。
例11-2 随机生成的一组学生成绩数据保存到一个Excel工作表中。
新建一个VB工程,引用“Microsoft Excel object library”对象库后。
在窗体上添加2个按钮(Command1、Command2),Caption属性分别为“生成数据存入Excel”和“保存及并闭Excel”。
代码如下:Dim xls As NewDim xbook As NewDim xsheet As NewPrivate Sub Command1_Click()Set xbook =Set xsheet = (1)= True '当程序调试成功以后就可以删除此操作(1, 1) = "学号" '填写表头(1, 2) = "高等数学"(1, 3) = "英语"(1, 4) = "大学计算机基础"(1, 5) = "平均成绩"For i = 2 To 10(i, 1) = "'09108" & 1000 + I '生成学号Sum = 0For j = 2 To 4(i, j) = Int(Rnd() * 51) + 50Sum = Sum + (i, j)Next j(i, 5) = Round(Sum / 3, 2)Next iEnd SubPrivate Sub Command2_Click()("c:\") '以指定文件名存盘Set xls = Nothing '释放对象变量Set xbook = NothingSet xsheet = NothingMsgBox "请通过资源管理器查询C盘根文件夹下生成的文件"End SubVB对Excel的全面控制VB不仅可以与Excel实现数据交换,还可以对Excel进行删除或插入表行、列以及完成各种排版操作。
以下程序代码可以实现将例11-1生成的文件打开并执行各种排版操作,同例11-1一样,在窗体上添加2个命令按钮,并通过“工程”菜单“引用”Excel对象库后,录入以下代码:Dim xls As NewDim xbook As NewDim xsheet As NewPrivate Sub Command1_Click()Set xbook = "c:\") '打开Excel文件Set xsheet = (1)= True= xlMinimized '让Excel窗口最小化For i = 1 To 5With (i) '对各列样式进行设置.AutoFit '最适合列宽.HorizontalAlignment = xlCenter '水平方向居中.VerticalAlignment = xlCenter '垂直方向居中End WithNext i(1).Insert '在原表第1行前插入一行(1, 1) = "XX班级学生成绩表" '写入表标题("a1:e1").Merge '合并单元格区域("1:1").RowHeight = 40 '设置第1行行高为40磅("2:11").RowHeight = 24 '设置第2到11行行高为24磅With (1, 1) '设置表标题字体及字号. = "隶书". = 24.HorizontalAlignment = xlCenter.VerticalAlignment = xlCenterEnd WithWith Range("A2:E11") '对A2到E11区域设置表格线.Borders(xlEdgeLeft).LineStyle = xlContinuous '左边线.Borders(xlEdgeTop).LineStyle = xlContinuous '顶边线.Borders(xlEdgeBottom).LineStyle = xlContinuous '底边线.Borders(xlEdgeRight).LineStyle = xlContinuous '右边线.Borders(xlInsideVertical).LineStyle = xlContinuous '内部垂直线.Borders(xlInsideHorizontal).LineStyle = xlContinuous '内部水平线 End WithMsgBox "排版结束!"End SubPrivate Sub Command2_Click()Set xls = Nothing '释放对象变量Set xbook = NothingSet xsheet = NothingEnd SubExcel中的VBA实际上,要全面掌握EXCEL中的VBA语言是非常困难的,因为涉及到太多的对象、属性及其方法,但利用微软公司提供的宏录制功能,学习就变得易如反掌。
宏就是一段程序,存在于Office系列应用软件中,如Word、Excel、PowerPoint、Outlook 等。
对这些应用软件的所有操作步骤都可以录制成宏代码,然后再对宏代码进行分析,是学习VBA最好的方法。
下面以Excel为例,介绍宏的录制及学习方法。
如果想学习Excel中对单元格的字体、字号、边框线设置的VBA代码,操作步骤如下:(1)启动Excel,在任何一个单元格中录入一些内容,选择“工具|宏|录制新宏”,界图 11-1 录制新宏对话框面如图11-1所示。
所有内容均使用默认,单击“确定”按钮,Excel界面上会多一个宏录制工具栏,如图11-2所示。
(2)选中单元格“C4”,设置字体为“黑体”,字号为24磅,在左右加边框,完成这些操作后单击宏录制工具栏中的停止录制按钮,结束宏录制。
(3)按ALT+F11键进制Excel中的VBA集成开发环境,这个界面和VB的集成开发环境非常相似,如图11-3所示。
图 11-2 处于宏录制状态的Excel界面图 11-3 VBA集成开发环境(4)展开右侧的“模块”,可以看到其中的“模块1”,这就是刚才录制的宏,双击“模图 11-4 宏代码块1”,可以在右侧看到录制的宏代码。
如图11-4所示。
由于宏会对每一个步骤分别进行录制,所以代码看起来特别烦琐,可以将其中没有进行图 11-5 简化后的VBA代码特别处理的代码全部删除,这样就可以得到想要的VBA指令了。
如图11-5所示。
以上代码其实还可以再简化如下:Sub Macro1()= "黑体"= 24(xlEdgeLeft).LineStyle = xlContinuous(xlEdgeRight).LineStyle = xlContinuousEnd Sub这里的Selection就是指被选中的单元格或单元格区域,这些代码移植到VB中时,只需要在前面加上Selection所属的父对象名序列即可。