2024年4月11日发(作者:)

龙源期刊网

基于VBA对Excel 2007二次开发应用研究

作者:刘 铭

来源:《现代电子技术》2010年第10期

摘 要:Excel 2007在日常办公方面应用较普遍,但是在合并多个单元格时,只能保留选择区域

最左上角的单元格数据,其他单元格的数据将被丢弃。针对工作中在合并单元格时,需要保留选

择区域所有单元格的数据,在此提出基于VBA对

型Application对象的属性,设计合并单元格控件的方法。在

二次开发,结合Excel 2007对象模

e 2007环

境下,设计并开发出控件,实现了合并多个单元格,保留选择区域数据,解决了工作中的实际问题。

关键词:VBA; 二次开发; Excel 2007; 合并单元格

中图分类号:TP311 文献标识码:B

文章编号:1004-373X(2010)10-0055-03

VBA-based Secondary Development of Excel 2007

LIU Ming

(Chongqing Vocational Institute of Engineering, Chongqing400037, China)

Abstract:Excel 2007 has been widely applied in peoptes daily life, but there are also some

problems. When merging multiple cells, justthe cells on the very top left can be maintained andall the

other cells are deleted. However, All the data of the cells in the selected area need be kept during the

mergence of cells. The re-development of Excel 2007 is proposed based on VBA. The control widget

of merging the cells is designed in combination with Excel 2007 objective mode and application

object′s properties. Under the condition ofWindows XP SP3+Office 2007, the merging of multiple

cells and the keeping of data in theselecting area are implemented by designing and developing

control widget.

Keywords:VBA; redevelopment; Excel 2007; cell mergence

0 引 言

Microsoft Office已作为企事业单位解决办公自动化的理想的工具。而 Visual Basic for

Application(VBA)是 Office套件的一部分,用来定制和扩展的功能,让用户完成Office本

身所不具备的功能,更高效地实现办公自动化[1]。Microsoft Office中的Excel 2007是一款功能

强大的办公软件,利用该软件可以完成信息保存、数据计算、数据分析、信息动态发布等功

能。但是在Microsoft Office中的Excel 2007软件的使用中,对于单元格的合并处理并不是非常

理想,在合并多个单元格时,Excel 2007总是只保留选择区域中左上角单元格的数据,而将选择区

龙源期刊网

域的其他单元格的数据全部删除。当使用Excel 2007处理数据,并需保留合并区域的所有单元

格的数据时,Excel 2007就无法满足要求,只能重新录入数据,给工作带来了极大的不便。

1 VBA对象

(1) VBA对象概述

VBA(microsoft visual basic for application)是Microsoft Office的核心组件之一,作为一个嵌入

式二次开发引擎[2],VBA被集成到许多大型软件系统之中,众所周知的就有

Word,Excel,PowerPoint,以及其他Office程序。Microsoft VBA建立在COM技术基础之上,可以

充分定制应用系统,或进行深度的二次开发。集成VBA可以与Microsoft Office共享同一个二

次开发环境。在Office中,宏语言VBA 适用于所有应用程序,包括

Word,Excel,PowerPoint,Access,Outlook 以及Project。从Office 97 版开始,新增了Visual Basic 编

辑器。用户无论是在Excel 中,还是在Word 中甚至于在Access 中建立和管理VBA 都使用统一

的方法和标准。

具有开放性的Microsoft Office使用VBA语言进行二次开发。在Microsoft Office Excel

2007平台上使用的VBA为用户定制开发的应用程序,可以解决在具体使用过程中

标准命令无法满足用户需求或者标准命令的操作过程过于繁琐等方面的实际问题,达到帮助用

户减轻烦琐、机械的日常工作,从而提高用户的工作效率和程序的实用性。

VBA的Application对象共有AddIns集合、Columns和Rows集合、Dialogs集合、Sheets

集合等对象集合[3],它们的作用有:

AddIns集合:AddIns集合表示所有当前加载的Excel Add-in;

Columns和Rows集合:这两个集合表示活动工作簿中的列和行;

Dialogs集合:Dialogs集合包括Excel程序中所有的对话框;

Sheets集合:Sheets集合表示返回指定或活动工作簿中所有工作表的集合。

VBA的Application对象常用的属性有

ActiveCell,ActiveChart,ActiveSheet,ActiveWindow,ActiveWorkbook,RangeSelection,Selection,Statu

sBar,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对象概述[9]

Application对象是Microsoft Office Excel 2007对象模型中最高级别的对象,表示Excel程序

自身。Application对象提供正在运行的程序的信息、应用于程序实例的选项以及实例中打开的

当前对象。因为它是对象模型中最高的对象,Application对象也包含组成一个工作簿的很多部

件,包括如工作簿、工作表集合、单元格以及这些对象所包含的数据等。Application对象带有

175个属性和52个方法,可以设置整个应用程序的环境或配置应用程序。

