나눔터  
  HOME > 나눔터 > 묻고답하기 > 엑셀
엑셀
엑셀에 대한 질문과 답변을 올려주세요. 단, 취지에 맞지 않는 글은 운영자가 삭제합니다.
 "000 님, 도와주세요", "부탁 드립니다.", "급합니다!" 등과 같이 막연한 제목을 달지 말아주세요.
[필독] 빠르고 정확한 답변을 얻는 16가지 Tip !
[필독] 저작권법 개정에 따른 이용안내
작성자:  

 조삿갓 (choga21)

추천:  2
파일:     조회:  4406
제목:   [RE]vba 폴더내 최근 생성 파일 불러오기
     
  * 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.

 - 엑셀 버전(95,97,2000,xp,2003,2007): 2010 

* 아래줄에 질문을 작성하세요 >> 폴더내에 날짜만 계속 변경되면서
파일이 계속적으로 생성되는데 

이걸 폴더에 직접 들어가서 열 필요없어
폴더경로 지정해놓고 
폴더내에 가장 최신받은 파일만 열게끔 하는 vba코드를 알고 싶어요
 
strPath = "경로"
strFile = strPath & 엑셀파일이름"
Workbooks.Open Filename:=strFile

이런 식으로 파일 여는 건 알겠는데 최근 생성된 파일 여는 
vba를 알고 싶습니다 

어떻게 하면 되나요?
==============[김진우님 글에 대한 답변입니다]==============

다음 사용자정의함수를 모듈에 추가하시기 바랍니다.

지정된 폴더와 파일 이름 패턴을 만족하는 파일들 중에서
가장 최근에 생성된 파일의 이름을 반환해 줍니다.

따라서
Workbooks.Open Filename:=LastFile(strPath & "\*.xls*")

와 같이 호출하면, strPath로 지정된 경로에서 가장 최근에 생성된
엑셀 파일을 열어줄 것입니다.

===================================

Function LastFile(Optional mask As String = "") As String
    Dim c As Integer
    Dim fname As String
    Dim fdate As Date
    Dim LastDate As Date
    Dim NotAttr As Integer
    
    NotAttr = vbSystem + vbDirectory
        ' 시스템 파일이나 디렉토리명은 처리 대상에서 제외하기 위함
    For c = Len(mask) To 1 Step -1
        If Mid(mask, c, 1) = "\" Then Exit For
    Next c
    If c > 0 Then
        ChDir Left(mask, c - 1)
        mask = Mid(mask, c + 1)
    End If
    LastDate = 1
    fname = Dir(mask)   ' 지정한 폴더에서 첫번째 파일 찾음
    Do While fname <> ""   ' Start the loop.
        If Not (GetAttr(fname) And NotAttr) Then
            ' 시스템파일이나 디렉토리명은 제외하고 처리
            fdate = FileDateTime(fname)
            ' 해당 파일의 생성 날짜/시각을 읽어서 최댓값을 검색함
            If fdate > LastDate Then
                LastDate = fdate
                LastFile = fname
            End If
        End If
        fname = Dir()   ' 다음 대상 파일명 찾기
     Loop
End Function
 
[불량 게시물 신고]  
김진우폴더내 문서가 읽기 전용이라 액세스 할 수 없다는 에러가 뜨네요 ㅠ 폴더가 읽기 전용이라도 액세스 할 방법은 없을까요?07-04 (10:29)
삭제 ■신고
조삿갓현재의 코드 상으로는 파일이나 폴더에 쓰는 명령이 없기 때문에 '읽기 전용이어서 액세스할 수 없다'는 오류는 나타날 이유가 없고, 제가 실험해 본 바로도 아무 문제가 없습니다.

해당 코드 말고 다른 부분에서 문제가 발생하는 것 아닌가요?
07-04 (16:02)
삭제 ■신고
조삿갓strFile = LastFile(strPath & "\*.xls*")
SetAttr strFile, (GetAttr(strFile) And Not vbReadOnly)
Workbooks.Open Filename:=strFile
... 연 파일에 대해 데이터 조작 ...
Workbooks.Save

와 같은 방법으로 대상 파일에 대해 '읽기전용' 속성을 해제한 후 작업을 하도록 코딩해 보시기 바랍니다.
07-04 (22:52)
삭제 ■신고
김진우다른 PC에서 하니까 잘되네요 근데 이 생각을 못했네요 코드 실행했을 때 엑셀파일을 새창으로 열어서 불러올 수는 없을까요? 현재 작업하는 창에 뜨면 아무래도 동시에 보기 어려워서요 ㅠ07-04 (22:52)
삭제 ■신고
조삿갓엑셀 버전을 2013 이후 버전으로 업그레이드 해 보시기 바랍니다. 기본적으로 새창에 열립니다.07-04 (22:56)
삭제 ■신고
        
  

작성일 : 2018-07-03(22:41)
최종수정일 : 2018-07-03(22:41)
 


 ◎ 관련글

  제 목   작성자   날짜
vba 폴더내 최근 생성 파일 불러오기 김진우 2018-07-03
[RE]vba 폴더내 최근 생성 파일 불러오기 조삿갓 2018-07-03