将事件更改为隐藏文本框和标签

时间:2020-03-12 20:13:02

标签: excel vba

我有一个带有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块中实例化了它。

谢谢

0 个答案:

没有答案
相关问题