ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 再次求助麻烦老师帮忙重写代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-8-4 10:57 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
再次求助麻烦老师帮忙重写代码,详见附加文件,谢谢!

数据查找.rar

1.5 MB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2024-8-4 13:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-4 14:04 | 显示全部楼层
  1. Sub CopyData()
  2.     Dim fd As FileDialog
  3.     Dim folderPath As String
  4.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  5.    
  6.     fd.Title = "请选择数据文件夹"
  7.     fd.InitialFileName = ThisWorkbook.Path
  8.       
  9.     '显示选择文件夹对话框
  10.     If fd.Show = -1 Then
  11.         folderPath = fd.SelectedItems(1)
  12.     Else
  13.         MsgBox "未选择数据文件夹,程序退出"
  14.         Set fd = Nothing
  15.         Exit Sub
  16.     End If
  17.    
  18.     '获取数据文件
  19.     Dim fileName As String
  20.     fileName = Dir(folderPath & "\*.xls*")
  21.    
  22.     Dim wsList As Worksheet, wsTest As Worksheet
  23.     Dim targetWorkbook As Workbook
  24.     Dim targetSheet As Worksheet
  25.     Dim lastRow As Long
  26.     Dim lastCol As Long
  27.     Dim i As Long, j As Long
  28.     Dim matchFound As Boolean
  29.     Set wsList = ThisWorkbook.Worksheets("清单")
  30.     Dim targetValue As Variant
  31.     targetValue = ThisWorkbook.Sheets("数据录入").Range("C3").Value

  32.     ScreenUpdating = False

  33.     Dim myArr(), myCopyArr(), myCopyArrTrns()
  34.     ReDim myCopyArr(1 To 1000, 1 To 100)   '根据数据量大小预设一下数组的大小
  35.     Dim n As Long             '匹配目标计数器
  36.     n = 0
  37.    
  38.     Do While fileName <> ""
  39.         Set targetWorkbook = Workbooks.Open(folderPath & "" & fileName)
  40.         Set targetSheet = targetWorkbook.Worksheets("测试")
  41.         myArr = targetSheet.UsedRange
  42.         lastRow = UBound(myArr, 1)
  43.         lastCol = UBound(myArr, 2)
  44.         
  45.         For i = 2 To lastRow
  46.             If myArr(i, 6) = targetValue Then
  47.                 n = n + 1                          '找到一条匹配的记录,计数器加1
  48.                 If n > UBound(myCopyArr, 1) Then   '如果记录数组容量不够用就扩容
  49.                     myCopyArrTrns = Application.Transpose(myCopyArr)    '由于扩容只能扩展数组最后一维,无法直接扩展第一维,所以进入数组转置
  50.                     ReDim Preserve myCopyArrTrns(LBound(myCopyArr, 1) To UBound(myCopyArr, 2), LBound(myCopyArr, 1) To UBound(myCopyArr, 1) * 2) '现有容量翻倍
  51.                     myCopyArr = Application.Transpose(myCopyArrTrns)
  52.                 End If
  53.                
  54.                 For j = 1 To lastCol
  55.                     myCopyArr(n, j) = myArr(i, j)   '复制匹配的数据
  56.                 Next
  57.             End If
  58.         Next i
  59.         
  60.         targetWorkbook.Close SaveChanges:=False
  61.         Set targetSheet = Nothing
  62.         Set targetWorkbook = Nothing
  63.         MsgBox "扫描完一个文件,开始扫描下一个文件" & "目前已有" & n & "条记录"
  64.         fileName = Dir()
  65.     Loop
  66.     MsgBox "扫描完毕,共找到" & n & "条匹配的数据"
  67.     wsList.Range("a4").Resize(n, lastCol).Value = myCopyArr
  68.     ScreenUpdating = True
  69. End Sub

复制代码

查找.zip

1.64 MB, 下载次数: 6

TA的精华主题

TA的得分主题

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

do循环之前加一句:    wsList.UsedRange.Offset(3).ClearContents
end sub前加一句:    if n>0 then wslist.Activate

TA的精华主题

TA的得分主题

发表于 2024-8-4 15:13 | 显示全部楼层
Sub qs()
    Dim fso As Object
    Dim folderPath As String
    Dim file As Object
    Dim wb As Workbook, xb As Workbook
