لماذا تفقد المتغيرات العامة لـ VBA القيم عند إغلاق UserForm؟

StackOverflow https://stackoverflow.com//questions/25004689

سؤال

لدي رمز ماكرو خلف ورقة العمل.عند النقر على الزر في الورقة، تتم تهيئة نموذج مستخدم جديد ويظهر للمستخدم.إذا أغلق المستخدم النوافذ بعلامة X حمراء، أو تم إغلاق النموذج باستخدام وظيفة/أسلوب "إخفاء"، فستفقد جميع المتغيرات العامة الموجودة خلف ورقة العمل قيمها.هل من الممكن الحفاظ على هذه القيم؟

رمز ورقة العمل خلف:

Private MeasurementCollection As Collection
Dim CurrentMeasurement As measurement
Dim NewMeasurement As measurement

Private Sub Worksheet_Activate()
    Initialize
End Sub

Public Sub Initialize()
    Set NewMeasurement = New measurement
    Dim DropDownDataQueries As Collection
    Set DropDownDataQueries = DBQueries.GetAllUpdateQueries
    For i = 1 To DropDownDataQueries.Count
        Dim Values As Collection
        Set Values = DataBase.GetData(DropDownDataQueries(i))

        With Me.OLEObjects("Combo" & i).Object
            For Each value In Values
                .AddItem value
            Next value
        End With
    Next i
End Sub

Private Sub UpdateDB_Click()
    UpdateGeneralData
    If (CurrentMeasurement Is Nothing) Then
        MsgBox ("Message text")
    Else
        Dim form As UpdateComentForm
        Set form = New UpdateComentForm
        form.Show
    End If
End Sub

Private Sub Combo1_Change()
    If Application.EnableEvents = True Then
        If (Combo1.value <> "") Then
            NewMeasurement.DN = Combo1.value
        Else
            NewMeasurement.DN = 0
        End If
    End If
End Sub

كود نموذج المستخدم

Private Sub UpdateDBData_Click()
    If (Komentar.value <> "") Then
        Me.Hide
    Else
        MsgBox ("Prosimo napišite vzrok za spremembe podatkov v belo polje!")
    End If
End Sub

Private Sub UserForm_Terminate()
    Me.Hide
End Sub
هل كانت مفيدة؟

المحلول

تظهر التجارب أنه يتم مسح المتغيرات على مستوى الوحدة عند الخروج من إجراء يتضمن الاتصال = New Form, ، بشرط أن تكون نافذة مصمم النموذج مفتوحة في مكان ما في IDE.

أغلق جميع نوافذ مصمم نماذج المستخدم التي قد تكون مفتوحة في VBA IDE ثم حاول مرة أخرى.

نصائح أخرى

تم الإعلان عن NewMeasurement ولكن لم يتم تعيينه مطلقًا.

يمكنك أن تفعل شيئا مثل Dim NewMeasurement As New measurement لإنشاء مثيل للكائن.

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