VBA合并工作簿(Workbook)
1
内容回顾
FileDialog对象
前面我们介绍了如何用VBA把“同一个文件的不同工作表中”的数据合并到同一个工作表里面。
本节内容
本节我们要介绍的是:怎么才能把分布在“多个工作簿文件中的多个工作表中”的数据合并到同一个工作簿文件的同一个工作表里面。
下面是完成这项任务的完整代码。按快捷键“ALT+F11”进入VBA开发环境,在左侧单击鼠标右键,选择“插入”——“模块”,在模块中输入如下VBA代码。在这段VBA代码中我们使用了一个新功能,那就是使用户自主选择Excel数据文件所在的文件夹。
L02——L08代码是一个With…End With结构,表示对Application.FileDialog(msoFileDialogOpen)所生成的FileDialog对象进行各种操作。FileDialog是Application的一个属性,利用这个属性可以得到各种各样的Excel对话框,具体的对话框类型由我们提供给他的参数确定。Application.FileDialog(msoFileDialogOpen)得到的是“打开文件”的对话框。
1
代码解释
难点解释
L03代码.AllowMultiSelect = True的最前方加了一个“.”,表示该代码受with结构控制,也就是对上一句with代码得到的对话框进行操作。该行代码的意思是设置“打开文件”的对话框为“可以多选”。
L04代码功能是显示“打开文件”对话框(L02得到的对话框默认是不显示的)。
L05——L07是一个For循环处理结构,循环次数为“打开文件”对话框中所选择的Excel工作簿文件的个数.SelectedItems(n),然后在循环体中用Workbooks.Open .SelectedItems(n)代码打开用户所选择的每一个文件。
L09代码是把当前工作簿(VBA代码所在的工作簿)中的第一个工作表作为汇总后数据的存放位置,并把该工作表对象赋值给工作表类型的对象变量objSumSht。值得注意的是,因为是给对象变量赋值,所以需要使用VBA关键字Set。对象变量objSumSht赋值以后,就可以用变量objSumSht代替ThisWorkbook.Worksheets(1)了。
L10——L17是嵌套的For…each循环处理结构,外部循环是对每一个工作簿文件进行处理,内部循环是对“每一个工作簿中的每一张工作表”进行处理。
L12是对工作表的判断,当工作表名称不为汇总表名称时,进行下面的操作。
L13本行代码是确认要粘贴数据的行号位置,objSumSht.Rows.Count将返回表格中最后一行单元格的行号。End(xlUp).Row表示从工作表第一列的最后一行向上查找,直到第一次看到“不为空的单元格”为止时所在的行号。然后把这个行号加上1,表示下一次粘贴数据时的位置。
重点回顾
objSumSht.Rows.Count将返回表格中最后一行单元格的行号。
End(xlUp).Row表示从工作表第一列的最后一行向上查找,直到第一次看到“不为空的单元格”为止时所在的行号。
-----
-----
对照上面
试一试
说不定
就学会了呢
领取专属 10元无门槛券
私享最新 技术干货