Excel宏只读取今日创建的文件的输入

问题描述:

我有一个应用程序,它以txt格式导出每日报告。 我有一个宏从这些报告中提取某些数据行并将它们放入一个输出xls文件中。我的宏的输入目录是一个单独的文件夹,我手动移动今天的报告。Excel宏只读取今日创建的文件的输入

我想让我的宏能够从默认报告文件夹中读取,并只读取以今天的日期创建的文件。

报告文件的命名约定如下: 1101_16_16_AppServiceUser_YYYYMMDDhhmmssXXX.txt 不知道文件名的最后3位数字代表什么,但他们始终号码。

帮助?

WOW很快!谢谢...第一次使用*。 我想我应该包括提取数据并转储它出类拔萃的代码......这就是:

Sub PullLinesFromEPremisReport() 
Dim FileName, PathN, InputLn As String 
Dim SearchFor1, SearchFor2, OutpFile As String 
Dim StringLen1, StringLen2 As Integer 
Dim colFiles As New Collection 
Dim bridgekey As String 

PathO = "C:\Documents and Settings\GROMERO\Desktop\CM reconciliation\output\" 
PathN = "C:\Documents and Settings\GROMERO\Desktop\CM reconciliation\input\" 

FileName = Dir(PathN) 

While FileName <> "" 
    colFiles.Add (FileName) 
    FileName = Dir 

Wend 

SearchFor1 = "BRIDGE KEY" 

StringLen1 = Len(SearchFor1) 


OutpFile = "RESULTS.xls" 
Open PathO & OutpFile For Output As #2 

For Each Item In colFiles 
    Open PathN & Item For Input As #1 
     Do Until EOF(1) = True 
       Line Input #1, InputLn 
       If (Left(LTrim$(InputLn), StringLen1) = SearchFor1) Then 
        bridgekey = InputLn 
      End If 

    Loop 

Close #1 
Next Item 

Close #2 
End Sub 

丹尼尔的答案是正确的,但使用FileSystemObject需要几个步骤:

确保你有一个参考,以“Microsoft脚本运行”: enter image description hereenter image description here

然后,通过迭代目录中的文件:

Sub WorkOnTodaysReports() 

'the vars you'll need 
Dim fso As New FileSystemObject 
Dim fldr As Folder 
Dim fls As Files 
Dim fl As File 

Set fldr = fso.GetFolder("C:\Reports") 
Set fls = fldr.Files 

For Each fl In fls 

    'InStr returns the position of the substring, or 0 if not found 
    ' EDIT: you can explicitly use the reliable parts of your file name 
    ' to avoid false positives 
    If InStr(1, fl.Name, "AppServiceUser_" & Format(Now, "YYYYMMDD")) > 0 Then 

     'Do your processing 

    End If 

Next fl 

End Sub 

编辑:所以我觉得,从码Y欧贴,你可以发送PathN到主报告文件夹一样,你的愿望,那么就修改While声明,如下所示:

While FileName <> "" 

    If InStr(1, FileName, "AppServiceUser_" & Format(Now, "YYYYMMDD")) > 0 Then 

     colFiles.Add (FileName) 

    End If 

    FileName = Dir 

Wend 
+0

OP,我想如果你添加一个“vba”标签的问题,代码突出显示将工作可能?只是猜测 – 2012-08-17 18:38:28

+0

这是一种不可靠的方法。去与丹尼尔建议的第二个选项。原因是文件格式为'YYYY MM DD hh mm ss XXX'例如:如果我正在查找8月18日(2012年08月18日)的文件,那么上述文件将失败'2012 08 19 20 12 08 184' – 2012-08-17 18:42:23

+0

如果您的文件命名是另一个应用程序的自动输出,你可以依赖“AppServiceUser_YYYYMMDD ....”,然后你可以添加到'If',如:“AppServiceUser_”&Format(Now,“YYYYMMDD”))。OP表示文件格式在文件名中间包含“YYYYMMDD”。你是对的,但如果字符串出现在其他地方,会产生误报。 Ack,不知道如何做一个文字“在评论中更新答案 – 2012-08-17 18:48:28

两种方法可以做到这一点从我的头顶。假设您通过FileSystemObject使用File

做一个Instrfile.Name在字符串中寻找Format(Date, "YYYYMMDD")

或者通过文件和循环中使用一个简单得多的方式循环做到这一点:

If File.DateCreate >= Date Then 
    'Do something 
end if 

哪里File是用来通过文件循环的实际变量。

+0

+ 1,但我不会推荐第1种方法。第二种方法很好。在Andy的回答中看到我的评论。 – 2012-08-17 18:46:18

+0

确实。我列出了第一种方法,因为它在技术上是可行的。但是,由于我们没有明确指出它可能导致误报。 – 2012-08-17 19:07:02

If fileName like "*AppServiceUser_" & Format(Now, "YYYYMMDD") & _ 
               "#########.txt" Then 
    'good to go 
End If