有很多Application对象的属性可以用来访问

是你可能经常使用的。即如:

ActiveCell:返回一个表示活动工作簿中活动工作表的活动单元格的Range对象。

ActiveChart:返回表示活动图表的Chart对象,不管是嵌入的图表还是图表工作表。在一个嵌

入的图表被选择或激活时,它就是活动图表。

ActiveSheet:返回一个表示当前选中的工作表(顶部工作表)的Worksheet对象。在一个工作

簿中只有一个工作表能成为活动工作表。

ActiveWindow:返回一个表示活动窗口(顶部窗口)的Window对象。

cel 2007程序的各种对象,但是只有小部分

龙源期刊网

ActiveWorkbook:返回一个表示活动窗口(顶部窗口)中的工作簿的Workbook对象。

RangeSelection:返回一个表示指定窗口中工作表里选择的单元格的Range对象,即使在工作

表中一个图表对象已经被选择或激活。

Selection:返回活动窗口中被选择的对象。

StatusBar:返回或设置状态栏的文本。

ThisWorkbook:返回一个表示当前运行的宏代码所在工作簿的 Workbook对象。

(3) Application对象的Selection属性使用方法[9]

Selection属性返回活动窗口中被选择的对象。例如,对于单元格,这个属性返回Range对象;

对于图表,它返回Chart对象。如果使用属性而没有对象限定符,等于使用ion。

2 方案设计

使用VBA在Microsoft Office Excel 2007中进行二次开发时,利用Application对象的

Selection属性,设计一个控件。Selection属性返回活动窗口中被选择的对象,如果使用属性而没

有对象限定符,等于使用ion。该控件需要能够对Microsoft Office Excel 2007

中的合并区域进行处理,先要读出合并区域的所有单元格的数据,并保存起来,以备使用;然后对所

选择的区域进行合并操作,合并操作后,将保存的数据再写回到合并后的单元格中,就完成合并操

作。设计框图如图1所示。

3 系统设计

在程序系统设计中,可直接在Microsoft Office Excel 2007提供的Visual Basic编辑器中进行,

系统设计分成选择区域数据记数、数据读出、数据写入、程序加载等4个方面的设计。

图1 设计框图

(1) 选择区域识别

在Microsoft Office Excel 2007进行区域选择后,形成一个选择区域,要由系统自动确认选择

区域的大小和编号。在Excel 2007提供的VBA中,使用下面的语句直接识别出选择区域的大小:

行数:

列数:

(2) 数据读出

龙源期刊网

识别出选择区域的大小后,立刻读出选择区域中所有单元格的数据,并把数据保存起来,此时

并不知道数据的类型,以及数据量的大小。在Microsoft Office Excel 2007中,在进行区域合并时,

根据实际需要,其参与工作的数据量并不是很大,并且也不需要考虑每一个单元格的数据类型,只

需要做简单的保存即可。因此,用1个万能型的变量,进行保存,把选择区域中所有单元格的数据

采用字符串的连接方法,按顺序连接起来,保存在1个变量中。方法如下:

For i = 1 To

For j = 1 To

MergeData = MergeData & "," &

(i, j)

Next j

Next i

(3) 数据写入

在单元格合并完成以后,所有选择的单元格合并成1个单元格,这时的数据写入是非常简单

的,采用下面的方法即可:

(1, 1) = MergeData

(4)程序加载

程序设计好后,Excel有2种加载宏的方法。第一种是在运行Microsoft Office Excel 2007

后,在宏中直接加载运行即可;第二种是在

且嵌入在

2007运行的时候进行加载,并

的工具栏上,这种方法使用比较方便,能够直接使用。

Excel有3种类型的加载宏程序,即:Excel 加载宏、自定义的组件对象模型 (COM) 加载宏和

自动化加载宏。此处所指的加载宏采用第一类加载宏。将写好的宏文件,保存在Office的安装

载该宏文件[8]。建立如下宏:

Sub Macro_Merge()

Dim MergeData

Dim i, j As Integer

For i = 1 To

文件夹中,在Excel 2007启动时,可以自动加

龙源期刊网

For j = 1 To

If MergeData "" Then

MergeData = MergeData & "," & Selection.

Cells(i, j)

Else

MergeData = (i, j)

End If

Next j

Next i

With Selection

.HorizontalAlignment = xlCenter

.VerticalAlignment = xlCenter

.WrapText = False

.Orientation = 0

.AddIndent = False

.IndentLevel = 0

.ShrinkToFit = False

.ReadingOrder = xlContext

.MergeCells = False

End With

(1, 1) = MergeData

End Sub

龙源期刊网

完成后,以Merge_保存在Program Files/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对Excel 2007做了一个简单的二次开发,还可以基于VBA对其他软件做二次开发,可以更

好地解决工作中的问题,提高了办事效率。