문제

객체 브라우저를 사용하여 수행되는 것처럼 참조 라이브러리의 모든 클래스 멤버를 반복하고 싶습니다. VBA를 사용하여 어떻게 할 수 있습니까?

도움이 되었습니까?

해결책 2

나는 a를 찾았다 Microsoft의 KB 그것은 내가 그렇게 할 수있게 해주었다. 또한 회원 세부 정보에 대한 반복도 다룹니다.

Private Sub ListClassesInAccess()        
    Dim TypeLibrary As TypeLibInfo
    Dim ClassList As CoClasses
    Dim i As Integer    
    Dim Path As String
    Path = "C:\Program Files\Microsoft Office\OFFICE11\MSACC.OLB"

    Set TypeLibrary = TypeLibInfoFromFile(Path)
    Set ClassList = TypeLibrary.CoClasses

    For i = 1 To ClassList.Count
        MsgBox ClassList.Item(i).Name     
    Next

    Set TypeLibrary = Nothing
    Set ClassList = Nothing
End Sub

다른 팁

실제로, 이것을하는 방법은 서류 미비이지만 가능합니다. 컬렉션에 대한 ACH 구문을 구현하려는 경우 다음을 수행 할 수 있습니다.

Option Compare Database
Option Explicit

Public colT       As New Collection

Public Function NewEnum() As IUnknown

   Set NewEnum = colT.[_NewEnum]

End Function

Public Property Get NextItem() As IUnknown
Attribute NextItem.VB_UserMemId = -4
Attribute NextItem.VB_MemberFlags = "40"

   Set NextItem = colT.[_NewEnum]

End Property

위의 속성 설정에 유의하십시오. 메모장에서 위와 같이 Saveastext 및 편집 코드를 사용해야합니다. 그런 다음 디버그 명령 줄에서 LoadFromText를 사용하여 코드를 다시 인상합니다. 위의 작업을 수행하면 다음을 수행 할 수 있습니다.

Dim n       As clstest1
Dim v       As Variant

Set n = New clstest1

[ code here that adds to collection]

For Each v In n
   Debug.Print v
Next

그리고 컬렉션에 각각 사용하지 않으려면 다음과 같이 클래스의 기본 속성을 설정할 수도 있습니다.

Public Property Get Item(Optional ndx As Integer = 1) As Variant
Attribute Item.VB_UserMemId = 0
   Select Case ndx
      Case 1: Item = Me.s1
      Case 2: Item = Me.s2
      Case 3: Item = Me.s3
   End Select

End Property

Public Property Get count() As Integer

   count = 3

End Property

그런 다음 갈 수 있습니다.

Dim n       As clstest1
Dim i       As Integer

Set n = New clstest1

For i = 1 To n.count
   Debug.Print n(i)
Next

그러나 클래스의 각 메소드/멤버를 내장 객체 컬렉션에 자동 추가 할 수있는 방법을 알지 못합니다 (컴파일러 옵션으로 직렬화 할 수있는 방법은 없지만 각 프로 시저가 속성 항목이있는 코드를 보았습니다. vb_usermid. = 1, 그런 다음 2인데 3). 아마도 더 많은 지식을 가진 사람이 뛰어들 수있을 것입니다).

그러나 위의 쇼에서 볼 수 있듯이 컬렉션을위한 For .. Each를 구현할 수 있습니다. 사용자 정의 항목 속성을 작성하는 경우 각 속성/메소드에 대한 인덱스를 구현할 수 있습니다. 위의 표시가 표시된 것처럼 생성 한 항목 속성을 기본값으로 설정할 수도 있습니다. 나는 "선택 사항"을 넣었으므로 심지어 :

debug.print n

OR

debug.print n.Item(1)

불행히도 Access VBA는 반사를 지원하지 않습니다. 속성 값 등을 검사 할 객체 계층 구조에 대한 자신만의 추상화를 만들 수 있습니다. 다음과 같은 것으로 시작할 수 있습니다.

http://msdn.microsoft.com/en-us/library/aa663065%28office.11%29.aspx

VB6이 설치된 경우 TLBINF32.dll을 사용해 볼 수 있습니다. AFAIR- 타입 브러리의 정보를 얻을 수있는 클래스가있는 경우 http://support.microsoft.com/kb/224331

이것은 도움이 될 수 있습니다 http://msdn.microsoft.com/en-us/magazine/bb985086.aspx

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top