인프런 커뮤니티 질문&답변

개미아빠님의 프로필 이미지
개미아빠

작성한 질문수

엑셀 매크로와 VBA 기초부터 실무활용까지 완전 정복

8-7. 파일로 분리된 데이터 한 시트에 취합하는 프로그램 소스 사용하기

선택파일 배열은 1부터 시작하나요?

작성

·

312

2

1. dim에서 선택파일을 variant로 선언하셨는데, 자료 형식이 2가지여서라고 되어 있네요. 구글 검색으로 찾아봤는데, 뒤에 나오는 getopenfilename메서드로 인한 창에서 '취소'-논리값과 파일(텍스트)라는 2가지 형식으로 이해해도 되나요?

2. 선택파일을 getopenfilename메서드에서 텍스트 형식으로 변수를 받으셨는데, 선택된 각 파일의 배열이 선택파일(1), 선택파일(2), ... 로 이해해도 되나요? 어떤 곳에는 보니까 배열의 시작은 0이 아닌가 하는 생각도 들었어요. 선택파일(0), 선택파일(1), ... 

답변 1

1

엑셀여신님의 프로필 이미지
엑셀여신
지식공유자

네~ 안녕하세요? 개미아빠님!

1번 질문

맞습니다. 선택파일 변수를 가변형으로 선언한 것은 GetOpenFilename 메서드에 의해 [열기] 대화상자가 나타나면 취합할 파일을 선택하게 되는데, [열기] 대화상자에서 파일을 두 개 이상 선택하면 파일명이 배열로 변수에 대입되고, [취소]를 누르면 Flase가 대입되므로 변수의 자료 형식을 설정할 수 없어서 Variant(가변형)으로 선언합니다.

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

2번질문

VBA에서 배열의 시작번호는 0번이 맞습니다.

그런데, GetOpenFilename 메서드에 의해 저장되는 선택파일 변수에 저장되는 값이 1번째 파일은 선택파일(1)에, 2번째 파일은 선택파일(2)에 저장되어 For Next 반복문의 초기값을 1로 지정했습니다. 

다른 방식으로는 

For i = LBound(선택파일) To UBound(선택파일)

로 사용하셔도 됩니다. 선택파일 변수에 저장된 가장 작은 값을 시작값으로 지정하고, 가장 큰 값을 최종값으로 설정하는 방법입니다.

LBound함수는 가장 작은 인덱스 값을 반환하고 UBound 함수는 가장 큰 인덱스 값을 반환하는 합니다.

개미아빠님의 프로필 이미지
개미아빠

작성한 질문수

질문하기