تكرار من خلال متصفح الكائنات في VBA
سؤال
أرغب في التكرار من خلال أعضاء أي فئة في مكتبة مشارعة يتم بها الكثير مما يؤدي إلى استخدام مستعرض الكائنات. كيف يمكن القيام بذلك باستخدام VBA؟
المحلول 2
لقد وجدت ال كيلو بايت من مايكروسوفت مما سمح لي أن أفعل ذلك فقط. كما يغطي التكرار على تفاصيل الأعضاء أيضا.
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
نصائح أخرى
في الواقع، كيفية القيام بذلك غير موثقة، ولكن ممكن. إذا كانت تبحث عن تنفيذ بناء جملة لتشكل، فيمكنك القيام بما يلي:
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 في سطر أوامر Debug. بمجرد قيامك أعلاه، يمكنك الذهاب:
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
ومع ذلك، أنا لست على علم بكيفية يمكنك إضافة كل طريقة / عضو في الفئة إلى مجموعة كائن مدمجة تلقائية (لا توجد وسيلة لتسلسل هذا مع خيارات الترجمة، لكنني رأيت رمز مع كل إجراءات بعد سمة item.vb_usermemid = 1، ثم 2 ثم 3). ربما شخص لديه المزيد من المعرفة يمكن القفز في).
ومع ذلك، كما تظهر العروض المذكورة أعلاه، يمكنك تنفيذ A. ويمكنك تطبيق فهرس لكل خصائص / طرق إذا قمت بإنشاء خاصية عنصر مخصص. وكما يظهر أعلاه، يمكنك حتى تعيين خاصية العنصر التي تنشئها كإعداد افتراضي. وضعت في "اختياري"، وبالتالي حتى:
debug.print n
سوف تعمل، أو
debug.print n.Item(1)
لسوء الحظ، لا يدعم الوصول VBA التفكير. يمكنك محاولة إنشاء التجريد الخاص بك من التسلسل الهرمي للكائن الذي يقوم بفحص قيم الملكية، وما إلى ذلك. قد تبدأ بشيء مثل هذا:
http://msdn.microsoft.com/en-us/library/aa663065٪28office.11٪29.aspx.
إذا كان لديك VB6 مثبت - ثم يمكنك تجربة Tlbinf32.dll. AFAIR - إذا كان لديه عدد من الفصول للحصول على معلومات من أي typelibrary انظر http://support.microsoft.com/kb/224331.
هذا قد يكون مفيدا http://msdn.microsoft.com/en-us/magazine/bb985086.aspx.