이 글은 도움말을 번역한 내용입니다.
개체 변수를 개체 변수가 참조하는 개체와 정확히 동일하게 취급할 수 있습니다. 개체의 속성을 설정하거나 반환하거나 해당 메서드를 사용할 수 있습니다.
Sub ObjectVariableExample()
Dim myRange As Range
Set myRange = Worksheets("Sheet1").Range("A1:B10")
' 개체 변수를 사용하여 해당 범위의 속성을 설정하거나 가져올 수 있습니다.
myRange.Font.Bold = True
myRange.Interior.Color = RGB(255, 255, 0)
' 개체 변수를 사용하여 해당 범위에 대한 메서드를 호출할 수 있습니다.
myRange.Copy
myRange.ClearContents
End Sub
개체 변수 만들기
개체 변수를 선언합니다.
Dim obj As Object
개체에 개체 변수를 할당합니다.
Set obj = CreateObject("Scripting.Dictionary")
개체 변수 선언
개체 변수를 선언하려면 Dim 문 또는 다른 선언문(Public, Private 또는 Static) 중 하나를 사용합니다. 개체를 참조하는 변수는 Variant, Object 또는 특정 유형의 개체여야 합니다. 예를 들어 다음 선언이 유효합니다:
' Declare MyObject as Variant data type.
Dim MyObject
' Declare MyObject as Object data type.
Dim MyObject As Object
' Declare MyObject as Font type.
Dim MyObject As Font
참고
개체 변수를 먼저 선언하지 않고 사용하는 경우 개체 변수의 데이터 유형은 기본적으로 Variant입니다.
Sub ObjectVariableExample()
Dim obj As Object ' Object 타입으로 선언된 변수
' 개체를 생성하여 obj 변수에 할당
Set obj = CreateObject("Scripting.Dictionary")
' Dictionary 개체의 메서드를 호출하여 데이터를 추가
obj.Add "Key1", "Value1"
obj.Add "Key2", "Value2"
' 변수 obj는 Variant 타입이므로 다른 유형의 개체를 참조할 수도 있음
Set obj = ActiveSheet ' Worksheet 개체를 참조
' 이전에 생성했던 Dictionary 개체를 참조하는 것이 아니라 새로운 개체인 Worksheet를 참조하게 됨
' 따라서 아래 코드는 오류를 발생시킴
' obj.Add "Key3", "Value3"
End Sub
프로시저가 실행될 때까지 특정 개체 유형을 알 수 없는 경우 개체 데이터 유형을 사용하여 개체 변수를 선언할 수 있습니다. Object 데이터 유형을 사용하여 모든 개체에 대한 일반 참조를 생성합니다.
아래 예제에서는 Worksheet를 선택했습니다.
Sub ObjectExample()
' 개체 변수를 Object 자료형으로 선언합니다.
Dim myObject As Object
' 메시지 박스를 통해 사용자에게 특정 개체 유형을 선택하도록 합니다.
Dim selection As String
selection = InputBox("워크시트 개체 참조를 생성하려면 'Worksheet'을 입력하고, 워크북 개체 참조를 생성하려면 'Workbook'을 입력하세요.")
' 선택한 개체 유형에 따라 개체 변수에 적절한 개체를 할당합니다.
If selection = "Worksheet" Then
Set myObject = ThisWorkbook.Worksheets(1)
MsgBox "워크시트 개체를 선택했습니다!"
ElseIf selection = "Workbook" Then
Set myObject = ThisWorkbook
MsgBox "워크북 개체를 선택했습니다!"
Else
MsgBox "잘못된 선택입니다. 개체가 할당되지 않았습니다."
End If
End Sub
특정 객체 유형을 알고 있는 경우 객체 변수를 해당 객체 유형으로 선언해야 합니다. 예를 들어 애플리케이션에 Dictionary 객체 유형이 포함된 경우 다음 문 중 하나를 사용하여 해당 객체에 대한 객체 변수를 선언할 수 있습니다:
Dim dict As Object ' Object 타입으로 선언된 변수
Dim dict As Scripting.Dictionary ' Dictionary 타입으로 선언된 변수
특정 객체 유형을 선언하면 자동 유형 검사, 코드 속도 및 가독성이 향상됩니다.
Sub ExplicitDictionaryExample()
' Dictionary 객체를 명시적으로 선언합니다.
Dim myDict As Scripting.Dictionary
Set myDict = New Scripting.Dictionary
' 객체 유형을 명시적으로 선언하면 코드가 더 깔끔하고 가독성이 좋아집니다.
myDict.Add "key1", "value1"
myDict.Add "key2", "value2"
' 객체 유형을 명시적으로 선언하면 코드 실행 속도가 더 빠릅니다.
' 그 이유는 객체의 유형을 미리 알고 있어, 런타임에 추가 처리가 필요 없기 때문입니다.
Dim value As Variant
value = myDict("key1")
MsgBox "The value of key1 is: " & value
End Sub
개체 변수에 개체 할당하기
Set 문을 사용하여 개체변수를 개체에 할당합니다. 개체 표현식 또는 Nothing을 할당할 수 있습니다.
Sub ObjectVariableAssignmentExample()
Dim myObject As Object ' 개체 변수 선언
' 예시 1: Dictionary 객체를 myObject에 할당
Set myObject = CreateObject("Scripting.Dictionary")
' Dictionary에 데이터 추가
myObject.Add "Name", "John"
myObject.Add "Age", 30
' 개체 변수를 사용하여 Dictionary 객체의 데이터 출력
MsgBox "Name: " & myObject("Name") & vbCrLf & "Age: " & myObject("Age")
' 예시 2: Worksheet 객체를 myObject에 할당
Set myObject = Worksheets("Sheet1")
' Worksheet 객체를 사용하여 데이터 읽기
MsgBox "Cell A1 Value: " & myObject.Range("A1").Value
' 예시 3: Nothing을 myObject에 할당하여 객체 참조 해제
Set myObject = Nothing
' 이후 아래와 같은 코드를 실행하면 오류가 발생합니다.
' MsgBox "Name: " & myObject("Name") ' 오류 발생: 객체 참조가 해제되었으므로 사용 불가
' 예시 4: 개체 변수가 아직 할당되지 않았을 경우
If myObject Is Nothing Then
MsgBox "myObject is not assigned to any object." ' Nothing으로 초기화되었음을 확인
End If
End Sub
New 키워드와 Set 문을 사용하여 개체 변수를 선언하고 개체를 할당할 수 있습니다.
Sub CombinedDeclarationAndAssignment()
' New 키워드와 Set 문을 사용하여 개체 변수를 선언하고 Dictionary 객체를 할당합니다.
Dim myDict As Scripting.Dictionary
Set myDict = New Scripting.Dictionary
' Dictionary에 데이터 추가
myDict.Add "Name", "John"
myDict.Add "Age", 30
' 개체 변수를 사용하여 Dictionary 객체의 데이터 출력
MsgBox "Name: " & myDict("Name") & vbCrLf & "Age: " & myDict("Age")
End Sub
개체 변수를 Nothing으로 설정하면 개체 변수와 특정 객체의 연결이 해제됩니다. 이로 인해 변수를 통해 객체를 변경하는 실수를 방지할 수 있습니다. 개체 변수는 항상 연관된 개체를 닫은 후에 Nothing으로 설정되므로 개체 변수가 유효한 개체를 가리키고 있는지를 테스트할 수 있습니다.
Sub ObjectVariableAndNothingExample()
Dim myDict As Object ' 개체 변수 선언
Dim worksheetObj As Worksheet ' 개체 변수 선언
' Dictionary 객체 생성하여 개체 변수에 할당
Set myDict = CreateObject("Scripting.Dictionary")
' Dictionary에 데이터 추가
myDict.Add "Name", "John"
myDict.Add "Age", 30
' 개체 변수를 사용하여 Dictionary 객체의 데이터 출력
MsgBox "Name: " & myDict("Name") & vbCrLf & "Age: " & myDict("Age")
' 개체 변수를 Nothing으로 설정하여 연결 해제
Set myDict = Nothing
' 이제 myDict 개체 변수는 유효한 개체를 가리키고 있지 않습니다.
' Worksheet 객체를 개체 변수에 할당
Set worksheetObj = ThisWorkbook.Worksheets("Sheet1")
' 개체 변수를 사용하여 Worksheet 객체의 데이터 읽기
MsgBox "Cell A1 Value: " & worksheetObj.Range("A1").Value
' 개체 변수를 Nothing으로 설정하여 연결 해제
Set worksheetObj = Nothing
' 이제 worksheetObj 개체 변수도 유효한 개체를 가리키고 있지 않습니다.
' 개체 변수가 유효한지를 테스트할 수 있습니다.
If myDict Is Nothing Then
MsgBox "myDict is not pointing to a valid object." ' myDict 개체 변수가 유효하지 않음을 확인
End If
If worksheetObj Is Nothing Then
MsgBox "worksheetObj is not pointing to a valid object." ' worksheetObj 개체 변수가 유효하지 않음을 확인
End If
End Sub
물론, 이 테스트는 절대적으로 확신할 수 없습니다. 사용자가 객체 변수가 참조하는 개체를 포함한 애플리케이션을 닫았는지를 결정할 수는 없습니다.
설명이 이해가 되지 않아 원문으로 ChatGPT에게 질문하고 답변받은 내용입니다.
개체의 현재 인스턴스를 참조합니다.
Me 키워드를 사용하여 코드가 실행 중인 개체의 현재 인스턴스를 참조합니다. 현재 개체와 관련된 모든 프로시저는 Me로 참조된 개체에 액세스할 수 있습니다. Me를 사용하면 개체의 현재 인스턴스에 대한 정보를 다른 모듈의 프로시저에 전달할 때 특히 유용합니다.
'Person Class
Private pName As String
Private pAge As Integer
Public Property Get Name() As String
Name = pName
End Property
Public Property Let Name(ByVal value As String)
pName = value
End Property
Public Property Get Age() As Integer
Age = pAge
End Property
Public Property Let Age(ByVal value As Integer)
pAge = value
End Property
Public Sub ShowInfo()
DisplayInfo Me
End Sub
'일반 모듈
Sub DisplayInfo(ByRef personObj As Person)
MsgBox "Name: " & personObj.Name & vbCrLf & "Age: " & personObj.Age
End Sub
Sub Main()
Dim p As New Person
p.Name = "John"
p.Age = 25
' Me 키워드를 사용하여 현재 인스턴스를 참조하고 정보를 출력합니다.
p.ShowInfo
End Sub
도움말 출처
Creating object variables (VBA)
Office VBA reference topic
learn.microsoft.com