ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 生成一个子表自动在汇总表上生成一条记录

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-1-10 22:53 | 显示全部楼层 |阅读模式
我工作上需要建立无数个人的表格(都是一样的模板,B1为姓名,F1为编号,B13为结论)。。。。。。
没建立一个个人表格,在汇总表上自动生成一条记录,如何实现?


ps:个人表的命名规则为那个人的姓名

请各位大师帮忙下,小弟十分感谢。。。。。

汇总.rar (10.98 KB, 下载次数: 14)


TA的精华主题

TA的得分主题

发表于 2013-1-11 00:12 | 显示全部楼层
为了简化程序,可在每当汇总表工作簿打开时就自动计算一遍:
  1. Private Sub Workbook_Open()
  2.     Dim cnn As Object, SQL$, MyPath$, MyFile$, m&, n&, t$
  3.     Application.ScreenUpdating = False
  4.     Sheets("Sheet1").Activate
  5.     Sheets("Sheet1").UsedRange.Offset(2).ClearContents
  6.     Set cnn = CreateObject("ADODB.Connection")
  7.     MyPath = ThisWorkbook.Path & ""
  8.     MyFile = Dir(MyPath & "*.xls")
  9.     Do While MyFile <> ""
  10.         If MyFile <> ThisWorkbook.Name Then
  11.             n = n + 1
  12.             If n = 1 Then
  13.                 cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=no';Data Source=" & MyPath & MyFile
  14.             Else
  15.                 t = "[Excel 8.0;hdr=no;Database=" & MyPath & MyFile & "]."
  16.             End If
  17.             m = m + 1
  18.             If m > 49 Then
  19.                 Range("b65536").End(xlUp).Offset(1).CopyFromRecordset cnn.Execute(SQL)
  20.                 m = 1
  21.                 SQL = ""
  22.             End If
  23.             If Len(SQL) Then SQL = SQL & " union all "
  24.             SQL = SQL & "select '" & Replace(MyFile, ".xls", "") & "',f1 from " & t & "[Sheet1$b13:b13]"
  25.         End If
  26.         MyFile = Dir()
  27.     Loop
  28.     If Len(SQL) Then Range("b65536").End(xlUp).Offset(1).CopyFromRecordset cnn.Execute(SQL)
  29.     [a3] = 1
  30.     m = [b65536].End(xlUp).Row
  31.     If m > 3 Then [a3].AutoFill Destination:=Range("A3:A" & m), Type:=xlFillSeries
  32.     cnn.Close
  33.     Set cnn = Nothing
  34.     Application.ScreenUpdating = True
  35. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-11 00:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
请看附件
汇总.rar (18.5 KB, 下载次数: 25)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-11 08:33 | 显示全部楼层
zhaogang1960 发表于 2013-1-11 00:14
请看附件

谢谢,十分感谢,要是我想收集个人表中更多数据的话,需要改的是哪段话,是不是If Len(SQL) Then SQL = SQL & " union all "
            SQL = SQL & "select '" & Replace(MyFile, ".xls", "") & "',f1 from " & t & "[Sheet1$b13:b13]"
        End If
这段啊

TA的精华主题

TA的得分主题

发表于 2013-1-11 10:51 | 显示全部楼层
demonwzr 发表于 2013-1-11 08:33
谢谢,十分感谢,要是我想收集个人表中更多数据的话,需要改的是哪段话,是不是If Len(SQL) Then SQL = S ...

由于要收集的数据不在一起,不能简单地修改SQL语句,容我想想

TA的精华主题

TA的得分主题

发表于 2013-1-11 11:24 | 显示全部楼层
demonwzr 发表于 2013-1-11 08:33
谢谢,十分感谢,要是我想收集个人表中更多数据的话,需要改的是哪段话,是不是If Len(SQL) Then SQL = S ...

假设你想收集的数据是:姓名        结论        血压
  1. Private Sub Workbook_Open()
  2.     Dim cnn As Object, SQL$, MyPath$, MyFile$, m&, n&, t$
  3.     Application.ScreenUpdating = False
  4.     Sheets("Sheet1").Activate
  5.     Sheets("Sheet1").UsedRange.Offset(2).ClearContents
  6.     Set cnn = CreateObject("ADODB.Connection")
  7.     MyPath = ThisWorkbook.Path & ""
  8.     MyFile = Dir(MyPath & "*.xls")
  9.     Do While MyFile <> ""
  10.         If MyFile <> ThisWorkbook.Name Then
  11.             n = n + 1
  12.             If n = 1 Then
  13.                 cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Excel 8.0;hdr=no';Data Source=" & MyPath & MyFile
  14.             Else
  15.                 t = "[Excel 8.0;hdr=no;Database=" & MyPath & MyFile & "]."
  16.             End If
  17.             m = m + 1
  18.             If m > 49 Then
  19.                 Range("b65536").End(xlUp).Offset(1).CopyFromRecordset cnn.Execute(SQL)
  20.                 m = 1
  21.                 SQL = ""
  22.             End If
  23.             If Len(SQL) Then SQL = SQL & " union all "
  24.             SQL = SQL & "select top 1 '" & Replace(MyFile, ".xls", "") & "',(select f1 from " & t & "[Sheet1$b13:b13]),(select f1 from " & t & "[Sheet1$d9:d9]) from " & t & "[Sheet1$]"
  25.         End If
  26.         MyFile = Dir()
  27.     Loop
  28.     If Len(SQL) Then Range("b65536").End(xlUp).Offset(1).CopyFromRecordset cnn.Execute(SQL)
  29.     [a3] = 1
  30.     m = [b65536].End(xlUp).Row
  31.     If m > 3 Then [a3].AutoFill Destination:=Range("A3:A" & m), Type:=xlFillSeries
  32.     cnn.Close
  33.     Set cnn = Nothing
  34.     Application.ScreenUpdating = True
  35. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-11 11:25 | 显示全部楼层
请看附件
汇总.rar (17.22 KB, 下载次数: 38)

TA的精华主题

TA的得分主题

发表于 2018-8-29 17:51 | 显示全部楼层
t = "[Excel 8.0;hdr=no;Database=" & MyPath & MyFile & "]."

TA的精华主题

TA的得分主题

发表于 2018-8-29 20:42 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
太强大了-------
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 03:36 , Processed in 0.024403 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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