VBA合并工作簿

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表示从工作表第一列的最后一行向上查找,直到第一次看到“不为空的单元格”为止时所在的行号。

-----

-----

对照上面

试一试

说不定

就学会了呢

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190814A0D5IX00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券