我有一个由范围填充的列表框,其中启用了多选(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整数的代码。
谢谢。
答案 0 :(得分:0)
您的代码在正确的路径上,但是需要进行一些调整才能使其正常工作。
当前,您怀疑如果ListBox项1存在,代码将仅显示控件。
下面是一个代码,该代码将基于选定的ListBox项显示/隐藏UserForm控件。
注意::在我的测试中,我创建了:
UserForm1
的用户窗体ListBox1
的列表框Label1
,Label2
和Label3
的三个标签TextBox1
,TextBox2
和TextBox3
的文本框代码已分配给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
我将留给您调整代码以适合您的变量并引用对象/控件的正确名称。