Excel 更改事件以隐藏文本框和标签

Excel 更改事件以隐藏文本框和标签,excel,vba,Excel,Vba,我有一个带有MultiSelect和Change事件的列表框。最终用户选择一个选项,它会动态地创建一个文本框和与之相邻的标签。由于布尔标志为静态,与条件关联的更改事件触发一次。问题是当用户取消选中该选项时。我有一个条件,检查事件是否已经触发,然后它隐藏文本框和标签。错误是 “未设置对象变量或带块变量” 尝试将文本框的可见字段和标签设置为False时 下面是代码 Private Sub ListBox1_Change() Static Case1 As Boolean 'interface Sc

我有一个带有MultiSelect和Change事件的列表框。最终用户选择一个选项,它会动态地创建一个文本框和与之相邻的标签。由于布尔标志为静态,与条件关联的更改事件触发一次。问题是当用户取消选中该选项时。我有一个条件,检查事件是否已经触发,然后它隐藏文本框和标签。错误是

“未设置对象变量或带块变量”

尝试将文本框的可见字段和标签设置为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块中实例化了它


谢谢

错误出现在哪一行?如果第一个条件从未满足(第一个If…End If),则
设置txtB1_label=Controls.Add(“Forms.label.1”)
从未出现。@FaneDuru在第二个If块中,将txtB1_label的可见字段设置为False。@BigBen它满足。我通过创建MsgBox来检查它是否进入了块。我在第一个If块中将Case1设置为True。第二个If块在Case1为True时执行。因此,它发生在文本框和标签创建之后。从错误消息中,唯一的解释是对象未设置。