سؤال

أنا فقط تكافح مع شيء هنا. لدي وحدة فئة، دعونا نسميها Formman الذي يحتوي على مجموعة من الأساليب المتعلقة بالعدد الكبير من UserForms لدي في مشروعي. يتم استدعاء إحدى الطرق المعينة من الكثير من الأماكن المختلفة وهي بسيطة جدا - فهي ببساطة تضيف عدد المستخدمين المحددين من عناصر التحكم إلى نموذج ويمتد ارتفاع النماذج لاستيعاب هذه الضوابط الجديدة.

يمر المستخدم عدد عناصر التحكم و UsForm.

oF.AddControlsToForm iNumberOfControls,frmTest

في وحدة فئة Formman:

Public Sub Addcontrols(iNum as integer, oForm as userform)

//stuff happens here, oForm is used extensively

oForm.Height = i  //object does not support this property or method
frmTest.Height = i //works

oForm.Show //object does not...
frmTest.show  //works

end sub

في نافذة السكان المحليين، ليس لدى Oworm خاصية الارتفاع، إلى حد ما بما فيه الكفاية. ولكن تم تعريف ocorm كما frmtest. استطيع ان اقول oForm.BackColor = vbred, ، ويمكنني تعيين ctl = oform.TextBox1 علي سبيل المثال

من المفترض أن يكون هذا إجراء عام يمكنه إضافة مجموعة من الضوابط إلى أي شكل. لقد حاولت تحميل وإظهار النموذج قبل تعيينه إلى oworm.

لماذا الارتفاع وإظهار خصائص وطرق UserForms ولكن ليس من الكائنات المعلنة باسم UserForms؟ ما الخطأ الذي افعله؟

نقدر حقا أي مساعدة.

هل كانت مفيدة؟

المحلول

المشكلة هنا هي أن UserForm وكائنات FRMTEST ليست من نفس النوع. في الواقع، FRMTEST هي مجموعة فرعية من UserForm والتي تمددها عن طريق إضافة خاصية الارتفاع، من بين الأعضاء الآخرين.

ربما يجب عليك اللجوء لإعلان معلمة وظيفتك ككائن.

Public Sub Addcontrols(iNum as integer, oForm as Object)

يجب أن يعمل هذا كما تريد، على الرغم من أن لسوء الحظ سوف تكون التضحية بسلامة النوع. معظم مفاهيم OO تميل إلى الانهيار في سياق VBA.

نصائح أخرى

الشيء أولا وقبل كل شيء يجب أن يتذكره VBA هو أنه quasi-oo، وليس كامل OO. لقد واجهت الكثير من المشكلات أحمق حول هذه المشكلة، ولذا فإنني أميل الآن إلى تجنب الاعتماد بالكامل على تناسق VBA.

يقال، جرب هذا:

Dim fname = oForm.Name (or whatever the property is for this subobject)
With VBA.UserForms.Add(fname)
   .Height = x
   .Show
End With

أليس كذلك غريبة بسرور؟!؟! ليس لدي مثال على التعليمات البرمجية جاهز والانتظار، لذلك لا يمكنني ضمان النجاح، لكن هذا يبدو وكأنه النهج الصحيح.

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