VBA怎么在文件夹内,提取EXCEL的特定内容?

描述:A文件夹内有200个EXCEL表,每个表里面有一个名称为“餐饮费用”的sheet,需要提取表内的特定单元格数据。需求1:每个“餐饮费用”sheet的 B2单元格内容提取;由于部分人员随意插入行和列,导致错行错列情况,只能保证下面需要内容在 C行以下 & A-AH列以内;需求2:由于存在错行错列,需要每个“餐饮费用”sheet中,带有“进货详单内容2”右方的第1个单元格内容提取;需求3:由于存在错行错列,每个“餐饮费用”sheet中,带有“进货地址点”下方的两个单元格内容提取;(为经纬度)最后汇总成表,详见附图

Sub readsubfolders()
i = Cells(Rows.Count, 1).End(3).Row
Set fso = CreateObject("scripting.filesystemobject")
Set myfolder = fso.GetFolder("D:\a") '引号内填写文件夹a的完整路径
For Each myfile In myfolder.Files
If myfile.Name Like "*.xls*" Then
Set wb = Workbook.Open(myfile.Path)
i = i + 1
Cells(i, 1) = wb.Name
Cells(i, 2) = wb.Worksheets("餐饮费用").[b2]
Set rg = wb.Worksheets("餐饮费用").UsedRange.Find(What:="供货商地址", LookIn:=xlValues, LookAt:=xlWhole)
Cells(i, 3) = rg.Offset(1)
Cells(i, 4) = rg.Offset(2)
Set rg = wb.Worksheets("餐饮费用").UsedRange.Find(What:="承包商地址", LookIn:=xlValues, LookAt:=xlWhole)
Cells(i, 5) = rg.Offset(1)
Cells(i, 6) = rg.Offset(2)
Set rg = wb.Worksheets("餐饮费用").UsedRange.Find(What:="进货详单内容2", LookIn:=xlValues, LookAt:=xlWhole)
Cells(i, 7) = rg.Offset(, 1)
wb.Close False
End If
Next
Set fso = Nothing
End Sub追问

Set wb = Workbook.Open(myfile.Path)
报424对象错误了,我试着改了下,又报其他错误,麻烦帮忙调试下

追答

Set wb = Workbooks.Open(myfile.Path)

不小心少打了个s

追问

代码可以运行但没有结果,看了下本地窗口进行逐语句调试,发现在打开EXCEL后,WB一直是无变量状态,对应的CELL也没有相应的值出现在本地窗口,在这个点有点不理解,为什么遍历文件夹的时候可以在宏的SHEET呈现结果,而两个代码大致相同,在最后结果呈现的时候,为什么会有不同结果?

追答

Workbooks.Opend打开工作簿时如果该文件已经打开,就会出错

代码复制到sheet底下,放模块里的话,所有cells前要加工作簿和工作表前缀

追问

手滑点错了,再给大佬补个悬赏吧

温馨提示:内容为网友见解,仅供参考
第1个回答  2022-08-29

完成要求需要掌握以下知识点:

    会使用dir用法遍历文件夹下所有文件,找到所需文件

    会使用open用法打开所需文件(也可不打开文件,通过sql读取内存)

    会使用find用法寻找所需文字位置

    会使用offset用法偏移获取所需信息

    会使用数组用法,将数据存到数组后一次输出,提高计算效率

本回答被网友采纳
第2个回答  2022-08-29
如果每个表都有“进货详单内容2”、”供货商地址“、“承包商地址”,没有其他重复情况,可以通过搜索单元格内容进行定位
Range.Find(What:=查找值, LookIn:=xlValues, LookAt:=xlWhole)
找到位置后,用Offset获取它右边或下边的值本回答被提问者采纳

VBA怎么在文件夹内,提取EXCEL的特定内容?
Sub readsubfolders()i = Cells(Rows.Count, 1).End(3).Row Set fso = CreateObject("scripting.filesystemobject")Set myfolder = fso.GetFolder("D:\\a") '引号内填写文件夹a的完整路径 For Each myfile In myfolder.Files If myfile.Name Like "*.xls*" Then Set wb = Workbook.Open(my...

