选中Excel单元格自动导入多个Excel worksheets

前日完成将多个Excel文件批量导入某个Excel文件中老婆规定的任务后,老婆又提出了新的要求:

  1. 可以update每个worksheet
  2. 对导入的worksheets进行排序
  3. 自动匹配代导入文件的文件名
  4. 将导入的worksheets中的特定多个单元格(cells)的内容自动填充到某一表格的特定区域

本文中用到的Excel文件及VBA宏可以在此处(TBD)下载。


表1 选中的单元格
1 工作表 1
2 工作表 2
3 工作表 3
4 工作表 4
5 工作表 5
6 工作表 6
7 工作表 7
8 工作表 8
9 工作表 9
10 工作表 10

对应的各个worksheet的名字(Name)是:01工作表 1,02工作表 2,03工作表 3,……,10工作表 10.


待导入的Excel文件的名字为“02 某某银行XX项目_工作表 1_20110701.xls”。


Update 2011-07-13 21:50

应老婆的要求,更新了程序,遇到并解决的问题有:

  1. Office 2003和2007不兼容——有些method在office2003中正常工作但在office2007中却不再支持,如判定某文件是否存在的函数,解决方法参见FindFileName函数。
  2. 如果某个表中的一些单元格被筛选,则会遇到“不能复制合并的单元格”(Can't copy merged cell)的问题,解决方法就是在copy前强制关闭autofilter: newWB.Sheets(SheetToBeCopy).AutoFilterMode = False ' disable auto filter
  3. 关闭打开的Excel文件或者copy单元格时会有各种各样的对话框弹出来,解决办法就是加上下面语句:
Application.DisplayAlerts = True
newWB.Close SaveChanges:=False  ' close without change
Application.DisplayAlerts = True

Update 2011-07-14 15:37

傻瓜型用户的需求就是无穷无尽啊……我老婆发现在选择不连续的区域时,只有第一个区域会被处理,其他的没有变化。顶着挨骂的压力Google之后才知道,原来Slection.Areas可以包含所有不连续的选择,然后通过遍历,处理所有的选择……程序改动如下。


实现前三个需求的代码如下(Update 2011-07-14 15:37):


如要自动导入每个worksheet的特定单元格(L2:L6)到表2中的D,E,F,G,H列,可以使用下面的UpdateCells宏。

选中Excel单元格自动导入多个Excel worksheets



你可能感兴趣的:(Excel)