d.VBA实现Excel多个工作簿合并成一个工作表

    越发深挖VBA,越发感觉到自己的编程能力有待提高。主要表现在:1、遇到问题不知怎么下手分析(思路);2、分析之后不知怎么入手去做(基础);3、程序调试(能力)
    针对以上问题,我咨询了资深专家。目前解决方法是:多看、多练,针对问题可先去找类似的程序代码,后不断修改完善(并不要求完全从0开始)。

多个工作簿合并成一个工作表

先贴代码:

Sub 合并工作簿至一个工作表()
Dim MyPath$, MyName$, sh As Worksheet, sht As Worksheet, m&, IsSheetEmpty As Boolean
'设置文本型MyPath、MyName,最终存放工作簿sh,需要读取的工作簿sht,长整型m,布尔型IsSheetEmpty'
Set sh = ActiveSheet
'sh为当前活动表格'
MyPath = ThisWorkbook.Path & "/"   '此处应输入左斜杠'
'获得当前文件文件夹路径'
MyName = Dir(MyPath & "*.xls")
'指定当前文件夹内所有以 ".xls"结尾的文件'
Application.ScreenUpdating = False
'Application.ScreenUpdating 在Excel的工作表里面数据发生变化后False禁止实时刷新,True[默认值]为表示实时更新数据'
Cells.ClearContents
'清除当前表格的单元格内容'
Do While MyName <> ""        '如果不存在下一个文件,则跳出循环'
    If MyName <> ThisWorkbook.Name Then   '不执行当前文件'
        With GetObject(MyPath & MyName)      '获得文件对象'
        For Each sht In .Sheets          '依次执行文件下的Sheets'
          If IsSheetEmpty = IsEmpty(sht.UsedRange) Then      'UsedRange是工作表属性'
             m = m + 1                         
             If m = 1 Then                    
                sht.[A1].CurrentRegion.Copy sh.[A1]    
             Else
                sht.[A1].CurrentRegion.Offset(0).Copy sh.[A65536].End(xlUp).Offset(1)
             End If
          End If
        Next
        .Close False
        End With
    End If
    MyName = Dir
  Loop
Application.ScreenUpdating = True
MsgBox "所有表格已完成合并"
End Sub

注意需复制在当前文件上,文件保存为.xlsm

代码讲解

整体思路:
1、获得当前文件路径MyPath,获取当前文件夹下所有文件Dir;
2、采用两层循环,逐个读取当前工作簿,再向下读取工作簿中的工作表;
3、实现工作表批量读取并复制到当前文件中。

两层循环、一个语句块:
第一层循环 主要循环查找工作簿,使用Dir实现下一文件读取

Do While MyName<>""    '循环的终止条件为文件名为空,不为空则执行'  
    循环体()                '执行下层循环'  
    MyName=Dir             '实现读取下一工作簿,相当于n++'
Loop

语句块 获得工作表对象

With GetObject(MyPath & MyName)     '返回文件中的 ActiveX 对象的引用,当执行上述代码时,就会启动与指定的 pathname 相关联的应用程序,同时激活指定文件中的对象'
    .Sheets                   '获得当前对象所对应的Sheets'
    .Close False           'Workbooks("01.xls").Close False 退出当前对象不报存'
End With

第二层循环 遍历每个工作表

For  Each sht In .Sheets       '遍历每个Sheets对象'
    循环体(执行关键代码)         '执行循环复制'
    Next           '执行下一个Sheets,相当于n++

关键代码:

  • sht.[a1].CurrentRegion.Copy sh.[a1]
  • sht.[a1].CurrentRegion.Offset(0).Copy sh.[a65536].End(xlUp).Offset(1)

CurrentRegion属性
Range的CurrentRegion属性返回的是一个单元格对象;
Offset属性
Range的Offset属性,它代表位于指定单元格区域的一定的偏移量位置上的区域。

VBA对象类型
$ 文本型; % int 整型; & 长整型 long; ! Single 单精度; #double 双精度 ;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342