ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: zhsh1128

用sql实现将表1-表n里的所有数据提取到总表中来

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-3-12 14:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 cbtaja 于 2012-3-12 14:41 编辑

抱歉,这个代码是从多工作薄且多工作表合并的代码修改过来的,所以那个Sht变量多余了。下面的代码我自己已经做了测试,你再试下。
Sub 合并多工作薄的第1个表格中的数据()
Dim MyFile, MyPath, MyName, Cbook, Sht, r, n, arr
Application.ScreenUpdating = False
On Error Resume Next
n = 2
MyPath = ThisWorkbook.Path & "\"
MyFile = Dir(MyPath & "*.xlsx")
Do While MyFile <> ""
        Set Cbook = GetObject(MyPath & MyFile)
        With Cbook.Sheets("sheet1")
            r = .[a65536].End(3).Row
            arr = .Range("A2:D" & r)
        End With
        With ThisWorkbook.Sheets(1)
            .Cells(n, 1).Resize(r - 1, 4) = arr
            n = n + r - 1
        End With
        Cbook.Close False
    MyFile = Dir
Loop
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-12 14:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
cbtaja 发表于 2012-3-12 14:31
抱歉,这个代码是从多工作薄且多工作表合并的代码修改过来的,所以那个Sht变量多余了。下面的代码我自己已经 ...

哦,原来在于多了一个sht。

那个 从多工作薄且多工作表合并的代码 能不能给个链接,这个应用对我的工作来说也很重要。我想学习下。

先谢了。

TA的精华主题

TA的得分主题

发表于 2012-3-12 14:39 | 显示全部楼层
zhsh1128 发表于 2012-3-12 14:35
哦,原来在于多了一个sht。

那个 从多工作薄且多工作表合并的代码 能不能给个链接,这个应用对我的工作 ...

好的,请参考下面帖子4楼的附件。
http://club.excelhome.net/forum. ... 564&pid=5734081

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-12 14:44 | 显示全部楼层
cbtaja 发表于 2012-3-12 14:39
好的,请参考下面帖子4楼的附件。
http://club.excelhome.net/forum.php?mod=redirect&goto=findpost&pt ...

万分感谢!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-12 16:27 | 显示全部楼层
cbtaja 发表于 2012-3-12 14:31
抱歉,这个代码是从多工作薄且多工作表合并的代码修改过来的,所以那个Sht变量多余了。下面的代码我自己已经 ...

MyPath = ThisWorkbook.Path & "\"    ' 指定路径。
MyFile = Dir(MyPath & "*.xls")
Do While MyFile <> ""    ' 开始循环。
    If MyFile <> ThisWorkbook.Name

这段是在http://club.excelhome.net/forum. ... d=838564&page=1这个帖子里的代码。

下面这段是本帖中的相应代码:

MyPath = ThisWorkbook.Path & "\"
MyFile = Dir(MyPath & "*.xlsx")
Do While MyFile <> ""

两者相比,多了一句:If MyFile <> ThisWorkbook.Name

其实这个Dir(MyPath & "*.xls")返回当前路径下的文件名,是不包含打开的文件的。因此If MyFile <> ThisWorkbook.Name 这句好像不必要,是不是?

另外,我有一个新的问题:dir是随机提取文件名的,这样合并工作薄时候也是随机的,如果要求合并多个工作薄的时候,按工作薄的名称升序进行合并,怎么写代码?

还望赐教。

TA的精华主题

TA的得分主题

发表于 2012-3-12 18:03 | 显示全部楼层
zhsh1128 发表于 2012-3-12 16:27
MyPath = ThisWorkbook.Path & "\"    ' 指定路径。
MyFile = Dir(MyPath & "*.xls")
Do While MyFile  ...

这两个帖子中的情况当然是不一样的。
在那个贴子中,使用的是EXCEL2003格式的xls工作薄,汇总表也是同样的xls工作薄,DIR函数使用*.xls作为筛选条件时,是有可能把汇总的表格也筛选出来的,所以要用if语句进行判断处理,

而在本帖中,由于汇总工作薄是含宏代码的EXCEL2007版的.xlsm格式,而各分表是不包含宏代码的.xlsx
格式,当使用*.xlsx作为dir函数的筛选条件时,并不会把汇总表一同筛选出来,当然也就不必再用if语句处理了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-12 18:47 | 显示全部楼层
cbtaja 发表于 2012-3-12 18:03
这两个帖子中的情况当然是不一样的。
在那个贴子中,使用的是EXCEL2003格式的xls工作薄,汇总表也是同样 ...

明白了,受教了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-12 18:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
cbtaja 发表于 2012-3-12 18:03
这两个帖子中的情况当然是不一样的。
在那个贴子中,使用的是EXCEL2003格式的xls工作薄,汇总表也是同样 ...

另外,我有一个新的问题:dir是随机提取文件名的,这样合并工作薄时候也是随机的,如果要求合并多个工作薄的时候,按工作薄的名称升序进行合并,怎么写代码?

TA的精华主题

TA的得分主题

发表于 2012-3-13 02:51 | 显示全部楼层
zhsh1128 发表于 2012-3-12 18:48
另外,我有一个新的问题:dir是随机提取文件名的,这样合并工作薄时候也是随机的,如果要求合并多个工作薄 ...

虽然在帮助文档的介绍中说到Dir函数所得的“文件名并不会以特定的次序返回”,但是事实上,当没有改变筛选条件时,文件名默认是按升序返回的。
所以,当想要按工作薄名称升序依次合并多个工作薄时,代码并不需要做特别的处理。而如果是要按工作薄名称降序或其它特定的次序合并,则可以考虑在合并数据时,同时记录排序所需要的工作薄名称或其它特定的排序依据,先合并然后再排序即可。

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-3-13 09:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
文件名默认是按升序返回的。

这个是不对的。

如果工作薄的名称是中文呢?排序就不是按升序了。看下附件。
中文名dir排序问题.rar (52.84 KB, 下载次数: 8)

附件中按文件名的先后顺序:得分.xlsx 的饿.xlsx 点辐射.xlsx 二.xlsx 黄河口.xlsx 松岛枫.xlsx  的最后一行分别是a,b,c,d,e,f

合并后的总表的 文件名的先后顺序是:二.xlsx  得分.xlsx 松岛枫.xlsx 点辐射.xlsx 的饿.xlsx 黄河口.xlsx

这个合并顺序并不是按文件名的升序进行合并的。

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-10 13:10 , Processed in 0.028039 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表