2012-08-17 3 views
1

일일 보고서를 txt 형식으로 내보내는 응용 프로그램이 있습니다. 해당 보고서에서 특정 라인의 데이터를 추출하여 출력 xls 파일에 저장하는 매크로가 있습니다. 내 매크로의 입력 디렉토리는 현재 수동으로 오늘 보고서를 이동하는 별도의 폴더입니다.오늘 만든 파일의 입력을 읽는 Excel 매크로

내 매크로를 기본 보고서 폴더에서 읽고 단지 오늘 날짜로 만든 파일 만 읽을 수 있기를 바랍니다. 파일 이름의 마지막 3 자리 숫자가 무엇을 나타내는 지 확인 1101_16_16_AppServiceUser_YYYYMMDDhhmmssXXX.txt 아니지만, 그들은 항상 번호가있어 다음과 같이

보고서 파일의 이름 지정 규칙은.

도움 말?

와우! 덕분에 ... 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를를 사용하는 몇 가지 단계가 필요합니다 다음을 반복하는, 그런 enter image description here enter image description here

: 당신이 참조에 "마이크로 소프트 런타임 스크립팅"을 가지고 있는지 확인

을 코드 Y에서 그래서 생각 :

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 

이 편집 : 디렉토리에있는 파일

While FileName <> "" 

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

     colFiles.Add (FileName) 

    End If 

    FileName = Dir 

Wend 
+0

OP, 질문에 "vba"태그를 추가하면 코드 강조 표시가 어쩌면 작동할까요? 그냥 추측 –

+0

이것은 신뢰할 수없는 방법입니다. Daniel이 제안한 두 번째 옵션으로 이동하십시오. 파일 형식 인 이유는'YYYY MM DD hh mm ss XXX'입니다. 예 : 8 월 18 일 (2012 08 18) 파일을 찾고 있다면 위의 내용은'2012 08 19 20 12 08 184' –

+0

에 실패합니다. 파일 이름 지정은 다른 응용 프로그램의 자동 출력이며 "AppServiceUser_YYYYMMDD ...."에 의존 할 수 있습니다. 그러면 "AppServiceUser_"및 Format (Now, "YYYYMMDD")과 같이 If If에 추가 할 수 있습니다.OP는 파일 형식이 파일 이름의 중간에 "YYYYMMDD"를 포함한다고 말했습니다. 그러나 문자열이 다른 곳에서 나타나면 거짓 긍정을 산출합니다. Ack, 코멘트에서 리터럴을하는 법을 모르겠다 답을 업데이트 중 ... –

2

두 가지 방법으로 당신이 내 머리의 상단이를 할 수 있습니다. FileSystemObject을 통해 File을 사용한다고 가정합니다.

문자열 내에서 Format(Date, "YYYYMMDD")을 찾고 file.Name에서 Instr을 수행하십시오.

또는 파일을 통해 루프 내에서 훨씬 간단 접근 루프를 사용하여이 작업을 수행 : File이 파일에 대해 반복하는 데 사용되는 실제 변수

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

.

+0

+ 1하지만 첫번째 방법을 권하고 싶지 않다 : OU는 당신이 원하는처럼 그때 너무처럼 While 문을 수정, 주요 보고서 폴더에 PathN을 보낼 수 기록했다. 두 번째 방법은 좋습니다. 앤디의 대답에 대한 제 코멘트를보십시오. –

+0

사실. 나는 기술적으로 작동하기 때문에 첫 번째 방법을 열거했다. 그러나 우리가 명확하게 밝히지 않았지만 오탐 (false positive)이 발생할 가능성이 있습니다. –

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