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

 조삿갓 (choga21)

추천:  2
파일:     조회:  2446
제목:   [RE]매크로를 다른 파일에 적용시키는 방법
     
  전제조건: 매일 출력하는 액셀 파일이 있습니다
파일명은 몇문자로 시작하는것은 동일하나, 실시간 다운로드 할 때 시간 변동이 되어서 저장 됩니다

예를들어, 10시 15분에 다운받은 파일은 abc1015
2시40분에 다운 받은 파일은 abc1440 파일명이 됩니다

질문:
매크로 버튼이 있는 액셀파일1개를 만들어서(매크로 원본)

실시간으로 새로 불러오는 액셀파일을 매크로로 실행하고 싶은데
어떻게 하면 될까요..?

예를들면
매크로원본(버튼이 있는 파일).xlsm
매크로실행 대상 파일.csv(위 전제조건의 파일명 abc1440 등)

프로그램 처럼 매크로원본.xlsm을 열고, 매크로실행대상파일.csv 열고.
매크로원본.xlsm에서 매크로를 실행하면 매크로실행대상파일.csv이 매크로 작동 하는것!

입니다

이것이 구현이 불가능하다면, bat파일을 만들어서 다운받은 파일명
abc1440 등을 매크로 실행시켜서 자동 편집해서 만드는 방법이 있을까요

설명이 익숙치 않아서 죄송해요,, 답변 부탁드려요
==============[j26m33님 글에 대한 답변입니다]==============

다음 코드를 참고해 응용하시기 바랍니다.
다만, 이 코드를 이해하기 위해서는
DOS나 UNIX 계열의 운영체제에서
파일 시스템을 관리하는 방법 특히
ReadOnly, Hidden, System, Archive 등의 속성을
어떻게 기록하고 관리하는지에 대해 먼저 이해해야 합니다.
(관련 서적을 참고하시거나 구글링을 하시거나...)

그 중에서 특히 Archive 속성은
사용자나 프로그램 코드에 의해 조작될 수 있고
파일이 고쳐지거나 저장되면 운영체제에 의해 켜지게 됩니다.
따라서 파일을 대상으로 어떤 작업을 한 뒤에
작업이 끝난 파일에 대해 이 속성을 꺼 두면
나중에 이 파일이 작업 완료된 파일인지 아닌지 알 수 있습니다.

다음 코드에 사용된 ChDir, Dir, GetAttr, SetAttr 등의 메소드는
원래 FileSystem 클래스의 멤버로 알려져 있는데
저도 좀 전에 링크해 드린 도움말을 공부하고 실험해 보니
FileSystem 한정자를 굳이 붙이지 않아도 되는 것 같습니다.

만일 오류가 발생하면
FileSystem.ChDir 과 같이 사용해 보시기 바랍니다.

---------------------------------------------

Dim DnFile As String
Dim DnPath As String
Dim DnMask As String
Dim DnName As String
Dim NotAttr As Integer
Dim MyAttr As Integer
DnPath = "c:\"   ' 다운로드한 파일이 있는 폴더 경로를 풀네임으로 지정합니다.
DnMask = "abc*.csv"  ' 다운로드 파일명의 공통규칙 *, ?은 와일드카드 문자
NotAttr = vbSystem + vbDirectory
' 시스템 파일이나 디렉토리명은 처리 대상에서 제외하기 위함

ChDir(DnPath)  ' 반복작업의 효율성을 위해 아예 디렉토리를 변경함
DnName = Dir(DnMask)   ' 지정한 폴더에서 첫번째 파일 찾음
Do While DnName <> ""   ' Start the loop.
      MyAttr = GetAttr(DnName)
      ' 새로 다운로드 받은 파일이고, 시스템파일이나 디렉토리명은 아닌 경우만 처리
      If (MyAttr And vbArchive) And Not (MyAttr And NotAttr) Then
         Workbooks.Open Filename:= DnName
 Workbooks(DnName).Worksheets(1).Cells(r, c) = 3
' 예시이므로, 필요한대로 알아서 수정
 Workbooks(DnName).Close SaveChanges:=True
                ' 다운로드 받은 파일에 어떤 조작을 했다면 저장하고 닫아야 하겠죠
                ' 그게 아니고 다운로드 받은 파일에서 자료만 읽어와서 처리하고
                ' 다운로드 파일이 변경된 게 아니라면 루아흐뉴마님 예시처럼
                ' SaveChanges:=False 로 설정합니다.
         SetAttr DnName, MyAttr And Not vbArchive
' 처리한 파일은 다음에 중복 처리를 방지하기 위해
                ' Archive 속성을 OFF 시킴
      End If   
   DnName = Dir()   ' Get next entry.
Loop
 
[불량 게시물 신고]  
조삿갓SaveChanges:=True

로 설정할 경우, 만일 다운로드 받은 파일이 읽기전용으로 설정되어 있는 경우에도 오류가 발생할 수 있으므로

NotAttr = vbSystem + vbDirectory + vbReadOnly

로 수정하는 것이 좋겠네요.
05-08 (11:18)
삭제 ■신고
        
  

작성일 : 2018-05-08(11:01)
최종수정일 : 2018-05-08(11:17)
 


 ◎ 관련글

  제 목   작성자   날짜
매크로를 다른 파일에 적용시키는 방법 j26m33 2018-04-30
[RE]매크로를 다른 파일에 적용시키는 방법 조삿갓 2018-05-08