본문 바로가기
VBA 라이브러리

CreateObject 함수

2023. 8. 6.

이 글은 도움말을 번역한 글입니다.

CreateObject 함수

ActiveX 개체에 대한 참조를 생성하고 반환합니다.

Syntax
CreateObject(class, [ servername ])

class : 필수입니다.Variant(문자열). 생성할 개체의 애플리케이션 이름 및 클래스입니다.

servername : 선택 사항입니다. Variant(문자열). 개체를 생성할 네트워크 서버의 이름입니다. 서버 이름이 빈 문자열("")인 경우 로컬 컴퓨터가 사용됩니다.

클래스 인수(class argument)는 appname.objecttype 형식을 사용하며 다음과 같은 구성 요소를 갖습니다:
appname - 필수; Variant (문자열). 객체를 제공하는 응용 프로그램의 이름입니다.
objecttype - 필수; Variant (문자열). 생성할 객체의 유형 또는 클래스를 나타냅니다.

비고

자동화를 지원하는 모든 애플리케이션은 적어도 한 가지 유형의 개체를 제공합니다. 예를 들어 워드 프로세싱 애플리케이션은 애플리케이션 개체, 문서 개체 및 도구 모음 개체를 제공할 수 있습니다.

ActiveX 개체를 만들려면 CreateObject가 반환한 개체를 개체 변수에 할당합니다.

' Declare an object variable to hold the object 
' reference. Dim as Object causes late binding. 
Dim ExcelSheet As Object
Set ExcelSheet = CreateObject("Excel.Sheet")

이 코드는 Microsoft Excel 스프레드시트 개체를 생성하는 애플리케이션을 시작합니다. 개체가 생성되면, 정의한 개체 변수를 사용하여 코드에서 참조합니다. 다음 예제에서는, 개체 변수 및 다른 Microsoft Excel 개체

예: ExcelSheet, Application, Cells 등)를 사용하여 새로운 개체의 속성 및 메소드에 액세스합니다.

' Make Excel visible through the Application object.
ExcelSheet.Application.Visible = True
' Place some text in the first cell of the sheet.
ExcelSheet.Application.Cells(1, 1).Value = "This is column A, row 1"
' Save the sheet to C:\test.xls directory.
ExcelSheet.SaveAs "C:\TEST.XLS"
' Close Excel with the Quit method on the Application object.
ExcelSheet.Application.Quit
' Release the object variable.
Set ExcelSheet = Nothing

절을 사용하여 개체 변수를 선언하면 모든 유형의 개체에 대한 참조를 포함할 수 있는 변수가 생성됩니다. 그러나 해당 변수를 통한 개체에 대한 액세스는 후기 바인딩, 즉 프로그램이 실행될 때 바인딩이 발생합니다. 조기 바인딩, 즉 프로그램이 컴파일될 때 바인딩되는 개체 변수를 만들려면 특정 클래스 ID로 개체 변수를 선언합니다. 예를 들어 다음과 같은 Microsoft Excel 참조를 선언하고 생성할 수 있습니다.

Dim xlApp As Excel.Application 
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.WorkSheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)

조기 바인딩된 변수를 통한 참조는 더 나은 성능을 제공할 수 있지만 선언에 지정된 클래스에 대한 참조만 포함할 수 있습니다.

CreateObject 함수에서 반환된 개체를 개체를 인수로 기대하는 함수에 전달할 수 있습니다. 예를 들어 다음 코드는 Excel.Application 개체에 대한 참조를 만들어 전달합니다.

Call MySub (CreateObject("Excel.Application"))

CreateObject의 서버명 인수에 컴퓨터 이름을 전달하여 원격 네트워크 컴퓨터에서 개체를 만들 수 있습니다. 이 이름은 공유 이름의 컴퓨터 이름 부분과 동일하며, "\MyServer\Public"이라는 이름의 공유의 경우 서버 이름은 "MyServer"입니다.

다음 코드는 원격 컴퓨터에서 실행 중인 Excel 인스턴스의 버전 번호인 :MyServer를 반환합니다.

Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application", "MyServer")
Debug.Print xlApp.Version

원격 서버가 존재하지 않거나 사용할 수 없는 경우 런타임 오류가 발생합니다.

Note

개체의 현재 인스턴스가 없는 경우 CreateObject를 사용합니다. 객체의 인스턴스가 이미 실행 중인 경우 새 인스턴스가 시작되고 지정된 유형의 객체가 생성됩니다. 현재 인스턴스를 사용하거나 애플리케이션을 시작하고 파일을 로드하도록 하려면 GetObject 함수를 사용합니다.

개체가 단일 인스턴스 개체로 등록되어 있는 경우 CreateObject가 몇 번 실행되더라도 개체의 인스턴스는 하나만 생성됩니다.

Example

예제 코드 - 1

다음은 Late binding을 사용하여 dictionary 개체를 생성하고 요소를 추가하고 조회하는 예제입니다:

Sub LateBindingDictionaryExample()
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    ' 요소 추가
    dict.Add "apple", 10
    dict.Add "banana", 5
    dict.Add "orange", 15
    
    ' 요소 조회
    Dim fruit As Variant
    For Each fruit In dict.Keys
        Debug.Print fruit & ": " & dict(fruit)
    Next fruit
End Sub

예제 코드 - 2

Late binding을 사용하여 FileSystemObject 개체를 생성하는 방법은 다음과 같습니다.

