Daily Life of BlueRose

컴퓨터 & 코딩 공부/엑셀 & VBA

엑셀 VBA 기본기능 정리 - 자료&파일경로 입력받기(입력창띄우기)

푸른로즈 2023. 7. 1. 23:12
728x90

여는 글

엑셀에 대해 공부한 내용을 정리해보았습니다.

여러차례에 걸쳐 공부했던 내용들을 차례로 업로드 할 예정인데,

제가 스스로 사용하기 위해 만들었던 자료인만큼, 타인의 검수가 없었으므로 

최적화나 효율성 면에서 떨어질 수 있다는 점 참고해주시면 감사하겠습니다.

 

하지만 어찌되었건 굴러는 가는 코드들입니다

 

학원에서 프로그래밍을 처음 배울때 강사님께서 해주신 말씀이 떠오르네요.

숟가락은 앞면을 사용하는게 본래용도이지만, 뒷면으로 국을 뜨더라도 조금이나마 먹을수는 있다는 말씀...

덕분에 무작정 부딪혀보며 배운 코딩이지만, 이젠 적어도 VBA에 대해 글을 작성해볼 만큼의 경험은 이제 생긴것 같습니다.

자료를 참고하시는 분들께서도 작은 부분부터 VBA로 바꿔나가다보면 적어도 3달정도만 해봐도 어느정도는 익숙해지실 겁니다. 

 

 

엑셀

 

엑셀 VBA 기본기능 정리 - 자료&파일경로 입력받기(입력창띄우기)

  • 단축키/접근법
    • VBA창 : Alt + F11 혹은 시트이름 우클릭 후 'V'
    • VBA에서 직접실행창 실행 : Ctrl+G
    • 메서드/속성 목록 확인 : Ctrl+J
    • 이름 관리창 열기 : Ctrl+F3

 

 

  • VBA 기본문법
    • 프로시저 선언과 함수 호출
      • 접근성
        • public : 엑셀 매크로 목록에서 확인가능하며, 모듈을 달리해도 참조가 가능하다.
        • private : 엑셀 매크로 목록에서 확인가능하며, 모듈을 달리하면 참조할 수 없다. 같은 모듈 내에서만 참조할 수 있다. 단. 모듈1의 private 기능1, public 기능2(기능1을 호출함)에 대하여, 모듈2에서 기능2를 호출하면 private인 기능1을 사용가능하다.
      • 기능성
        • sub : 별도의 반환값이 없는 프로시저. 매크로 탐색창에 나타난다.
        • function : 별도의 반환값이 있는 프로시저. 애초에 함수를 만드는데 사용되는 기능이다. 반환값이 없어도 기능하는데는 문제가 없긴하다. sub기능과 달리 매크로 탐색창에 보이지 않으므로 유용하다. 대신 함수마법사에 나타나므로 주의가 필요하다.
      • 기타
        • 함수호출 : 함수호출시에는 '모듈명:프로시저명'을 사용하면 된다.
        • 권고사항 : 탐색창에 불필요하게 노출되는 매크로를 줄이고 싶다면, 사용할 프로시저들을 같은 모듈안에 넣어두고 private로 선언하는 것이 좋다.
    • 값의 대입/비교 : 대입/비교 구분없이 '='만 사용한다. C/C++에서 '=/=='을 구분하는 것과 대조적
    • 자료 입력받기
      • 문자 입력받기 : Application.Inputbox
Dim i
Dim target()
    Do While 1
	    ReDim Preserve target(i)
	    target(i) = Application.InputBox("삭제할 문자를 입력. exit를 입력시 종료", Type:=2)
	    If target(i) = "exit" Then Exit Do      			'삭제할 문자를 입력받아 배열로 지정함
	    i = i + 1
    Loop

 

      • 파일경로 입력받기
        • GetOpenFileName
          • 표현식 : Application.GetOpenFileName
          • 개요 : 파일 열기 윈도우를 통해 path를 추출하는 메서드이며, 미리 세팅된 값으로 윈도우를 불러오므로 설정이 필요없어 매우 간편함
          • 주의사항
            • 해당 메서드 사용시, filefilter는 "형식 메모 내용, 확장자" 형태로 입력해야 오류가 없음
            • 해당 메서드를 통해 얻는 것은 파일의 주소값, 즉 string이며, Open메서드로 직접 열어야만 비로소 Workbook개체를 얻을 수 있다.
            • 파일선택창에서 취소를 누르면 에러가 발생하므로, 이에 대하여 파일명이 False일 경우 함수를 종료하도록 설정해두어야 한다.
