ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 使用ADO+SQL读取数据文件夹里面的工作簿数据

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-4-15 21:12 来自手机 | 显示全部楼层
cmo9020 发表于 2023-4-15 20:07
谢谢导师...在请教一下
我发现刚开始修改不成功能原因
就是所有目标工作簿必须都要相同有A6的 ...

不急。。。

TA的精华主题

TA的得分主题

发表于 2023-4-16 07:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Sub 取值()
Dim MyPath, MyName As String
Dim wb As Workbook
Dim ws As Worksheet
Dim Mfso As Object
Dim Msub As Object
Dim Msub1 As Object
Dim sht As Worksheet
Set sht = Sheets("Sheet1")
wjj = sht.Range("D1").Value
rq = Left(sht.Range("B1").Value, 1)
Set d = CreateObject("scripting.dictionary")
Set Mfso = CreateObject("scripting.filesystemobject")
MyPath = ThisWorkbook.Path & "\數據\"
Set Msub = Mfso.getfolder(MyPath).subfolders
  For Each mm In Msub
  If wjj = Right(mm, Len(mm) - InStrRev(mm, "\")) Then
    Set Msub1 = Mfso.getfolder(mm).subfolders
       For Each nn In Msub1
        If rq = Right(nn, 1) Then
     MyName = Dir(nn & "\*.xls*")
     Do While MyName <> ""
        Set wb = GetObject(nn & "\" & MyName)
         With wb.Sheets("Report")
         r = Cells(Rows.Count, "B").End(3).Row + 1
         arr = .Range("A14:F18")
         arr = Application.Transpose(arr)
         sht.Range("B" & r).Resize(UBound(arr), UBound(arr, 2)) = arr
         sht.Range("A" & r & ":A" & r + UBound(arr) - 1) = .Range("J3")
         
         Erase arr
         End With
        wb.Close False
        MyName = Dir
     Loop
     End If
       Next
  End If
  Next
End Sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-4-16 07:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-4-16 07:23 | 显示全部楼层
用字典可能好一些

Test111.rar

18.1 KB, 下载次数: 17

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-4-16 07:24 | 显示全部楼层
实际就是练手,并不复杂,但觉得你的表格不规范,可能遇到问题

TA的精华主题

TA的得分主题

发表于 2023-4-16 07:25 | 显示全部楼层
我觉得,不用SQL了的时候尽量不用,字典+数组解决最好,实际SQL并不是在VBA编程中的首选

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-16 08:50 | 显示全部楼层
本帖最后由 cmo9020 于 2023-4-30 11:04 编辑
mmwwdd 发表于 2023-4-16 07:24
实际就是练手,并不复杂,但觉得你的表格不规范,可能遇到问题

谢谢导师的帮助
我有自己写了一个需要打开工作簿进行复制
但觉的取数据有点慢,代码也有些问题
会变成有多余的数据出現,我在研究研究一下,谢谢您~


Sub ReadD()
    ThisWorkbook.Worksheets("Sheet1").Range("A3:I100").ClearContents
Dim FolderPath As String
Dim Filename As String
Dim wb As Workbook
Dim ws As Worksheet
Dim i As Long
Dim Data As Variant
Dim Year As String
Year = Range("B1").Value
Dim Month As String
Select Case Range("D1").Value
Case "1月"
Month = Year & "01"
Case "2月"
Month = Year & "02"
Case "3月"
Month = Year & "03"
Case "4月"
Month = Year & "04"
End Select
Dim FolderName As String
FolderName = Range("F1").Value
   FolderPath = "D:\数据\" & FolderName  & "\" & Month & "\"

Application.ScreenUpdating = False
Filename = Dir(FolderPath & "*.xlsx")
Do While Filename <> ""
Set wb = Workbooks.Open(FolderPath & Filename, False, True)
Set ws = wb.Worksheets("Report")

    ' 复制 J3
    Data = ws.Range("J3").Value
    i = i + 1
    ThisWorkbook.Worksheets("Sheet1").Range("A" & i + 2).Value = Data
   
    ' 寻找相同项目并复制数据
    Dim j As Long
    For j = 2 To 8
        Dim FindItem As Variant
        FindItem = ThisWorkbook.Worksheets("Sheet1").Cells(2, j).Value
        Dim FoundCell As Range
        Set FoundCell = ws.Range("A:A").Find(FindItem, LookIn:=xlValues)
        If Not FoundCell Is Nothing Then
            ThisWorkbook.Worksheets("Sheet1").Cells(2 + i, j).Value = FoundCell.Offset(0, 1).Value
        End If
    Next j
   
    wb.Close SaveChanges:=False
    Filename = Dir()
Loop
Application.ScreenUpdating = True
End Sub


TA的精华主题

TA的得分主题

发表于 2023-4-16 20:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cmo9020 发表于 2023-4-15 20:07
谢谢导师...在请教一下
我发现刚开始修改不成功能原因
就是所有目标工作簿必须都要相同有A6的 ...

按需求改进.rar (135.5 KB, 下载次数: 19)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-17 19:38 | 显示全部楼层

谢谢导师帮忙...
不然用开启工作簿方式......遇到30几个档案
真的超级慢...........
非常感谢您~

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-4-30 11:32 | 显示全部楼层
cmo9020 发表于 2023-4-17 19:38
谢谢导师帮忙...
不然用开启工作簿方式......遇到30几个档案
真的超级慢...........



Test.rar (143.41 KB, 下载次数: 2)

谢谢导师...不知道您有没有空在请教一下
现在遇到一个问题
如果读取目标工作表 J3单元格有重复
不知道是不是能读取目标D5单元格的日期+D8单元格时间下去做判断
在提取出最新的那一笔数据


例如:
数据\8038-2429999\202303\
里面现在有2个工作簿 Z33288 和Z33288-1 这2笔里面[Report$A14:B]数据不相同
现在需要的是Z33288-1那笔最新数据
如果是以您这目前代码来修改,有没有办法读取判断目标工作表的
D5单元格的日期+D8单元格时间判断最新的那一笔数据

如果您有空闲在希望您能帮忙一下,谢谢您~


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

本版积分规则

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

GMT+8, 2024-11-17 03:54 , Processed in 0.044511 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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