파일을 실행하는 VBA
2024. 11. 19. 21:12
여러 엑셀파일을 열고 데이터를 복사하고 붙이고 통합하고 요약하고...
다양한 반복작업들을 자동화 하기 위해서 우선 필요한 것은 파일을 실행하는 부분이다.
그래서 오늘 다룰 주제는 세 가지.
1) 파일 선택창 구현
2) 선택한 파일의 경로 띄우기
3) 선택한 파일 실행하기
1) 파일 선택창 구현하기
Dim FDG As FileDialog
Dim Selcted As Integer
Set FDG = Application.FileDialog(msoFileDialogFilePicker)
With FDG
.Title = "파일을 선택하세요"
.Filters.Add "엑셀파일", "*.xls; *.xlsx; *.xlsm"
.InitialView = msoFileDialogViewList
.InitialFileName = ThisWorkbook.Path '현재 워크북이 저장된 위치를 초기폴더로 설정
.AllowMultiSelect = True
Selected = .Show '파일선택창의 결과값을 변수 selected로 받아온다.
자료형 FileDialog : 파일을 선택할 수 있는 대화상자를 생성한다.
[ 속성 ]
- .Title : 대화상자의 제목 설정
- .Filters : 선택할 수 있는 파일의 형식 설정
- .InitailView : 대화상자의 보기형식 설정
- .InitialFileNamve : 대화상자가 열릴 때의 파일 경로 설정
- .AllowMultiSelect : 여러 파일을 선택할지 말지 True(여러 파일 허용)/False(하나의 파일만 허용)
- .SelectedItems : 대화상자를 통해 선택한 파일의 경로
[ 메서드 ]
- .Show : 대화상자를 통해 선택한 결과값을 정수 값으로 반환한다.
선택된 파일이 없으면 0, 하나 이상이 선택되면 -1을 반환한다.
2) 선택한 파일의 경로 띄우기
Dim Selcted As Integer
Dim ReturnStr As String
IF Selected = 0 Then
msgBox "파일이 선택되지 않았습니다. 다시 선택해주세요."
ElseIf Selected = -1 Then
ReturnStr = FDG.SelectedItems(1)
msgBox ReturnStr
End IF
FileDialog의 중요한 속성인 선택된 파일이 없으면 0, 하나 이상이 선택되면 -1을 반환한다를 이용해서
Selected = Application.FileDialog(msoFileDialogFilePicker).Show
→ Selected가 0이면 파일을 선택 안한 것, -1이면 파일을 선택한 것이 된다.
조건문 IF로 파일을 선택하지 않았을 경우 선택하라는 메시지 박스를,
선택했을 경우에 파일의 경로를 메시지박스로 띄울 수 있다.
지금은 ReturnStr에 .SelectedItems(1)을 할당했으므로
여러 파일을 선택하더라도 객체의 첫번째 배열인 첫번째 파일의 경로만 알 수 있다.
VBA는 다른 언어(JS등..)과 달리 배열의 인덱스가 1로 시작한다. 헷갈리지 않게 주의!
만약 선택한 파일들의 경로를 모두 알고싶다면 for반복문을 사용해서 인덱스()에 숫자가 아니라 변수를 넣어보자.
Dim i As Integer
If Selected = 0 Then
MsgBox "파일이 선택되지 않았습니다. 다시 선택해주세요."
ElseIf Selected = -1 Then
for i = 1 to SelectedItems.Count -1
ReturnStr = ReturnStr & .SelectedItems(i) & ", "
MsgBox ReturnStr
End If
변수 i가 1에서 SelectedItems의 길이 (SelectedItems.Count) -1가 될 때 까지 반복하는 for문
변수 ReturnStr에 파일경로인 SelectedItems를 ','로 구분해서 모두 담는다.
3) 선택한 파일 실행하기
Dim Var, Vars As Variant
Vars = Split(ReturnStr, ", ")
For Each Var In Vars
Var = Trim(Var)
Application.Workbooks.Open (Var)
'엑셀파일 여는 명령문
Next
Split으로 ","를 기준으로 나눠준 뒤 Vars라는 Variant변수에 담아준다.
Vars의 범위 안에서 Var를 반복하는 For Each ... Next문
: Trim으로 공백을 제거해서 정제된 경로를 Var에 담아준다.
Application.Workbooks.Open()로 Var경로의 파일을 실행해준다.
다음 Var로 넘어가서 Vars가 끝날 때 까지 반복한다. (Next)
▽ 전체코드
Sub Multiple_FileDialog()
Dim FDG As FileDialog
Dim Selcted As Integer
Dim i As Integer
Dim ReturnStr As String
Dim Vars, Var As Variant
SelectAgain:
'SelectAgain: ~ GoTo SelectAgain 은, 라벨로 사용되는 구문이다. 흐름을 제어하고 특정 위치로 점프할 수 있게 한다.
'파일을 선택하지 않으면 SelectAgain블록이 반복된다.
Set FDG = Application.FileDialog(msoFileDialogFilePicker)
With FDG
.Title = "파일을 선택하세요"
.Filters.Add "엑셀파일", "*.xls; *.xlsx; *.xlsm"
.InitialView = msoFileDialogViewList
.InitialFileName = ThisWorkbook.Path '현재워크북이 저장된 위치를 초기폴더로 설정
.AllowMultiSelect = True '여러개의 파일 선택
Selected = .Show '파일선택창의 결과값을 변수 selected로 받아옴
'파일 선택하면 정수값이 -1, 선택 안하면 0이 출력됨
If Selected = 0 Then
MsgBox "파일을 선택해주세요."
GoTo SelectAgain:
ElseIf Selected = -1 Then
ReturnStr = ""
'ReturnStr = .SelectedItems(1) '한개의 파일을 받아올때
For i = 1 To .SelectedItems.Count - 1
'-1를 하는 이유는 쉼표가 마지막 글자가 되는 것을 방지하기 위해
ReturnStr = .SelectedItems(i) & ", "
Next i
ReturnStr = ReturnStr & .SelectedItems(.SelectedItems.Count)
End If
MsgBox ReturnStr
Vars = Split(ReturnStr, ", ")
For Each Var In Vars
Var = Trim(Var)
Application.Workbooks.Open (Var)
'엑셀파일 여는 명령문
Next
'returnStr의 배열화
End With
End Sub
▽
▽ 출처
'VBA 이론' 카테고리의 다른 글
Workbook, WorkSheet, Range (0) | 2024.12.03 |
---|---|
범위 선택, Function() (0) | 2024.11.21 |
영어 주소지를 한글로 변환해주는 VBA (3) | 2024.11.15 |
InputBox, 반복문 For (0) | 2024.11.12 |
Range, Cell : 데이터 입력하기, 지우기 (0) | 2024.11.11 |