如何用宏批量提取指定文件夹中所有excel表格中指定sheet的内容?
' 打开文件夹中的每个Excel文件 FileName = Dir(FolderPath & "*.xlsx") ' 可根据实际文件类型进行更改 Do While FileName <> ""Set wbSource = Workbooks.Open(FolderPath & FileName)' 提取每个工作表中的数据 For Each wsSource In wbSource.Worksheets If wsSource.Name = "钢筋出库量" ...

如何在excel使用宏提取文件夹内文本的内容?
1.添加VBA代码,选择新插入的模块后,插入以下代码 Sub getpath()Range("A2:C1000").ClearContents '清空A2:C1000列 On Error Resume Next Dim shell As Variant Set shell = CreateObject("Shell.Application")Set filePath = shell.BrowseForFolder(&O0, "选择文件夹", &H1 + &H10, "") ...

求助!利用VBA在指定文件夹中打开全部Excel文件并复制指定单元格内容
myPath = "C:\\VBA\\data" '把文件路径定义给变量 Application.ScreenUpdating = False '冻结屏幕,以防屏幕抖动 Set FD = fso.GetFolder(myPath)I = 1 For Each F In FD.Files If F.Type = "Microsoft Office Excel 逗号分隔值文件" Then Set AK = Workbooks.Open(F.Path, , True) '打开...

excel怎样用vba自动提取文件夹内的文件名
excel中用vba实现自动提取文件夹内的文件名的方法如下:1、新建一个vba宏脚本 2、写入如下代码:Function GetFileList(FileSpec As String) As Variant ' Returns an array of filenames that match FileSpec ' If no matching files are found, it returns False Dim FileArray() As Variant ...

如何用Excel VBA读取某一文件夹下批量TXT文本内的某行某列?
matlab软件里面的文件窗口的右上角有得点 Excel 如何批量提取同一文件夹下excel信息 那个你直接用“无敌点击狗”软件就能轻松完成,在无敌点击狗里提供有自动点击按键操作和自动批量提取录入,按键模拟等,很方便的。求批处理批量提取某一文件夹下所有文件内指定的字符 把压缩包解压后得到txt文件,然后可试...

如何用excel vba按关键字选择性的遍历文件夹搜索文件?
Excel怎样批量提取文件夹和子文件夹所有文件 怎样批量提取文件夹下文件名

vb怎样读取excel中指定单元格内容并显示vb怎样读取excel中指定单元格...
1.打开一个Excel的文件,在表格中输入简单的表格,比如学生成绩表格。2.接着,鼠标左键单击【开发工具】菜单标签,在VBA控件下拉菜单中,并选择按钮控件,...3.然后,在表格中绘制出按钮控件,并修改控件名称。4.接着,鼠标左键单击【查看代码】按钮 5然后,在代码窗口中输入VBA语句,比如输入定义变量语句,...

文件夹里自动提取所有EXCEL的特定内容,有可能实现此功能吗?
【特定内容】的含义甚广:如果是固定位置的信息,可以考虑函数方式,不过需要同时打开所有工作簿。如果搜宫打开全部工作簿不可行,那还是需要VBA编程来自动处理。如果不是特定位置的内容,那就唯有使用VBA进行全工作簿的全工作表的所有单元格的搜索了 ...

excel,怎么用vba写段关于查找指定文件夹内的文件名,并将其提取值至表...
<> "") Then IsExistFile = fileName Else IsExistFile = "无"End If End Function 参数说明strDir为文件夹路径,fileName为文件名 使用示例:某个单元格输入=IsExistFile("E:\\doc",B2) 即可,若不存在返回无,存在返回B2中的文件名称。路径和文件名可以直接用字符串或引用某个单元格内容。

相似回答