매크로/모듈(Module)

Collection 개체 예제

고추탄 2022. 10. 17. 16:53

'사용자가 컬렉션에 개체를 추가할 수 있는 대화 상자를 만듭니다.
'이 예제가 작동하는 방법을 알아보려면
'삽입 메뉴에서 클래스 모듈 명령을 선택하고,
'Class1 모듈 수준(Public InstanceName 입력)에서
'각 인스턴스의 이름을 보존하기 위한
'InstanceName이라는 공용 변수를 선언합니다.
'기본 이름은 Class1로 남겨 둡니다.
'다른 모듈의 일반 구역으로 아래 코드를 복사하여 붙여넣고,
'다른 프로시저에서 ClassNamer 문과 함께 시작합니다.
'이 예제는 클래스를 지원하는 호스트 프로그램에서만 동작합니다.

 

Sub ClassNamer()

  Dim MyClasses As New Collection    'Collection 개체를 작성합니다.
  Dim Num                            '키를 개별화하는 카운터
  Dim Msg As String                  '프롬프트 문자열을 유지하기 위한 변수
  Dim TheName, MyObject, NameList    '정보를 유지하기 위한 Variant

  Do
     'Class1의 새 인스턴스를 작성합니다.
      Dim Inst As New Class1

     'Num을 증가시킨 다음 이름을 가져옵니다.
      Num = Num + 1
      Msg = "이 개체의 이름을 입력하십시오." & Chr(13) _
             & "컬렉션에서 이름을 보려면 취소를 누르십시오."
      TheName = InputBox(Msg, "컬렉션 항목 이름을 입력하십시오. ")

     '개체 인스턴스에 이름을 넣습니다.
      Inst.InstanceName = TheName

     '사용자가 이름을 입력하면 이름을 컬렉션에 추가합니다.
      If Inst.InstanceName <> "" Then
        '명명된 개체를 컬렉션에 추가합니다.
         MyClasses.Add Item:=Inst, Key:=CStr(Num)
      End If

     '현재 참조를 다음 것에 대한 참조에서 지웁니다.
      Set Inst = Nothing

  Loop Until TheName = ""

' 이름 목록을 작성합니다.
  For Each MyObject In MyClasses
      NameList = NameList & MyObject.InstanceName & Chr(13)
  Next MyObject

 '메시지 상자에서 이름 목록을 표시합니다.
  MsgBox NameList, , "MyClasses 컬렉션에서의 인스턴스 이름"

 '컬렉션이 자동으로 다시 인덱스 처리된 후 반복할 때마다 첫째 구성원을 제거합니다.
  For Num = 1 To MyClasses.Count
      MyClasses.Remove 1
  Next

End Sub

 

참고

1. Collection소개 : http://konahn.tistory.com/18

 

Collection: 배열을 넘어서는 컬렉션 Type 소개

이 글은 VBA 에서 배열을 사용할 줄 아시는 분을 대상으로 합니다. 첨부한 슬라이드로 설명을 드립니다. 배열 중간에 뭔가 삽입해야할 때가 있습니다. 예를 들어 이렇게 3번 다음에 10번을 넣고 싶

konahn.tistory.com

 

LIST