엑셀 VBA로 엑셀 자동화 코드를 작성해야 하는 경우 각 Obejct간의 관계를 알고있으면 도움이 된다.
(이 부분은 파이썬에서 win32com 엑셀 자동화를 다룰 때도 동일한 내용으로 알고 있으면 코드를 쉽게 이해할 수 있다.)
여기서 Object란게 무엇인지 궁금해질 수 있다. 구글링을 하면 Obejct = 개체라고 표현한다. 어떤 자료를 볼 때, 개체 또는 Object라고 표기되어있다면 동일한 것을 표현한다고 보면 된다.
1. 개체(Object)에 대한 개념
참고자료들을 들춰보니 개체(Object)의 예시를 들 때, 자동차에 관련 된 예시를 많이 드는 것 같다. 자동차는 굉장히 수많은 부품의 집약체이다. 이 각각의 부품을 개체(Object)라고 한다. 이 개체(Object)는 3가지 구성요소를 가지고 있다. 속성(Property), 메소드(Method), 이벤트(Event)이다.
예를 들어보자. 자동차에 한가지 핵심 부품 중 하나는 바퀴이다. 바퀴를 하나의 개체(Object)라고 할 수 있다. 바퀴는 여러가지 속성(Property)를 가질 수 있다. 가격, 재질, 용도(계절용 타이어 등)이다.
바퀴.가격 = 20,000원 바퀴.용도 = 윈터 타이어 |
메소드(Method)는 개체(Object)가 어떤 작업을 진행하는 가이다. 바퀴의 주요 기능은 굴러가는 것이다. 굴러가라는 명령을 메소드라고 할수 있겠다.
바퀴.굴러라( ) |
2. 엑셀에서의 개체(Object)란?
엑셀에서 개체는 엑셀에서 작업을 할 대상을 말한다. 예를 들면, Application(엑셀 프로그램), WorkBook(통합문서), WorkSheet(시트), Cell, Range 등이다
각 개체간의 관계가 존재하는데 아래 도식으로 설명할 수 있다. 이 도식에서 Object 간의 관계를 알면 엑셀 프로그래밍을 할 때, 코드를 쉽게 이해할 수 있게 된다.
(아래 도식은 간략화 한 그림이고 Object는 실제 종류가 더 많다.)
예시1) Application(엑셀 프로그램)
Application은 엑셀 프로그램 자체이다. Application이 가진 속성 중 ScreenUpdating이라는 항목이 있는데 VBA가 실행될 때, 엑셀의 내용이 수정되는 과정이 보이게할지 여부를 결정할 수 있다.
Sub 테스트()
Application.ScreenUpdating = False '엑셀 업데이트하는 과정 안보이게
End Sub
예시2) Workbook(통합문서)
엑셀 프로그램을 실행하고 새 문서를 열면 "통합문서1", "통합문서2"와 같은 파일명이 붙는 것을 본 적이 있을 것이다. 이 통합문서 1개를 Workbook 개체 1개라고 이해하면 된다.
이전에 ThisWorkbook과 ActiveWorkbook에 대한 내용을 다룬 적 이 있다. 이 2개 개체는 위 도식 중 Workbook에 속하는 개념이다. 간단하게 설명하면 ThisWorkbook은 엑셀 VBA가 실행되고 있는 Workbook이며, ActiveWorkbook은 현재 활성화되어있는 Workbook이다.
(참고링크 ; https://ybworld.tistory.com/106?category=929858)
예시3) WorkSheet(워크시트)
WorkSheet는 말 그대로 엑셀의 각 시트를 나타내는 개체이다. 하나의 통합문서(Workbook)에는 여러개의 시트가 있을 수 있다.
Sheet1, Sheet2, Sheet3... 와 같이 말이다.
아래 VBA 코드를 보며 이해해보자.
'활성화 된 Workbook의 1번 시트를 선택한다.
ActiveWorkbook.Worksheets(1).Select
위 코드에서 Worksheets(1)이 그 내용이다. 위 도식에 따르면 WorkSheet는 Workbook 하위 개체이다. 사실 ActiveWorkbook을 빼도 동작하지만 나중에 복잡한 프로그램을 작성하게 되어 여러 Workbook이 존재하게 되면 프로그램이 꼬일 수 있어, 정확하게 Workbook도 지정해주는게 좋다.
추가로, 엑셀에서 Object가 모인 것을 컬렉션(Collection)이라고 하는데 Worksheets와 같은 복수형 개체를 말한다. 예를 들면, Worksheets("Sheet1")이라는 코드는 Worksheets 컬렉션 중, Sheet1이라는 이름을 가진 시트를 가리키는 Object인 것이다.
예시4) Range, Cell 등
위 그림의 Range, Cell은 WorkSheet의 하위 개체이다. 아래 코드를 보면 이해할 수 있다. ActiveSheet(활성화 된 시트)의 A1 인덱스에 100을 입력하는 코드이다. ".Value"는 Range의 속성이다.
'활성화 된 Workbook의 활성화 된 Sheet의 A1에 100 입력할 것
ActiveWorkbook.ActiveSheet.Range("A1").Value = 100
예시5) 개체에 대한 메소드
예시4)까지 다룬 내용은 각 개체간의 관계와 속성을 설명했다. 개체에 대한 메소드는 예전에 시트를 복사하는 포스팅에서 다뤘던 코드를 가져와보겠다.
Sub 시트가져오기()
Dim fileName As String
Dim filePath As String
Dim shtName As String
'시트를 가져올 파일명
file = ActiveSheet.Cells(2, 1).Value
'가져올 시트명
shtName = ActiveSheet.Cells(2, 2).Value
'가져올 엑셀파일의 경로
filePath = ThisWorkbook.Path + "\" + file
'해당 파일 열기
Workbooks.Open fileName:=filePath
'열린 파일에서 원하는 시트 가져 오기
ActiveWorkbook.Sheets(shtName).Copy Before:=ThisWorkbook.Sheets(1)
'열린 파일 닫기
Workbooks(file).Close
End Sub
위 코드 중 Copy Before:=ThisWorkbook.Sheets(1)이 메서드 부분이다. Copy는 Worksheet를 대상으로 복사라는 기능을 수행하는 메서드(Method)이다. 코드와 같이 메서드에는 추가로 필요한 정보가 입력될 수 있다.(Before~ 이후부분)
'코딩 > 엑셀,VBA' 카테고리의 다른 글
[엑셀/VBA] 엑셀 Database SQL 사용하기 1편 - ADODB.Recordset (0) | 2021.10.20 |
---|---|
[엑셀/VBA] SpecialCells, CurrentRegion, UsedRange (0) | 2021.09.07 |
[엑셀/VBA] 엑셀 다른 파일에서 데이터 가져오기 : Getobject 함수 사용하기 (22) | 2021.08.19 |
[엑셀/VBA] 엑셀 시트별 모든 데이터 통합하기(합치기) (5) | 2021.08.16 |
[엑셀/VBA] 정적 배열, 동적 배열(ReDim, ReDim Preserve) (0) | 2021.08.12 |