엑셀 VBA 개체(Object) 변수를 알아보자! :: 개체 변수 총정리

VBA 코딩을 제대로 하려면 반드시 알아야 할 과목, 개체(Object) 변수란 무엇인지 단계별로 살펴봅니다.

# VBA

작성자 :
오빠두엑셀
최종 수정일 : 2021. 11. 10. 21:59
URL 복사
메모 남기기 : (15)

| 엑셀 VBA 변수 기초 강의 - 개체 Object 변수에 대하여 | 엑셀 VBA 강의 1-5 |

실습파일 무료E-Book 강의 PPT 파일 완성파일
첨부파일에 이상이 생겼을 경우, 1:1 문의하기로 연락주시면 신속히 해결해드리겠습니다. 

1. 개체변수(Object)를 지정할 때 Dim / Set을 사용하는 이유

개체(Object)를 VBA 변수로 지정할 경우 반드시 Set을 사용해야 하는데요, 왜 그럴까요?

이를 이해하기 위해서는 우선 Dim (Declare In Memory)에 대해서 간단히 이해하고 넘어가야 합니다.

1-A. Dim (Declare In Memory) : 메모리를 예약

VBA에서 Dim은 변수를 지정하기 위해 사용합니다. 변수를 지정한다는 것은 프로그래머의 입장에서는 이후에 코드작성을 좀 더 편하게 하기 위한 것도 있겠지만, 코드 실행속도를 고려한다면 컴퓨터의 입장에서는 일정부분의 메모리를 미리 할당함으로써 코드 실행을 준비하는 작업이 될 수도 있습니다.

즉, Dim을 사용하여 변수를 지정하게 되면 컴퓨터에게 “내가 이 코드를 실행하려면 변수로 지정한 만큼 메모리가 필요한데 예약좀 해줘~” 라는 명령을 보내게됩니다.

엑셀 VBA 개체 Object 변수 강의 2
Dim은 컴퓨터의 메모리 사용을 예약하는 기능을 합니다.
1-B. Set: 개체변수를 할당

Dim을 통해서 VBA 변수를 지정하였으면 일반 데이터타입(숫자/문자/논리값)은 Set 없이 각 변수안에 데이터를 할당하고, 개체(Object) 데이터타입은 Set을 통하여 데이터를 할당합니다.

엑셀 VBA 개체 Object 변수 강의 3
Set (또는 Let)을 통하여 예약된 메모리(변수)안에 원하는 데이터를 할당합니다.
1-C. 왜 개체(Object) 변수 안에 데이터를 할당할 때는 Set을 사용하나요?

일반 데이터타입은 Set 없이 바로 변수안에 데이터를 할당할 수 있습니다. 왜 그럴까요?

사실 일반 데이터타입의 경우에는 데이터를 할당할 때에 앞에 ‘Let’ 을 입력해야 되지만, VBA에서는 유저의 편의를 위해 Let을 기본값으로 설정해서, 사용자가 바로 데이터를 할당할 수 있도록 하였습니다.

엑셀 VBA 개체 Object 변수 강의 4
Set은 개체변수를 설정할 때에 반드시 입력해줘야 합니다.

2. VBA 일반 데이터타입과 개체 데이터타입의 차이점

이것만 기억하세요!

일반 데이터타입의 사용 목적 ⇨ 데이터의 입력 / 출력
개체 데이터타입의 사용 목적 ⇨ 데이터의 입력 / 출력을 위한 프로시져(명령문)으로 동작

일반 데이터타입과 개체 데이터타입의 차이점은 영상강의에서 자세히 다루고 있습니다.

2-A. 예제코드1] (일반 데이터타입의 입/출력 확인)
Sub Test1()
 
Dim myName as String
Dim myAge as Integer
 
myName = “오빠두”
myAge = 20
 
Msgbox myName
Msgbox myAge
 
End Sub
2-B. 예제코드2] (개체 데이터타입의 입/출력 확인)
Sub test2()
 
Dim myRange As Range
 
Set myRange = Sheet1.Range("A1")
 
myRange.Value = "오빠두"
 
MsgBox myRange.Address
Msgbox myRange.ColumnWidth
 
myRange.ColumnWidth = 30
 
myRange.Interior.Color = vbYellow
 
End Sub

3. VBA에서 개체변수(Object 변수)는 왜 사용하는가?

개체변수를 사용하는 이유를 알아보기 위해 아래와 같이 예를 들어보겠습니다.

VBA 변수에 대한 더 기본적인 내용이 궁금하시면 엑셀 VBA - 자주 쓰는 변수 7가지 총정리 강의를 우선 참고해주세요!