Set wb = ThisWorkbook
tt = Sheet3.Range("c3").Value
ph = ThisWorkbook.Path
x = VBA.InStrRev(ph, "\")
ph = Mid(ph, 1, 29) & "数据库\Test"
    ' 创建FileSystemObject对象
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    ' 设置要遍历的文件夹路径
    folderPath = ph
    ' 检查文件夹是否存在
    If fso.FolderExists(folderPath) Then
        ' 获取文件夹
        Set folder = fso.GetFolder(folderPath)
        ' 遍历文件夹中的所有文件
        For Each file In folder.Files
            ' 检查文件是否是Excel文件
            If LCase(fso.GetExtensionName(file.Name)) = "xlsx" Or _
               LCase(fso.GetExtensionName(file.Name)) = "xls" Then
                ' 这里是文件名
'                Debug.Print file.Name
                Set xb = Workbooks.Open(ph & "\" & file.Name, 0)
                arr = xb.Sheets("测试").Range("a2").CurrentRegion.Value
                xb.Close (0)
                m = 0
                ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
                    For i = 1 To UBound(arr)
                        If arr(i, 6) <> "" And arr(i, 6) = tt Then
                            m = m + 1
                            For j = 1 To UBound(arr, 2)
                                brr(m, j) = arr(i, j)
                            Next
                        
                        End If
                    Next
               
                ' 这里可以添加你的代码来处理每个Excel文件
            End If
            rw = wb.Sheets("清单").Cells(Rows.Count, 1).End(3).Row + 1
            wb.Sheets("清单").Range("a" & rw).Resize(m, UBound(arr, 2)) = brr
        Next file
    Else
        MsgBox "指定的文件夹不存在。"
    End If
    ' 清理
    Set fso = Nothing: Set wb = Nothing
    Set folder = Nothing: Set xb = Nothing
    Application.ScreenUpdating = True
End Sub

TA的精华主题

TA的得分主题

发表于 2024-8-4 15:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
试试.............
PixPin_2024-08-04_15-11-35.gif

TA的精华主题

TA的得分主题

发表于 2024-8-4 15:18 | 显示全部楼层
试试........

数据查找.rar

1.59 MB, 下载次数: 8

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-4 15:25 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-8-4 15:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
天真无鞋 发表于 2024-8-4 15:25
老师指定文件夹不存在

我这里代码运行正常的.............
PixPin_2024-08-04_15-32-27.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-8-4 15:42 | 显示全部楼层
Qs18 发表于 2024-8-4 15:34
我这里代码运行正常的.............

我一步一步测试,直接跳到没有找到指定文件夹,文件夹都在。
image.png
Sub qs()
    Dim fso As Object
    Dim folderPath As String
    Dim file As Object
    Dim wb As Workbook, xb As Workbook
Set wb = ThisWorkbook
tt = Sheet3.Range("c3").Value
ph = ThisWorkbook.Path
x = VBA.InStrRev(ph, "\")
ph = Mid(ph, 1, 29) & "数据库\Test"
    ' 创建FileSystemObject对象
    Application.ScreenUpdating = False
    Set fso = CreateObject("Scripting.FileSystemObject")
    ' 设置要遍历的文件夹路径
    folderPath = ph
    ' 检查文件夹是否存在
    If fso.FolderExists(folderPath) Then
        ' 获取文件夹
        Set folder = fso.GetFolder(folderPath)
        ' 遍历文件夹中的所有文件
        For Each file In folder.Files
            ' 检查文件是否是Excel文件
            If LCase(fso.GetExtensionName(file.Name)) = "xlsx" Or _
               LCase(fso.GetExtensionName(file.Name)) = "xls" Then
                ' 这里是文件名
'                Debug.Print file.Name
                Set xb = Workbooks.Open(ph & "\" & file.Name, 0)
                arr = xb.Sheets("测试").Range("a2").CurrentRegion.Value
                xb.Close (0)
                m = 0
                ReDim brr(1 To UBound(arr), 1 To UBound(arr, 2))
                    For i = 1 To UBound(arr)
                        If arr(i, 6) <> "" And arr(i, 6) = tt Then
                            m = m + 1
                            For j = 1 To UBound(arr, 2)
                                brr(m, j) = arr(i, j)
                            Next
                        
                        End If
                    Next
               
                ' 这里可以添加你的代码来处理每个Excel文件
            End If
            rw = wb.Sheets("清单").Cells(Rows.Count, 1).End(3).Row + 1
            wb.Sheets("清单").Range("a" & rw).Resize(m, UBound(arr, 2)) = brr
        Next file
    Else
        MsgBox "指定的文件夹不存在。"
    End If
    ' 清理
    Set fso = Nothing: Set wb = Nothing
    Set folder = Nothing: Set xb = Nothing
    Application.ScreenUpdating = True
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 08:36 , Processed in 0.036875 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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