Dim filePathFull     '파일경로+파일명 원본
Dim filePath     '파일경로만 추출보관할 변수
Dim fileName     '파일명만 추출보관할 변수
filePathFull = Application.GetOpenFilename(filefilter:="Excel Files(*.xls*),*.xls*")
    If filePathFull <> "False" Then     '파일명이 False일 경우 함수 종료
        Else: Exit Sub
    End If
filePath = Left(filePathFull, InStrRev(filePathFull, "\") - 1)     '파일경로 추출
fileName = Right(filePathFull, Len(filePathFull) - InStrRev(filePathFull, "\"))

 

      • FileDialog(msoFileDialogFilePicker)
        • 표현식 : Application.FileDialog(msoFileDialogFilePicker)
        • 속성
          • AllowMultiSelect : True일 경우 파일 다중선택이 가능해짐
          • ButtonName : 파일탐색기에서 표시할 버튼의 이름을 수정한다. (예를들면, 열기 → 확정)
          • Filters : FileDialog의 하위개체이나, FileDialogFilters라는 컬렉션 개체이다. Filters에서 item메서드를 사용하면 FileDialogFilter 단일 개체를 반환받을 수 있다.
            • Filters.Add "필터명", "*.확장자1-1, 확장자1-2; *.확장자2" : 확장자를 제한하는 필터추가
            • Filters.Clear : 현재 FileDialog에 적용중인 모든 필터를 해제한다.
            • Filters.Delete : 필터개체 1개를 삭제한다.
          • InitialFileName : 파일탐색기가 최초로 표기하는 폴더 경로를 설정한다. ※ 이때, ActiveWorbook.Path를 사용하는 경우가 많은데, 이 메서드는 엑셀파일이 저장되었을 때 저장된 경로를 불러오는 것이므로 저장되지 않은상태에서 실행하면 오류가 발생한다.
          • InitialView : 폴더의 기본 보기값(미리보기-아이콘-큰 아이콘-간단히-자세히)을 지정한다.
          • SelectedItems : FileDialogSelectedItems 컬렉션 개체를 불러온다. 사용자가 파일탐색기에서 선택한 개체들(즉, 각 파일의 경로 String의 컬렉션)을 불러오며, SelectedItems(i)의 형태로 해당 개체의 i번째 개체를 불러올 수 있다. ※ 컬렉션 크기를 나타내는 Count 속성과 함께 사용하면 편리하다.
          • Title : 파일탐색기창의 제목을 설정한다.
        • 메서드
          • Show : 파일탐색기를 실행한다. SelectedItems컬렉션과 별개로, return값으로 –1, 0을 반환하는데, -1은 파일이 선택되었음을 의미하고, 0은 취소버튼이 눌렸음 의미한다.
          • 기타 특징 : FileDialog가 SaveAs나 Open으로 지정된 경우에는 이에 동반되는 활동(저장/열기 등)을 뒤이어 실행한다.
Dim FDG As FileDialog					
Dim Selected As Integer: Dim i As Integer			
Dim ReturnStr     'For each문에서의 사용을 위해 Variant로 선언한다.
 
Set FDG = Application.FileDialog(msoFileDialogFilePicker)     'FileDialog중에서도 파일탐색기를 선택한다.

With FDG     'FDG의 속성을 일괄지정하기 위해 With문을 사용한다.
    .Title = "파일을 선택하세요"
    .Filters.Claer()     '필터 사용전 기존 필터들을 제거한다.
    .Filters.Add "엑셀파일", "*.xls; *.xlsx; *.xlsm"     'FilterDialogFilter는 명칭/확장자의 2부분으로 구성된다.
    .InitialView = msoFileDialogViewList     '초기 보기설정은 ‘목록’으로 한다
    .InitialFileName = ThisWorkbook.Path     '파일탐색기 시작위치이다
    .AllowMultiSelect = True
    Selected = .Show     '파일탐색기를 시작하고, return값은 Selected에 저장한다.
End With

For Each ReturnStr In FDG.SelectedItems     'SelectedItems는 배열에 할당할 수 없으므로, For문을 사용
    Debug.Print ReturnStr
Next

 

반응형