У меня есть ListBox с MultiSelect и Change Event. Конечный пользователь выбирает параметр, и он динамически создает текстовое поле и метку рядом с ним. Событие изменения, связанное с условием, запускается один раз из-за логического флага Stati c. Проблема в том, когда пользователь снимает галочку с опции. У меня есть условие, которое проверяет, было ли событие уже запущено, а затем скрывает текстовое поле и метку. Ошибка:
«Переменная объекта или переменная блока не установлена»
при попытке установить видимое поле текстового поля и метку False.
Ниже приведен код.
Private Sub ListBox1_Change()
Static Case1 As Boolean 'interface Scheduling Change
Static Case2 As Boolean 'generation bottling
Static Case3 As Boolean 'Area Max Reserve
Dim txtB1 As Control
Dim txtB1_label As Control
If ListBox1.Selected(0) And Not Case1 Then 'Trigger Event when Option(0) Selected (ensures event triggers only once)
Set txtB1 = Controls.Add("Forms.TextBox.1")
Set txtB1_label = Controls.Add("Forms.Label.1")
With txtB1_label
.Caption = "MW (TTC)"
.Left = 162
.Top = 120
.Width = 42
.Visible = True
End With
With txtB1
.Name = "demo"
.Height = 15
.Width = 48
.Left = 204
.Top = 120
End With
Case1 = True
End If
If Not ListBox1.Selected(0) And Case1 Then 'Resets Trigger if Option(0) is unSelected
MsgBox "No Nice"
txtB1_label.Visible = False
txtB1.Visible = False
Case1 = False
End If
End Sub
Есть ли проблема с логикой c?
Редактировать: По сути, я щелкаю первую опцию ListBox1.Selected (0), она запускает первый блок If ... Else и создает текстовое поле и метку. Затем для Case1 Flag устанавливается значение True. Тогда я откручиваю первый вариант. Второй блок If ... Else проверяет, что он не выбран, и что Case1 имеет значение True, что означает, что он был нажат ранее. Это работает, потому что код входит в блок, и я вижу MsgBox. На данный момент текстовое поле и метка все еще существуют. Я не понимаю, почему это не установлено. Я создал его в первом блоке if ... else.
Спасибо