변수 ⇨ 자동차
데이터 ⇨ 자동차에 탑승하는 사람
데이터타입 ⇨ 자동차의 종류 (차의 크기, 차의 종류, 차의 옵션 등)
3-A. 일반 데이터타입 설정의 예시 (자동차의 크기를 정할 때)

자동차의 종류 중, ‘자동차의 크기’를 정해보겠습니다. 자동차의 크기는 보편적으로 사이즈가 정해져 있습니다.

자동차의 크기 = “소형차” 또는 “중형차” 또는 “준중형차” 또는 “대형차”
3-B. 개체 데이터타입 설정의 예시 (바퀴의 종류를 정할 때)

자동차의 옵션 중 바퀴의 종류를 정해보겠습니다. 바퀴의 종류에는 정말 다양한 옵션이 있습니다. 타이어의 종류, 금속의 재질, 색깔, 등등 많이 있겠지요.
따라서 바퀴의 종류를 정할 때에는 다양한 속성을 이용하여 바퀴의 종류를 정할 수 있습니다.

Set 바퀴의종류 As 자동차바퀴
바퀴의종류.타이어종류 = “레이싱용”
바퀴의종류.금속의재질 = “합금”
바퀴의종류.색상 = “은색”

이렇게 바퀴의 종류의 다양한 속성값을 통해서 원하는 자동차의 바퀴를 정하게 되는데요.

우리가 바퀴의 옵션 중 타이어를 교체하는 것만 보아도, 타이어의 공기를 빼고, 고무를 제거하는 작업 등등 다양한 작업이 필요합니다. 하지만 사용자의 입장에서는 자세한 작업공정이 필요한 것이 아닌 타이어의 종류를 무엇으로 할 지 결정하는게 중요한 것이겠죠?

따라서 개체변수를 이용하게 되면, 타이어의 종류처럼 다양한 속성값이 필요할 때에 사용자가 블록을 조립하듯이 변수를 이용하게 됨으로써 코드를 좀 더 쉽고 체계적으로 작성 할 수 있게 됩니다.

엑셀 VBA 개체 Object 변수 강의 8
개체를 이용하면 사용자가 블럭을 조립하듯이 코딩을 더욱 쉽고 효율적으로 할 수 있게 됩니다.
3-C. 개체 변수를 이해하기 위한 클래스모듈 설정해보기

클래스 모듈은 사용자가 VBA안에 특정 Object(개체)를 생성 할 수 있는 기능을 제공하는 모듈입니다.

따라서 아래의 코드를 클래스모듈에 입력하고, 클래스모듈의 이름을 ‘자동차’로 변경함으로써, 해당하는 워크북안에 ‘자동차’라는 개체변수를 생성 할 수 있습니다.

‘## 클래스모듈 안에 입력하세요.
‘## 클래스모듈 이름은 ‘자동차’로 변경해주세요.
 
Enum 엔진
	Cc1000 = 1
	Cc2000 = 2
	Cc3000 = 3
End Enum
 
Public 엔진종류 As 엔진
Public 선팅 As Boolean
엑셀 VBA 개체 Object 변수 강의 10
클래스모듈의 이름을 '자동차'로 변경해줍니다.
‘##일반 모듈안에 입력하세요.
‘##클래스모듈안에 속성을 설정하였으므로, 새자동차 입력후 .()을 입력하면편집창에서 해당하는 속성값을 자동으로 보여줍니다.
 
Sub Test3()
 
Dim 새자동차 AS 자동차
 
새자동차.엔진종류 = cc2000
새자동차.선팅 = True
 
End Sub
엑셀 VBA 개체 Object 변수 강의 5
자동차로 설정한 개체에 대한 속성정보가 자동으로 플로팅(Float) 됩니다.

4. VBA에서 Set 없이 개체(Object) 변수에 데이터를 할당할 경우?

만약 VBA에서 Set 없이 개체(Object) 변수에 데이터를 할당할 경우, Runtime 91 (런타임 91) 에러가 출력됩니다.

엑셀 VBA 개체 Object 변수 강의 7
Set 없이 개체 변수에 데이터를 할당하면 런타임91 오류창이 나타납니다.
Sub Test4()
 
Dim WB As Workbook
WB = ThisWorkbook  ‘## Set을 WB 앞에 입력하세요.
MsgBox WB.Name
 
End Sub

더 자세한 내용은 오빠두엑셀 VBA 1-5 영상강의를 참조해주세요!

4.8 11 투표
게시글평점
15 댓글
Inline Feedbacks
모든 댓글 보기
15
0
여러분의 생각을 댓글로 남겨주세요.x