Я столкнулся с проблемой при кодировании на 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