vba - كيفية تدمير كائن





excel-vba vb6 access-vba (4)


يبدو أن هذه الشفرة المعدلة تعمل بشكل جيد. يبدو فارق بسيط مع قاتمة / جديدة على نفس الخط. نأمل شخص آخر يمكن أن تعطي فكرة أفضل عن المنطق.

كما علق آخرون، إذا كان قاتمة داخل الفرعية ثم سيتم جمعها بعد اكتمال الفرعية على أي حال.

Sub Test2()
    Dim Fs As FileSystemObject
    Set Fs = New FileSystemObject
    Set Fs = Nothing
End Sub

يبدو أن Set Object = Nothing لم يدمر كائن Fs في هذا الرمز:

Sub Test2()
    Dim Fs As New FileSystemObject
    Set Fs = Nothing
    MsgBox Fs.Drives.Count ' this line works
End Sub

السطر الأخير يعمل مع أي أخطاء !. وهذا يعني Fs كائن لا يزال موجودا، أليس كذلك؟

فكيف لتدمير هذا Fs كائن.




يجب أن يكون لها علاقة مع "إعلان & مثيل" نمط، وغالبا ما يعالج كنمط "لتجنبها"

إذا قمت بتقسيمها، فلن تحصل على Nothing بعد تعيينها إلى:

Sub Test2()
    Dim Fs As FileSystemObject
    Set Fs = New FileSystemObject
    Set Fs = Nothing
    MsgBox Fs.Drives.Count ' this line DOESN'T work
End Sub



طريقة أخرى لضمان التدمير السليم للكائن، هو إعطاء إشارة الكائن إلى كتلة With (أي لا تعلن متغير محلي):

Sub Test()
    With New FileSystemObject
        MsgBox .Drives.Count
    End With
End Sub

الكائن موجود من أي وقت مضى داخل كتلة With ، وعندما يصل التنفيذ End With الرمز المميز، إذا حاولت ذلك مع وحدة فئة مخصصة ستلاحظ أن فئة 'معالج Class_Terminate يعمل، مما يؤكد على نحو فعال التدمير السليم للكائن.

أما بالنسبة للسير As New ، كما سبق شرحه ، إذا كنت تنوي تعيين المرجع الكائن إلى Nothing داخل هذا النطاق، لا تعلن ذلك مع As New ، لأن فبا سوف تعيين مرجع الكائن إلى Nothing ، ولكن أيضا لحسن الحظ ( "مفيد") إنشاء مثيل جديد بالنسبة لك بمجرد إعادة مرجعية مرة أخرى، سواء كان ذلك فقط للتحقق من أن الكائن Is Nothing .

ملاحظة جانبية، وهذا (مزعج) السلوك بديهية على وجه التحديد ما هو وراء المنطق ل كوبردك لاعبالزبون كائن متغير هو الذاتي تعيين التعليمات البرمجية المخصصة :

(ملاحظة: إذا كنت قد حصلت على التعليمات البرمجية التي تريد فحص، تعرف أنه يعمل أسرع بكثير في فب الفعلي من على الموقع)

(إذا لم يكن واضحا بالفعل: أنا تشارك بشكل كبير مع مشروع روبرودك)




ربما ليس بالضبط ما كنت تبحث عنه ولكن هذا هو موقع VBA لائق إذا كان لديك بعض خلفية البرمجة. إنها ليست قائمة بهذا = ولكنها أكثر من مشكلة / حل

http://www.mvps.org/access/toc.htm







vba excel-vba vb6 access-vba