0 引言
MicrosoftOffice已作为企事业单位解决办公自动化的理想的工具。而Visual Basic for Application(VBA)是Office套件的一部分,用来定制和扩展Office的功能,让用户完成Office本身所不具备的功能,更高效地实现办公自动化。Microsoft Office中的Excel2007是一款功能强大的办公软件,利用该软件可以完成信息保存、数据计算、数据分析、信息动态发布等功能。但是在Microsoft Office中的Excel 2007软件的使用中,对于单元格的合并处理并不是非常理想,在合并多个单元格时,Excel 2007总是只保留选择区域中左上角单元格的数据,而将选择区域的其他单元格的数据全部删除。当使用Excel 2007处理数据,并需保留合并区域的所有单元格的数据时,Excel 2007就无法满足要求,只能重新录入数据,给工作带来了极大的不便。
1 VBA对象
(1)VBA对象概述
VBA(microsoft visual basic for application)是Microsoft Office的核心组件之一,作为一个嵌入式二次开发引擎,VBA被集成到许多大型软件系统之中,众所周知的就有Word,Excel,PowerPoint,以及其他Office程序。Microsoft VBA建立在COM技术基础之上,可以充分定制应用系统,或进行深度的二次开发。集成VBA可以与Microsoft Office共享同一个二次开发环境。在Office中,宏语言VBA适用于所有应用程序,包括Word,Excel,PowerPoint,Access,Outlook以及Project。从Office 97版开始,新增了VisualBasic编辑器。用户无论是在Excel中,还是在Word中甚至于在Access中建立和管理VBA都使用统一的方法和标准。
具有开放性的Microsoft Office使用VBA语言进行二次开发。在Microsoft Office Excel 2007平台上使用的VBA为用户定制开发的应用程序,可以解决Excel 2007在具体使用过程中标准命令无法满足用户需求或者标准命令的操作过程过于繁琐等方面的实际问题,达到帮助用户减轻烦琐、机械的日常工作,从而提高用户的工作效率和程序的实用性。
VBA的Application对象共有AddIns集合、Columns和Rows集合、Dialogs集合、Sheets集合等对象集合,它们的作用有:
AddIns集合:AddIns集合表示所有当前加载的Excel Add-in;
Columns和Rows集合:这两个集合表示活动工作簿中的列和行;
Dialogs集合:Dialogs集合包括Excel程序中所有的对话框;
Sheets集合:Sheets集合表示返回指定或活动工作簿中所有工作表的集合。
VBA的Application对象常用的属性有ActiveCell,ActiveChart,ActiveSheet,ActiveWindow,ActiveWorkbook,RangeSelection,Selection,StatusBar,ThisWorkbook等。
ActiveCell属性:Application对象的ActiveCell属性表示返回一个表示活动工作簿中活动工作表的活动单元格的Range对象。
ActiveChart属性:ActiveChart属性表示返回表示活动图表的Chart对象,不管它是嵌入的图表还是图表工作表。
ActiveSheet属性:ActiveSheet属性表示返回一个表示当前选中的工作表(顶部工作表)的Worksheet对象。
Activewindow属性:ActiveWindow属性表示返回一个表示活动窗口(顶部窗口)的Window对象。
ActiveWorkbook属性:ActiveWorkbook属性表示返回一个表示活动窗口(顶部窗口)中的工作簿的Workbook对象。
RangeSelection属性:RangeSelection属性表示返回一个表示指定窗口中工作表里选择单元格的Range对象,即使在工作表中一个图表对象已经被选择或激活。
Selection属性:Selection属性表示返回活动窗口中被选择的对象。
StatusBar属性:StatusBar属性表示返回或设置状态栏的文本,这个属性允许你更改在Excel窗口底部的状态栏中显示的信息。
ThisWorkbook属性:ThisWorkbook属性表示返回一个表示当前运行的宏代码所在工作簿的Workbook对象,这个属性允许载入宏定义包含代码的工作簿。
(2)Application对象概述
Application对象是Microsoft Office Excel 2007对象模型中最高级别的对象,表示Excel程序自身。Application对象提供正在运行的程序的信息、应用于程序实例的选项以及实例中打开的当前对象。因为它是对象模型中最高的对象,Application对象也包含组成一个工作簿的很多部件,包括如工作簿、工作表集合、单元格以及这些对象所包含的数据等。Application对象带有175个属性和52个方法,可以设置整个应用程序的环境或配置应用程序。
有很多Application对象的属性可以用来访问Excel 2007程序的各种对象,但是只有小部分是你可能经常使用的。即如:
ActiveCell:返回一个表示活动工作簿中活动工作表的活动单元格的Range对象。
ActiveChart:返回表示活动图表的Chart对象,不管是嵌入的图表还是图表工作表。在一个嵌入的图表被选择或激活时,它就是活动图表。
ActiveSheet:返回一个表示当前选中的工作表(顶部工作表)的Worksheet对象。在一个工作簿中只有一个工作表能成为活动工作表。
ActiveWindow:返回一个表示活动窗口(顶部窗口)的Window对象。
ActiveWorkbook:返回一个表示活动窗口(顶部窗口)中的工作簿的Workbook对象。
RangeSelection:返回一个表示指定窗口中工作表里选择的单元格的Range对象,即使在工作表中一个图表对象已经被选择或激活。
Selection:返回活动窗口中被选择的对象。
StatusBar:返回或设置状态栏的文本。
ThisWorkbook:返回一个表示当前运行的宏代码所在工作簿的Workbook对象。
(3)Application对象的Selection属性使用方法
Selection属性返回活动窗口中被选择的对象。例如,对于单元格,这个属性返回Range对象;对于图表,它返回Chart对象。如果使用属性而没有对象限定符,等于使用Application.Selection。
2方案设计
使用VBA在Microsoft Office Excel 2007中进行二次开发时,利用Application对象的Selection属性,设计一个控件。Selection属性返回活动窗口中被选择的对象,如果使用属性而没有对象限定符,等于使用Application.Selection。该控件需要能够对MicrosoftOffice Excel 2007中的合并区域进行处理,先要读出合并区域的所有单元格的数据,并保存起来,以备使用;然后对所选择的区域进行合并操作,合并操作后,将保存的数据再写回到合并后的单元格中,就完成合并操作。设计框图如图1所示。
3 系统设计
在程序系统设计中,可直接在Microsoft OfficeExcel 2007提供的Visual Basic编辑器中进行,系统设计分成选择区域数据记数、数据读出、数据写入、程序加载等4个方面的设计。
(1)选择区域识别
在Microsoft Office Excel 2007进行区域选择后,形成一个选择区域,要由系统自动确认选择区域的大小和编号。在Excel 2007提供的VBA中,使用下面的语句直接识别出选择区域的大小:
行数:Selection.Rows.Count
列数:Selection.Columns.Count
(2)数据读出
识别出选择区域的大小后,立刻读出选择区域中所有单元格的数据,并把数据保存起来,此时并不知道数据的类型,以及数据量的大小。在Microsoft OfficeExcel 2007中,在进行区域合并时,根据实际需要,其参与工作的数据量并不是很大,并且也不需要考虑每一个单元格的数据类型,只需要做简单的保存即可。因此,用1个万能型的变量,进行保存,把选择区域中所有单元格的数据采用字符串的连接方法,按顺序连接起来,保存在1个变量中。方法如下:
(3)数据写入
在单元格合并完成以后,所有选择的单元格合并成1个单元格,这时的数据写入是非常简单的,采用下面的方法即可:
Selection.Cells(1,1)=MergeData
(4)程序加载
程序设计好后,Excel有2种加载宏的方法。第一种是在运行Microsoft Office Excel 2007后,在宏中直接加载运行即可;第二种是在Microsoft OfficeExcel 2007运行的时候进行加载,并且嵌入在MicrosoftOffice Excel 2007的工具栏上,这种方法使用比较方便,能够直接使用。
Excel有3种类型的加载宏程序,即:Excel加载宏、自定义的组件对象模型(COM)加载宏和自动化加载宏。此处所指的加载宏采用第一类加载宏。将写好的宏文件,保存在Office的安装盘Program Files/Microsoft Office/Office12/Library文件夹中,在Excel2007启动时,可以自动加载该宏文件。建立如下宏:
完成后,以Merge_Macro.xlam保存在ProgramFiles/Microsoft Office/Office12/Library文件夹中。
选择Excel 2007中的“Office按钮”,选择菜单中的 按钮,弹出“Excel选项”对话框,在对话框中,选择“加载项”,再选择最下面的“转到”按钮,弹出“加载宏”对话框,在对话框中,勾选“Merge_Macro”,单击确定。再选择Excel 2007中的“Office按钮”,选择菜单中的 按钮,弹出“Excel选项”对话框,在对话框中,选择“自定义”选项,将自己编写的宏Macro_Merge添加到“快速访问工具栏”,即可。该宏程序在Windows XP SP3+Office 2007下调试通过。
4 结语
Microsoft Visual Basic for Application是Microsoft Office的核心组件之一,作为嵌入式二次开发引擎,VBA得到广泛的应用,二次开发对软件在使用方面的性能得到很好的扩展。本文基于VBA对Excel2007做了一个简单的二次开发,还可以基于VBA对其他软件做二次开发,可以更好地解决工作中的问题,提高了办事效率。