VBA의 객체 브라우저를 반복합니다
문제
객체 브라우저를 사용하여 수행되는 것처럼 참조 라이브러리의 모든 클래스 멤버를 반복하고 싶습니다. 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