Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1266|回复: 6

如何能够遍历目录下的所有文件

[复制链接]
发表于 2022-9-23 16:04 | 显示全部楼层 |阅读模式
刚开始学习VBA,想通过一段程序遍历指定目录下的所有log文件。读取一个文件中特定类型的字符串到表格中的一行,关闭文件后再执行上述操作。但目前能够实现的效果是只读取了一个文件,并写入了表格的第二行。之后就不再读取log文件了,请大神帮忙看一下,错在哪里,给个提示注:目录中的文件名称格式为1-1.log,1-2.log……2-1.log,2-2.log
代码如下:

Sub test()
Dim y As Integer, m As Integer, n As Integer, TextLine As String
For m = 1 To 2
   For n = 1 To 12
        Open ThisWorkbook.Path & "\" & m & "-" & n & ".log" For Input As #1
        y = 1
        Do While Not EOF(1)
        Line Input #1, TextLine
            If TextLine Like "*NUMBER*" Then
                Sheets("sheet1").Cells(2, y) = Right(TextLine, 20)
                y = y + 1
            End If        
        Loop
        Close #1
        Range("a65535").End(xlUp).Offset(1, 0).Select

    Next n

Next m

End Sub



错误提示

错误提示
发表于 2022-9-23 16:49 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2022-9-23 17:51 | 显示全部楼层
thisluckyboy 发表于 2022-9-23 16:49
要读取的log文件附件发一下。

这个必须要发麽?就是在文件中按行查找指定的字符串,找到了就都放在一行里。执行代码的时候已经可以抓取到一个文件里的了。这个相关的代码应该i没问题的
回复

使用道具 举报

发表于 2022-9-23 18:08 | 显示全部楼层
1) 疑似 Open 文件名有错.
在open 后 加 一句 print m & "-" & n & "结束" , 查看一下运行情况,
open 应该有对应 的出错处理

2) Log 文件 内容 是否 与设想一样 , 比如 大小写...

3) Log 文件 , 可以脱敏 简化 , 再上传 , 方便测试
回复

使用道具 举报

 楼主| 发表于 2022-9-23 19:56 | 显示全部楼层
已经把文件上传
按照提示在open函数后面加了debug.print,可以显示出文件夹内所有log文件。我要提取的字符串,就是那20个字符

QQ截图20220923195055.png
QQ截图20220923195105.png

1-1.zip

586 Bytes, 下载次数: 0

回复

使用道具 举报

 楼主| 发表于 2022-9-23 21:25 | 显示全部楼层
不好意思,我才发现表格中获取到的是最后一个文件,也就是2-12的数据,前面的23个文件的数据,都没保存下来。我字符串的截取存在问题,循环时也有问题
回复

使用道具 举报

 楼主| 发表于 2022-9-24 09:55 | 显示全部楼层
问题已被朋友解决。贴出代码:
Sub test()
Dim x As Integer, y As Integer, m As Integer, n As Integer, TextLine As String
x = 2
For m = 1 To 2
    For n = 1 To 12
        Open ThisWorkbook.Path & "\" & m & "-" & n & ".log" For Input As #1
        y = 1
        Do While Not EOF(1)
        Line Input #1, TextLine
            If TextLine Like "*NUMBER*" Then
                Sheets("sheet1").Cells(x, y) = Mid(TextLine, InStr(TextLine, "210") - 1)
                y = y + 1
            End If
        Loop
        Close #1
    x = x + 1
    Range("a65535").End(xlUp).Offset(1, 0).Select
    Next n
Next m
End Sub
这回24个文件都可以被打开,抓取指定字符串并输入到excel,实现脚本录入了
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-20 12:58 , Processed in 0.335658 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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