Sub LateBindingFileSystemObjectExample()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' FileSystemObject를 사용하여 파일 및 폴더 조작 수행
    Dim folderPath As String
    folderPath = "C:\TestFolder"
    
    ' 폴더 생성
    fso.CreateFolder folderPath
    
    ' 파일 생성
    Dim filePath As String
    filePath = folderPath & "\test.txt"
    Dim file As Object
    Set file = fso.CreateTextFile(filePath)
    file.Write "Hello, this is a test!"
    file.Close
    
    ' 파일 삭제
    fso.DeleteFile filePath
    
    ' 폴더 삭제
    fso.DeleteFolder folderPath
End Sub

예제 코드 - 3

Late binding을 사용하여 정규표현식(Regular Expression)을 사용하는 방법은 다음과 같습니다. 정규표현식은 Microsoft VBScript Regular Expressions 라이브러리에서 제공하는 RegExp 개체를 사용하여 처리할 수 있습니다.

Sub LateBindingRegexExample()
    Dim regex As Object
    Set regex = CreateObject("VBScript.RegExp")
    
    ' 정규표현식 패턴 설정
    regex.Pattern = "\d+" ' 숫자를 찾는 정규표현식 패턴 (\d+는 한 개 이상의 숫자를 의미)
    
    ' 대상 문자열 설정
    Dim targetString As String
    targetString = "Hello, 12345 World!"
    
    ' 정규표현식 패턴과 대상 문자열 매칭
    Dim matches As Object
    Set matches = regex.Execute(targetString)
    
    ' 매칭 결과 출력
    Dim match As Object
    For Each match In matches
        Debug.Print match.Value
    Next match
End Sub

예제 코드 - 4

로컬 컴퓨터에 있는 .accdb 파일을 ADODB를 이용하여 처리하는 예제는 다음과 같습니다.

Sub LateBindingADODBLocalACCDBExample()
    Dim conn As Object
    Set conn = CreateObject("ADODB.Connection")
    
    ' 데이터베이스 연결 설정
    Dim connectionString As String
    connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\Northwind.accdb;"
    conn.connectionString = connectionString
    
    ' 데이터베이스 연결
    conn.Open
    
    ' SQL 쿼리 실행
    Dim rs As Object
    Set rs = CreateObject("ADODB.Recordset")
    
    Dim sqlQuery As String
    sqlQuery = "SELECT * FROM Employees" ' 테이블 이름에 맞게 수정
    
    rs.Open sqlQuery, conn
    
    ' 결과 출력
    Do While Not rs.EOF
        Debug.Print rs.Fields("First Name").Value & " " & rs.Fields("E-mail Address").Value ' 필드 이름에 맞게 수정
        rs.MoveNext
    Loop
    
    ' 레코드셋 닫기
    rs.Close
    
    ' 연결 닫기
    conn.Close
End Sub

예제 코드 - 5

다음 코드는 Late binding을 사용하여 ADODB.Stream을 생성하고, 텍스트를 쓰고 읽는 예제입니다.

Sub LateBindingADODBStreamExample()
    Dim stream As Object
    Set stream = CreateObject("ADODB.Stream")
    
    ' 스트림 타입 설정
    stream.Type = 2 ' adTypeText
    
    ' 스트림 열기
    stream.Open
    
    ' 텍스트 쓰기
    stream.WriteText "Hello, this is a test!"
    
    ' 스트림에서 텍스트 읽기
    stream.Position = 0
    Dim content As String
    content = stream.ReadText
    
    ' 결과 출력
    Debug.Print content
    
    ' 스트림 닫기
    stream.Close
End Sub

예제 코드 - 6

아래 예제 코드는 Late Binding으로 ArrayList를 생성하고 데이터를 추가하며, 추가한 데이터를 역순으로 정렬하는 예제입니다.

Sub LateBindingArrayListExample()
    Dim arrayList As Object
    Set arrayList = CreateObject("System.Collections.ArrayList")
    
    ' 데이터 추가
    arrayList.Add "Apple"
    arrayList.Add "Banana"
    arrayList.Add "Orange"
    
    ' 데이터 조회 (정렬 전)
    Debug.Print "=== Original Order ==="
    Dim i As Integer
    For i = 0 To arrayList.Count - 1
        Debug.Print arrayList(i)
    Next i
    
    ' 역순으로 정렬
    arrayList.Reverse
    
    ' 데이터 조회 (정렬 후)
    Debug.Print "=== Reversed Order ==="
    For i = 0 To arrayList.Count - 1
        Debug.Print arrayList(i)
    Next i
End Sub

' 출력 결과
' === Original Order ===
' Apple
' Banana
' Orange
' === Reversed Order ===
' Orange
' Banana
' Apple

예제 코드 - 7

아래 예제 코드는 Late Binding으로 SortedList를 생성하고 정렬된 목록을 출력하는 예제입니다.

Sub UseSortedListLateBinding()

    Dim SortedList As Object
    Dim i As Integer
    Dim Value As Variant
    
    ' SortedList 개체 생성 (CreateObject)
    Set SortedList = CreateObject("System.Collections.SortedList")

    ' 데이터 추가
    SortedList.Add "O", "Orange"
    SortedList.Add "B", "Banana"
    SortedList.Add "A", "Apple"
    SortedList.Add "G", "Grapes"
    SortedList.Add "C", "Cherry"

    ' 키 및 값으로 정렬된 목록 출력
    Debug.Print "Keys and Values sorted by key:"
    
    For i = 0 To SortedList.Count - 1
        Debug.Print SortedList.GetKey(i), SortedList.GetByIndex(i)
    Next i

End Sub

' 출력 결과
' Keys and Values sorted by key:
' A Apple
' B Banana
' C Cherry
' G Grapes
' O Orange

'VBA 라이브러리' 카테고리의 다른 글

Format 함수  (0) 2023.08.22
GetObject 함수  (0) 2023.08.06
String 함수  (0) 2023.07.22
Space 함수  (0) 2023.07.22
StrConv 함수  (0) 2023.07.22