论文导读::在工作中常对大量相同表结构的Excel工作薄进行汇总,利用手工复制、粘贴效率不高,本文探讨使用VBA编程对多工作薄数据进行汇总。
关键词:VBA,相同表结构,多工作薄,数据汇总
前言
Microsoft Office软件是是微软公司开发的办公自动化应用软件,Microsoft Excel是其中的一个重要的组成部分,由于它包含大量的公式函数对各种大量数据有很强的处理、统计分析能力,广泛地应用于管理、统计、金融等领域。伴随计算机的普及已经成为日常办公不可或缺的工具。
目前使用Excel支持VBA编程,VBA是Visual Basic For Application的简写,基于是基于VisualBasic for Windows 发展而来的。在执行特定功能或重复性高的操作时,使用VBA 有助于使工作自动化相同表结构,提高工作效率会计毕业论文范文。另外,由于VBA 可以直接应用Office 套装软件的各项强大功能,所以对于程序设计人员的程序设计和开发更加方便快捷。
1 需求分析
在工作中经常会做数据的收集汇总,制定特定表结构的工作表供其它对象填写,然后回收汇总合并成一个完整表,主要采用手工打开工作表进行复制、粘贴这样简单而重复性较高的操作,容易使人疲惫导致操作错误,难以察觉,工作效率极低。通过VBA可以高效、快速地编制出应用程序,高效完成工作任任务,而且在以后的工作中可以稍加修改或不用修改进行重复使用。
2 应用案例
某高校每年都进行职业技能考试,各种类统一报名,班级按制定好格式的报名表填写报名(如图1、图2),之后由负责老师进行汇总成一个表(如图3)。汇总的过程即为重复性的复制、粘贴。本文即是利用VBA编程解决这样一类问题。
   2.1 应用条件:工作表结构格式化
各班级上交的登记表是考试报名要求的表结构格式是固定的、统一的相同表结构,只是各班报名人数不同,即表中的数据记录行数不同,数据填写在工作薄的第一张工作表中,与工作表名无关。汇总表增加了序号、班级字段(方便后续统计处理)会计毕业论文范文。
2.2 数据汇总的具体实现
2.2.1 设计思路及界面控件功能设计
首先将所有源工作薄存放于一个文件夹中;新建汇总工作薄在其它文件夹下,在汇总表.xls工作薄中第一个工作表进行界面设计(如图4),编写VBA代码,数据汇总结果存于第二个工作表中,设置好标题行,并进行相关单元格格式设置;用户通过界面中的浏览按钮浏览源工作薄所在的文件夹,获取其路径显示界面中文本框中;并设置源工作表和汇总表的标题行数及要读取的源工作表数据的列数,读取源工作表的数据区域及汇总表的存放位置;然后单击开始按钮执行汇总命令,单击查看按钮查看结果。
2.2.2 主要过程、函数代码
(1)点击浏览按钮调用过程代码如下,实现添加源数据文件夹路径
… '此处省略打开文件夹对话框代码
'以下浏览按钮选择源工作薄文件夹路径
Private Sub btnPath_Click()
Dim FName As String
FName =BrowseFolderA(Caption:='选择源工作薄所在文件夹')
If FName <>vbNullString Then txtPath.Text = FName
End Sub
(2)开始按钮对应过程,实现将选择的文件夹路径中所有的工作薄中的第一个工作表中的数据导入到汇总表中。
Private Sub btnCommit_Click()
… '省略了为使代码更快而在运行前保存并关闭Excel相关状态的代码
Dim i, j As Long
Dim rCount As Long
Dim s_Rows, s_Col,s_BeginRow As Long
Dim t_BeginRow,t_BeginCol As Long
s_BeginRow =txtSRowBegin.Value '获取源表要读取的数据起始空
s_Col = txtCols.Value '获取源表要读取的数据总列数
t_BeginRow =txtTRowBegin.Value
t_BeginCol = txtTColBegin.Value
'以上两行表示汇总表起始写入行/列相同表结构,不包含标题行/新建字段列,并在后面运行过程中自增1下移/右移到新空白行/列供新的数据导入
Dim MyFolder As Folder
Dim FileArr
Dim MyFile As File
Dim FilePath As String
'以下打开登记文件夹下所有的文件名
Set MyFSO =CreateObject('Scripting.FileSystemObject')
Set MyFolder =MyFSO.GetFolder(txtPath)
Set FilesArr =MyFolder.Files
FilePath = txtPath.Value &''
'以下代码依次打开每个源工作薄,检测其中数据记录个数,并循环导入到汇总表中。
For Each MyFile InFilesArr
Set xlapp = CreateObject('Excel.Application') '创建EXCEL对象
Set xlbook = xlapp.Workbooks.Open(FilePath & MyFile.Name) '打开已经登记的EXCEL工件簿文件
xlapp.Visible = False '设置EXCEL对象不可见
Set xlsheet = xlbook.Worksheets(1) '设置工作表对象
s_Rows = xlsheet.Range('a65535').End(xlUp).Row '获取源工作表A列已使用的总行数包括标题行
rCount = s_Rows - s_BeginRow + 1 '计算源工作表sheets(1)数据记录的个数
ThisWorkbook.Sheets(3).Range('B' & t_BeginRow & ':'& 'B' & (t_BeginRow + rCount - 1)) = MyFile.Name '在汇总表B列t_BeginRow 开始的rCount个单元格开始填充已打开的工作薄的名称,表示本行数据记录来源。
For i = s_BeginRow To s_Rows
For j = 1 To s_Col
ThisWorkbook.Sheets(3).Cells(t_BeginRow, t_BeginCol + j - 1) = xlsheet.Cells(i,j) '将源工作表中数据导入到汇总表该工作薄名称单元格后单元格中
Next
ThisWorkbook.Sheets(3).Cells(t_BeginRow, 1) = t_BeginRow - txtTRowBegin.Value +1 '在第一列序号列实现自动填充
t_BeginRow = t_BeginRow + 1 '汇总表开始行下移逐条实现导入
Next
'已下代码关闭源工作薄
xlbook.Close
xlapp.Quit
Setxlapp = Nothing
Next
… '省略程序运行后,恢复Excel原来的状态的代码
End Sub
(3)查看按钮对应代码
Private Sub btnResult_Click()
Worksheets('汇总表').Activate '激活汇总表,查看结果
End Sub
(4)清空汇总表数据按钮对应代码
Private Sub btnClear_Click()
Dim a, b As Long
a = txtTRowBegin.Value
b = 65536
Worksheets('汇总表').Rows(a &':' & b).ClearContents '汇总表数据记录行清除内容
End Sub
3 结束语
Office办公软件所提供的命令按钮可以满足我们平时办公需要,然而要想使我们的办公自动化程度更高、效率更高,则要学习利用VBA对Excel进行二次开发,研究制定出个性、高效的解决方案,可以让我们在大量繁琐的操作中解脱出来。
参考文献
[1]John Walkenbach著.盖江南,王勇等译.Excel 2003高级VBA编程宝典[M].电子工业出版社,2005.
[2]Excel Home.Excel应用大全[M].人民邮电出版社,2008.
|