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脚本运行”:
然后,通过迭代目录中的文件:
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
两种方法可以做到这一点从我的头顶。假设您通过FileSystemObject
使用File
。
做一个Instr
file.Name
在字符串中寻找Format(Date, "YYYYMMDD")
。
或者通过文件和循环中使用一个简单得多的方式循环做到这一点:
If File.DateCreate >= Date Then
'Do something
end if
哪里File
是用来通过文件循环的实际变量。
+ 1,但我不会推荐第1种方法。第二种方法很好。在Andy的回答中看到我的评论。 – 2012-08-17 18:46:18
确实。我列出了第一种方法,因为它在技术上是可行的。但是,由于我们没有明确指出它可能导致误报。 – 2012-08-17 19:07:02
If fileName like "*AppServiceUser_" & Format(Now, "YYYYMMDD") & _
"#########.txt" Then
'good to go
End If
OP,我想如果你添加一个“vba”标签的问题,代码突出显示将工作可能?只是猜测 – 2012-08-17 18:38:28
这是一种不可靠的方法。去与丹尼尔建议的第二个选项。原因是文件格式为'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
如果您的文件命名是另一个应用程序的自动输出,你可以依赖“AppServiceUser_YYYYMMDD ....”,然后你可以添加到'If',如:“AppServiceUser_”&Format(Now,“YYYYMMDD”))。OP表示文件格式在文件名中间包含“YYYYMMDD”。你是对的,但如果字符串出现在其他地方,会产生误报。 Ack,不知道如何做一个文字“在评论中更新答案 – 2012-08-17 18:48:28