我有一个带有MultiSelect和Change Event的列表框。最终用户选择一个选项,并动态创建一个文本框和与其相邻的标签。由于布尔标志为“静态”,因此与该条件关联的更改事件将触发一次。问题是用户取消选中该选项时。我有一个条件,检查事件是否已经触发,然后隐藏文本框和标签。错误是
“未设置对象变量或含块变量”
当尝试设置文本框的可见字段并标记为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
逻辑是否存在问题?
编辑: 因此,基本上,我单击第一个选项ListBox1.Selected(0),它将触发第一个If ... Else块并创建文本框和标签。然后将Case1标志设置为True。然后我取消单击第一个选项。第二个If ... Else块会检查它是否未被单击,并且Case1为True,表示它先前已被单击。这行得通,因为代码进入了代码块,并且我看到了MsgBox。此时,文本框和标签仍然存在。我不明白为什么它没有设置。我在第一个if ... else块中实例化了它。
谢谢