엑셀 VBA 강좌(4): 엑셀 Object Model 다루기
이번 글에서는 엑셀 Object Model을 다루는 방법을 살펴본다.
2.4. 간단한 코드로 엑셀 Object Model 이해하기
2.4.1. 객체 접근 기본형
파일, 시트, 범위(Range), 셀(Cell)을 접근하는 가장 기본적인 코드를 살펴보자. 참고로, 객체 접근시 전역 개체 Application은 생략할 수 있다. 아래 1 ~ 6 각 예시 두번째 줄에는 Application을 생략한 코드로 표현했다.
'1. 이름이 t1.xlsx 인 파일 Application.Workbooks("t1.xlsx") Workbooks("t1.xlsx") '2. 이 파일의 Sheet1 시트 Application.Workbooks("t1.xlsx").Worksheets("Sheet1") Workbooks("t1.xlsx").Worksheets("Sheet1") '3. 이 시트의 A1 cell Application.Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1") Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1") '4. 이 시트의 A1 cell 에 "TEST" 문자열 입력 Application.Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1") = "TEST" Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1") = "TEST" '5. 이 시트의 A1 cell 글꼴을 굵게(Bold) 설정 Application.Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1").Font.Bold = True Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1").Font.Bold = True '6. 이 시트의 A2:D4 범위 Application.Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A2:D4") Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A2:D4")
하나씩 자세히 살펴보자.
'1. 이름이 t1.xlsx 인 파일 Application.Workbooks("t1.xlsx") Workbooks("t1.xlsx")
▲ 현재 엑셀에서 열려있는 파일중 이름이 “t1.xlsx”인 파일을 가리키는 구문이다. Workbooks는 열려 있는 파일들의 목록(colletion)을 관리한다. 여러 파일 중 하나를 고를 때 Workbooks collection에 ‘파일명’을 parameter로 접근한다. (참고로, 파일명 외에 “Workbooks(1)”과 같이 파일이 열린 순번을 parameter로 사용할 수도 있다.)
'2. 이 파일의 Sheet1 시트 Application. Workbooks("t1.xlsx").Worksheets("Sheet1") Workbooks("t1.xlsx").Worksheets("Sheet1")
▲ 위에서 지정한 “t1.xlsx”파일의 “Sheet1” 시트를 가리키는 구문이다. Worksheets는 한 파일의 시트 목록(collection)을 관리한다. 여러 시트 중 하나를 고를 때 Worksheets collection에 ‘시트명’을 parameter로 접근하면 된다. (Workbooks와 마찬가지로 “Worksheets(1)”과 같이 시트의 순번을 parameter로 사용할 수도 있다.)
'3. 이 시트의 A1 cell Application.Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1") Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1")
▲ 위에서 지정한 “Sheet1” 시트의 “A1” cell을 가리키는 구문이다.
'4. 이 시트의 A1 cell 에 "TEST" 문자열 입력 Application.Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1") = "TEST" Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1") = "TEST"
▲ 위에서 접근한 cell에 문자열 값을 입력하는 코드이다. 문자열, 숫자 등 모든 유형의 값을 입력할 수 있다.
'5. 이 시트의 A1 cell 글꼴을 굵게(Bold) 설정 Application.Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1").Font.Bold = True Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A1").Font.Bold = True
▲ Range 개체를 이용하여 cell 서식을 설정하는 코드이다. 글꼴 명칭, 색상, 크기, 배경색상, cell 테두리 종류, 테두리 색상 등 모든 cell 서식을 VBA 코드로 설정할 수 있다.
'6. 이 시트의 A2:D4 범위 Application.Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A2:D4") Workbooks("t1.xlsx").Worksheets("Sheet1").Range("A2:D4")
▲ Range 개체는 여러 연속된 cell을 가리킬 수 있다. Range(“A2:D4”)는 ‘2행 1열’ ~ ‘4행 4열’을 나타낸다.
2.4.2. 객체 접근 단순형
현재 파일, 시트를 접근할 때는 다음과 같이 단순하게 사용할 수 있다. 이 코드는 단순하여 가독성은 높으나, 실행중에 현재 파일, 현재 시트가 변경되는 경우는 주의가 필요하다.
'1. 현재 열려있는 파일 ActiveWorkbook '2. 현재 열려있는 시트 ActiveWorksheet '3. 현재 열려있는 시트의 A1 cell Range("A1") ActiveWorksheet.Range("A1") '4. 현재 열려있는 시트의 A1 cell 에 "TEST" 라는 값 할당 Range("A1") = "TEST" '5. 현재 열려있는 시트의 시트의 A1 cell 글꼴을 굵게(Bold) 설정 Range("A1").Font.Bold = True '6. 현재 열려있는 시트의 A2:D4 범위 Range("A2:D4")
2.4.3. 객체 접근 & 활용 예제
객체에 접근하는 몇가지 사례를 더 살펴보자.
'1. 현재 열려있는 파일들 Workbooks '2. 현재 열려있는 파일들의 수 Workbooks.Count '3. 새로운 파일 만들기 Workbooks.Add '4. 현재 파일을 C:\test.xlsx로 저장하기 ActiveWorkbook.SaveAs "C:\test.xlsx" '5. 현재 파일의 이름을 보여주기 MsgBox ActiveWorkbook.Name '6. 현재 열려있는 파일의 시트들 Worksheets '7. 현재 열려있는 파일의 시트들의 수 Worksheets.Count '8. 새로운 시트 만들기 Worksheets.Add '9. Sheet1을 삭제하기 Worksheets("Sheet1").Delete '10. 현재 시트의 이름을 보여주기 MsgBox ActiveSheet.Name '11. 현재 열려있는 시트의 A1 cell 선택 Range("A1").Select '12. 현재 열려있는 시트에서 사용된 영역을 선택 ActiveSheet.UsedRange.Select
2.5. 엑셀 Object Model 상세
자주 사용하는 엑셀 Object Model의 계층구조는 다음과 같다. 이 그림에 표기된 개체들은 엑셀 VBA에 제공하는 전체가 아닌 일부이다. 이중에서 배경색이 있는 객체는 지금까지의 내용에서 한번씩 다뤘었다.
흰색 배경의 개체들을 지금 모두 알아야 필요는 없다. 나중에 필요할 때 학습하고 이용해도 된다. 지금은 그냥 이런게 있구나 하는 정도로만 살펴보면 충분하다.
전체 개체는 Microsoft Docs 사이트에 page1, page2, page3으로 나누어 정리되어 있다.
위 각 이미지의 출처는 다음 URL이다.
- Page1: https://docs.microsoft.com/en-us/previous-versions/office/developer/office-xp/aa141044(v=office.10)?redirectedfrom=MSDN
- Page2: https://docs.microsoft.com/en-us/previous-versions/office/office-10/aa189565(v=office.10)?redirectedfrom=MSDN
- Page 3: https://docs.microsoft.com/en-us/previous-versions/office/office-10/aa189566(v=office.10)?redirectedfrom=MSDN
이상으로 엑셀 Object Model에 대해서 자세하게 알아보았다. 다음에는 엑셀 VBA와 관련한 참고사항에 대하여 설명하겠다.
<< 관련 글 목록 >>
- 엑셀 VBA 강좌를 시작합니다. (강좌예고, feat.엑셀 VBA를 권장하는 이유)
- 엑셀 VBA 강좌(1): 엑셀 VBA 개요
- 엑셀 VBA 강좌(2): 엑셀 VBA 기초
- 엑셀 VBA 강좌(3): 엑셀 Object Model
- 엑셀 VBA 강좌(4): 엑셀 Object Model 다루기
- 엑셀 VBA 강좌(5): 엑셀 파일 확장자, VBE, 글꼴 설정
- 엑셀 VBA 강좌(6): 엑셀 VBA 언어 기본-변수
- 엑셀 VBA 강좌(7): 엑셀 VBA 언어 기본-문법(Syntax)
- 엑셀 VBA 강좌(8): 엑셀 VBA 언어 기본-자료형(Data type), 자료구조(Data structure)
- 엑셀 VBA 강좌(9): 엑셀 VBA How-To
- 엑셀 VBA 강좌(10): 엑셀 VBA로 개발하여 사용중인 도구
- 엑셀 VBA 강좌 전체 목차