2012-08-17 32 views
1

我有一個應用程序,它以txt格式導出每日報告。 我有一個宏從這些報告中提取某些數據行並將它們放入一個輸出xls文件中。我的宏的輸入目錄是一個單獨的文件夾,我手動移動今天的報告。Excel宏只讀取今日創建的文件的輸入

我想讓我的宏能夠從默認報告文件夾中讀取,並只讀取以今天的日期創建的文件。

報告文件的命名約定如下: 1101_16_16_AppServiceUser_YYYYMMDDhhmmssXXX.txt 不知道文件名的最後3位數字代表什麼,但他們始終號碼。

幫助?

WOW很快!謝謝...第一次使用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 

回答

2

丹尼爾的答案是正確的,但使用FileSystemObject需要幾個步驟:

確保你有一個參考,以「Microsoft腳本運行」: enter image description here enter 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

2

兩種方法可以做到這一點從我的頭頂。假設您通過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

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