您的代码在正确的路径上,但是确实需要进行一些调整才能使其正常工作。
目前,您怀疑您的代码仅在存在 ListBox 项目 1 时才会显示您的控件。
下面的代码将根据选定的 ListBox 项显示/隐藏用户窗体控件。
注意:在我的测试中,我创建了:
- 一个名为的用户窗体
UserForm1
- 一个名为的列表框
ListBox1
- 三个标签命名
Label1
,Label2
&Label3
TextBox1
三个名为, TextBox2
&的TextBoxTextBox3
该代码已分配给 UserForm 模块中的 ListBox Change 事件,因此每次 ListBox 发生更改时,它将显示/隐藏相关控件。
Private Sub ListBox1_Change()
Dim i As Long
For i = 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(i) = True Then
i = i + 1
Me.Controls("Label" & i).Visible = True
Me.Controls("TextBox" & i).Visible = True
i = i - 1
ElseIf Me.ListBox1.Selected(i) = False Then
i = i + 1
Me.Controls("Label" & i).Visible = False
Me.Controls("TextBox" & i).Visible = False
i = i - 1
End If
Next
End Sub
解释:
该变量i
表示我用作计数器的整数。
该For...Next
语句从 0 循环到 ListBox 项计数减 1。这是因为 ListBox 项具有从零开始的索引,这意味着列表框中的第一项是索引号 0,第二项是索引号 1,依此类推。所以,我们从 0(第一个列表框项)循环直到ListCount
值减 1。
注意:为了澄清,列表框项索引编号是从零开始的(从 0 开始),而ListCount
属性不是(从 1 开始)。这也将进一步解释。
If Me.ListBox1.Selected(i) = True Then
使用我们的计数器变量作为每个 ListBox 项的索引号(从 0 开始并在每次循环迭代时增加 1)来确定它是否被选中。
如果它被选中或未选中,i = i + 1
则用于将我们的计数器增加 1。一旦我们的计数器值增加,我们现在可以引用正确的控件来显示/隐藏。一旦我们这样做了,我们将计数器减少 1 ( i = i - 1
),因为每次循环迭代的值都会i
增加。如果我们在下一次循环迭代之前不减少i
它,我们将跳过列表项,这意味着有些项目要显示/隐藏控件,有些则不会。
为了详细说明,让我们删除变量i
并以循环的第一次迭代为例;
第一次迭代将转化为:
Private Sub ListBox1_Change()
For 0 To Me.ListBox1.ListCount - 1
If Me.ListBox1.Selected(0) = True Then
Me.Controls("Label1").Visible = True
Me.Controls("TextBox1").Visible = True
ElseIf Me.ListBox1.Selected(i) = False Then
Me.Controls("Label1").Visible = False
Me.Controls("TextBox1").Visible = False
End If
Next
End Sub
我将留给您调整代码以适合您的变量并引用对象/控件的正确名称。