ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎样把提取多个工作薄多个工作表符合条件的相关内容

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-9-19 09:06 | 显示全部楼层 |阅读模式
每个月都有十几二十份这样的工作薄,每个工作薄里面又有几十个工作表,现在所需要就是要提取工作表里面小计的相关数据,形成汇总表,麻烦帮下忙

汇总表.rar

1.56 MB, 下载次数: 213

TA的精华主题

TA的得分主题

发表于 2016-9-19 09:57 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
请见代码。
2016-09-19提取.png

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-19 10:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我试一下,谢谢老师

TA的精华主题

TA的得分主题

发表于 2016-9-19 12:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Option Explicit

Sub a()
Dim arr(), mypath$, myfile$, i%
mypath = ThisWorkbook.Path & "\"
myfile = Dir(mypath & "*.xlsm")
Do While myfile <> ""
    If myfile <> ThisWorkbook.Name And Left(myfile, 1) <> "~" Then
        i = i + 1
        ReDim Preserve arr(1 To i)
        arr(i) = myfile
    End If
        myfile = Dir()
Loop
Dim rs As Object, MyTable As Object, t%, cnn, s$, brr(1 To 9999, 1 To 3)
Set cnn = CreateObject("adodb.connection")
For i = 1 To UBound(arr)
    cnn.Open "Provider=Microsoft.ACE.OleDb.12.0;Extended Properties='Excel 12.0;HDR=YES'; Data Source=" & mypath & arr(i)
    Set rs = cnn.OpenSchema(20)
    Do Until rs.EOF
        If rs.Fields("TABLE_TYPE") = "TABLE" Then
                s = rs("TABLE_NAME").Value
                If Right(s, 1) = "$" Then
                    t = t + 1
                    brr(t, 1) = mypath & arr(i)
                    brr(t, 2) = Replace(s, "$", "")
                    brr(t, 3) = Mid(brr(t, 2), 5)
                End If
        End If
                rs.MoveNext
            Loop
            cnn.Close
Next
Dim SQL$, x&, y As Integer, m&, tmp1, tmp2
Dim j%, drr, zrr(1 To 99999, 1 To 5)
    For j = 1 To t
        Set cnn = CreateObject("ADODB.Connection")
        cnn.Open "Provider=Microsoft.ace.OleDb.12.0;Extended Properties='Excel 8.0;HDR=NO'; Data Source=" & brr(j, 1)
    SQL = "select * from [" & brr(j, 2) & "$c4:c4]"
    tmp1 = cnn.Execute(SQL)(0)
    SQL = "select * from [" & brr(j, 2) & "$c8:c8]"
    tmp2 = cnn.Execute(SQL)(0)
    SQL = "select """ & tmp1 & """,""" & tmp2 & """,""" & brr(j, 3) & """,F1,F7 from [" & brr(j, 2) & "$B11:H] WHERE F2='小计'"
    Set rs = cnn.Execute(SQL)
        drr = rs.getRows
           For m = 0 To UBound(drr, 2)
                x = x + 1
                For y = 1 To UBound(drr) + 1
                    zrr(x, y) = drr(y - 1, m)
                Next
            Next
    Next
Set cnn = Nothing
Set rs = Nothing
[a2:e99999].ClearContents
[a2].Resize(x, 5) = zrr
End Sub
   

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2016-9-19 13:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

代码简明易懂,谢谢版主

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-19 15:16 | 显示全部楼层
本帖最后由 chymmych 于 2016-9-19 20:18 编辑

Sub lqxs()
    Dim Arr, myPath$, myName$, bt, jyh$
    Dim sh As Worksheet, nm$, Brr(1 To 50000,1 To 5), n&
    Application.ScreenUpdating = False
    Sheet1.Activate
    Cells.ClearContents
    bt = Array("日期", "客户名称", "订单号", "集约号", "金额")
    [a1].Resize(1, UBound(bt) + 1) = bt
    myPath = ThisWorkbook.Path & "\"
    myName = Dir(myPath & "*.xls?")
    Do While myName <> ""
        If InStr(myName, "汇总") = 0 Then
        With GetObject(myPath & myName)
            For Each sh In .Sheets
               jyh = Mid(sh.Name, 5)
               Arr = sh.UsedRange
               If UBound(Arr) > 10 Then
                  rq = Arr(4, 3): mc = Arr(8, 3)
                  For i = 10 To UBound(Arr)
                     If Arr(i, 3) = "小计" Then
                        n = n + 1
                        Brr(n, 1) = rq: Brr(n, 2) = mc: Brr(n, 3) = Arr(i, 2): Brr(n, 4) = jyh: Brr(n, 5) = Arr(i, 8)
                     End If
                  Next
              End If
          Next
          .Close False
      End With
      End If

我运行时,提示对象不支持该属性或方法

TA的精华主题

TA的得分主题

发表于 2016-9-20 09:50 | 显示全部楼层
建议上传出错的附件看看。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-20 10:52 | 显示全部楼层
蓝桥玄霜 发表于 2016-9-20 09:50
建议上传出错的附件看看。

麻烦老师了

新建文件夹.rar

1.48 MB, 下载次数: 212

TA的精华主题

TA的得分主题

发表于 2016-9-20 17:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

    Loop
    Columns("A:D").numberformatlacal = "@"
改为
    Loop
    Columns("A:D").numberformatlocal = "@"

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-9-20 22:32 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
kszcs 发表于 2016-9-20 17:27
Loop
    Columns("A:D").numberformatlacal = "@"
改为

谢谢大神,我真是粗心!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-10 23:41 , Processed in 0.028186 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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