سؤال

أرغب في التكرار من خلال أعضاء أي فئة في مكتبة مشارعة يتم بها الكثير مما يؤدي إلى استخدام مستعرض الكائنات. كيف يمكن القيام بذلك باستخدام 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.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top