Почему VBA сбрасывает глобальные переменные после добавления OLEObject на лист? - PullRequest
0 голосов
/ 06 августа 2020

Я столкнулся с проблемой при кодировании на VBA. Я определил переменную publi c "a" и установил ее значение равным 10. Затем я добавил ListBox на страницу и определил событие изменения для этого объекта: если оно было изменено, значение "a" должно быть напечатано в непосредственном окне. Но кажется, что после добавления ListBox переменная "a" сбрасывается. Потому что, когда я нажимаю на ListBox, чтобы изменить его, значение «a» печатается в непосредственном окне и показывает 0. Почему добавление OLEObject приводит к сбросу глобальной переменной? Что мне делать в этой ситуации?

в module1:

Option Explicit

Public a As Integer

Sub main()

    a = 10
    
    Dim OLEList As OLEObject
    Dim OLETemp As OLEObject
    Dim ListRange As Range
    
    For Each OLETemp In ActiveSheet.OLEObjects
        If TypeName(OLETemp.Object) = "ListBox" Then
            OLETemp.Delete
        End If
    Next OLETemp
    
    Set ListRange = Range("A1:A2")
    
    Range("A1") = 1
    Range("A2") = 2
   
    Set OLEList = ActiveSheet.OLEObjects.Add(ClassType:="Forms.ListBox.1", Left:=100, Top:=100, Width:=200, Height:=400)
    OLEList.Name = "OLEList"
    OLEList.ListFillRange = ListRange.Address
    
    OLEList.Activate

End Sub

в ThisWorkBook:

Option Explicit

Private Sub Workbook_Open()
    Call main
End Sub

в листе 1:

Option Explicit

Private Sub OLEList_Change()
    Debug.Print a
End Sub
...