用户窗体列表框多选计数可隐藏/取消隐藏其他控件的数量

时间:2018-06-19 11:33:09

标签: combobox count listbox hide userform

我有一个由范围填充的列表框,其中启用了多选(1)。然后,选定的项(最多10个)填充Label.Caption,它们具有相邻的组合框和文本框,需要用户提供更多信息。我正在寻找代码,该代码计算从列表框(在1到10之间)进行选择的次数,然后隐藏我的相对组合框和文本框(再次是1到10)。因此,如果在列表框中选择了4个选项,则只能看到组合/文本框1至4(隐藏了组合框/文本框5至10)。

我有一些我认为需要的代码元素,但无法完成整个过程。

new Date('2018-06-31')
Sun Jul 01 2018 08:00:00 GMT+0800 (China Standard Time)

但是以上内容,如果可行,我认为只会显示一个具有最高计数数字的组合框,而将其他所有组合框都隐藏起来。我正在寻找一个从组合框1循环到lstbxCount数字并显示它们的代码,并隐藏任何高于lstbxCount整数的代码。

谢谢。

1 个答案:

答案 0 :(得分:0)

您的代码在正确的路径上,但是需要进行一些调整才能使其正常工作。

当前,您怀疑如果ListBox项1存在,代码将仅显示控件。

下面是一个代码,该代码将基于选定的ListBox项显示/隐藏UserForm控件。

注意::在我的测试中,我创建了:

  1. 名为UserForm1的用户窗体
  2. 名为ListBox1的列表框
  3. 名为Label1Label2Label3的三个标签
  4. 三个名为TextBox1TextBox2TextBox3的文本框

代码已分配给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

我将留给您调整代码以适合您的变量并引用对象/控件的正确名称。