Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Excel宏,仅从今天创建的文件中读取输入_Vba_Excel - Fatal编程技术网

Vba Excel宏,仅从今天创建的文件中读取输入

Vba Excel宏,仅从今天创建的文件中读取输入,vba,excel,Vba,Excel,我有一个以txt格式导出每日报告的应用程序。 我有一个宏,可以从这些报告中提取某些行的数据,并将它们放在输出xls文件中。我的宏的输入目录现在是一个单独的文件夹,我手动将今天的报告移动到其中 我希望我的宏能够从默认的报告文件夹中读取,并且只读取以今天的日期创建的文件 报告文件的命名约定如下: 1101_16_16_AppServiceUser_yyyymmddhhmmsxxx.txt 不确定文件名的最后3位代表什么,但它们总是数字 帮忙 哇,太快了!谢谢第一次使用stackoverflow。 我

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

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

报告文件的命名约定如下: 1101_16_16_AppServiceUser_yyyymmddhhmmsxxx.txt 不确定文件名的最后3位代表什么,但它们总是数字

帮忙

哇,太快了!谢谢第一次使用stackoverflow。 我想我应该包括提取数据并将其转储到excel的代码。。。这是:

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我列出了第一种方法,因为它在技术上可行。然而,由于我们没有明确指出这可能会导致误报。