Vba Excel宏,仅从今天创建的文件中读取输入
我有一个以txt格式导出每日报告的应用程序。 我有一个宏,可以从这些报告中提取某些行的数据,并将它们放在输出xls文件中。我的宏的输入目录现在是一个单独的文件夹,我手动将今天的报告移动到其中 我希望我的宏能够从默认的报告文件夹中读取,并且只读取以今天的日期创建的文件 报告文件的命名约定如下: 1101_16_16_AppServiceUser_yyyymmddhhmmsxxx.txt 不确定文件名的最后3位代表什么,但它们总是数字 帮忙 哇,太快了!谢谢第一次使用stackoverflow。 我想我应该包括提取数据并将其转储到excel的代码。。。这是:Vba Excel宏,仅从今天创建的文件中读取输入,vba,excel,Vba,Excel,我有一个以txt格式导出每日报告的应用程序。 我有一个宏,可以从这些报告中提取某些行的数据,并将它们放在输出xls文件中。我的宏的输入目录现在是一个单独的文件夹,我手动将今天的报告移动到其中 我希望我的宏能够从默认的报告文件夹中读取,并且只读取以今天的日期创建的文件 报告文件的命名约定如下: 1101_16_16_AppServiceUser_yyyymmddhhmmsxxx.txt 不确定文件名的最后3位代表什么,但它们总是数字 帮忙 哇,太快了!谢谢第一次使用stackoverflow。 我
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使用文件 对文件名执行Instr,在字符串中查找FormatDate、YYYYMMDD 或者使用更简单的方法循环文件,并在循环中执行以下操作:
If File.DateCreate >= Date Then
'Do something
end if
其中File是用于在文件中循环的实际变量。有两种方法可以在我的头顶上完成此操作。假设您正在通过FileSystemObject使用文件 对文件名执行Instr,在字符串中查找FormatDate、YYYYMMDD 或者使用更简单的方法循环文件,并在循环中执行以下操作:
If File.DateCreate >= Date Then
'Do something
end if
其中File是用于循环文件的实际变量。Daniel的答案是正确的,但使用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
编辑:因此,我认为,根据您发布的代码,您可以按照您的意愿将PathN发送到主报告文件夹,然后只需修改您的While语句,如下所示:
While FileName <> ""
If InStr(1, FileName, "AppServiceUser_" & Format(Now, "YYYYMMDD")) > 0 Then
colFiles.Add (FileName)
End If
FileName = Dir
Wend
Daniel的回答是正确的,但使用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
编辑:因此,我认为,根据您发布的代码,您可以按照您的意愿将PathN发送到主报告文件夹,然后只需修改您的While语句,如下所示:
While FileName <> ""
If InStr(1, FileName, "AppServiceUser_" & Format(Now, "YYYYMMDD")) > 0 Then
colFiles.Add (FileName)
End If
FileName = Dir
Wend
哦,我想如果你在问题中添加一个vba标记,代码高亮显示可能会起作用??这是一种不可靠的方法。选择Daniel建议的第二个选项。原因是文件格式为YYYY MM DD hh MM ss X X X X Ex:因此,如果我正在查找2012年8月18日的文件,那么如果您的文件命名是另一个应用程序的自动输出,并且您可以依赖AppServiceUser_YYYYMMDD。。。。然后您可以添加到If中,如:AppServiceUser\uuu&FormatNow,YYYYMMDD。OP声明文件格式包含文件名中间的YYYYMMD。但是您是正确的,如果字符串出现在其他任何地方,它将产生假阳性。确认,不确定如何在注释中执行文字。回答:是的。这将无法通过8月18日的检查1101_16_16_AppServiceUser_20120819201208188.txt这与OP提到的一致报告文件的命名约定如下:1101_16_16_AppServiceUser_YYYYMMDDhhmmssXXX.txt不确定文件名的最后3位代表什么,但它们始终是数字。+1:添加AppServiceUser_uu就像您所做的那样将解决这个问题:哦,我认为如果您在问题中添加vba标记,代码高亮显示可能会起作用??这是一种不可靠的方法。选择Daniel建议的第二个选项。原因是文件格式为YYYY MM DD hh MM ss X X X X Ex:因此,如果我正在查找2012年8月18日的文件,那么如果您的文件命名是另一个应用程序的自动输出,并且您可以依赖AppServiceUser_YYYYMMDD。。。。然后您可以添加到If中,如:AppServiceUser\uuu&FormatNow,YYYYMMDD。OP声明文件格式包含文件名中间的YYYYMMD。但是您是正确的,如果字符串出现在其他任何地方,它将产生假阳性。确认,不确定如何在注释中执行文字。回答:是的。这将无法通过8月18日的检查1101_16_16_AppServiceUser_20120819201208188.txt这与OP提到的一致报告文件的命名约定如下:1101_16_16_AppServiceUser_YYYYMMDDhhmmssXXX.txt不确定文件名的最后3位代表什么,但它们总是数字。+1:添加AppServiceUser_uu,就像您所做的那样,将解决这个问题:+1,但我不推荐第一种方法。第二种方法很好。在安迪的回答中看到我的评论。真的。我列出了第一种方法,因为它在技术上可行。然而,由于我们没有明确指出它可能会导致误报。+1但我不推荐第一种方法。第二种方法很好。在安迪的回答中看到我的评论 D我列出了第一种方法,因为它在技术上可行。然而,由于我们没有明确指出这可能会导致误报。