我在某些VBA代码中遇到了一个小问题,但却很麻烦(我对VBA完全不熟悉)。我创建了一个列表框,链接到一个工作表中的数组。我还创建了一个下拉列表,而一旦用户单击一个选项,列表框中的数组就会发生变化。要添加,此列表框设置为具有多选。
我面临的问题是:我想将列表框设置为一旦用户点击他们选择的每个选项并通过点击"提交"我也创建的按钮,每个选项将填充在其他工作表中的其他特定单元格中。以下是截图:
下面是我研究并放在一起并放入命令按钮代码区的代码。它目前正在做的是点击运行图标,它在列表框中首先选择并仅将第一个选项填充到我定义的单元格中,而不检查列表框中的选项并点击提交按钮。虽然我的愿景似乎有效,但我再次希望它能够填充用户在列表框中选择的内容:
Set sht = Sheets("Results")
Dim I
Dim j
Dim sht as Worksheet
Set sht = Sheets("Results")
j = 1
For Each i In Me.ListBox21.List
j = j + 1
sht.Cells(5, 1).Value = sht.Cells(5, 1).Value & Chr(10) & i
sht.Cells(6, 1).Value = sht.Cells(6, 1).Value & Chr(10) & i
sht.Cells(62, 1).Value = sht.Cells(62, 1).Value & Chr(10) & i
sht.Cells(63, 1).Value = sht.Cells(63, 1).Value & Chr(10) & i
Next i
我希望这看起来正确。如果不让我知道,我会截取代码截图。任何帮助将不胜感激!
答案 0 :(得分:0)
我假设你放在同一张纸上
一个名为" ListBox21"的ActiveX ListBox控件用它的" Multiselect"属性设置为" fmMultiSelectMulti"
按钮
然后你的代码与你描述的完全相反,即它更新了"结果"具有所有列表框值的单元格,而不是只有第一个选项。
表示你必须使用Selected(i)
对象的ListBox
属性来检查它的项目是否在索引" i"已被选中,因此使用List(i)
属性
如下
Dim i As Integer
Dim sht As Worksheet
Set sht = Sheets("Results")
With Me.ListBox21
For i = 0 To .ListCount - 1
If .Selected(i) Then
sht.Cells(5, 1).Value = sht.Cells(5, 1).Value & Chr(10) & .List(i)
sht.Cells(6, 1).Value = sht.Cells(6, 1).Value & Chr(10) & .List(i)
sht.Cells(62, 1).Value = sht.Cells(62, 1).Value & Chr(10) & .List(i)
sht.Cells(63, 1).Value = sht.Cells(63, 1).Value & Chr(10) & .List(i)
End If
Next i
End With
答案 1 :(得分:0)
当您只想获取所选项目时,代码会变得复杂一些。虽然您只需要迭代.Selected()
集合,但您正在使用整个ListBox21.List
集合将数据复制到工作表中。由于List
集合由ListBox中的所有单元格(所有行和所有列)组成,因此我们也必须遍历列。因此,生成的代码变为:
Dim sht As Worksheet
Dim intListItem As Integer
Dim intColumn As Integer
Set sht = Sheets("Results")
With Me.ListBox21
For intListItem = 0 To .ListCount - 1
If .Selected(intListItem) Then
For intColumn = 0 To .ColumnCount - 1
sht.Cells(5, 1).Value = sht.Cells(5, 1).Value & Chr(10) & .List(intListItem, intColumn)
sht.Cells(6, 1).Value = sht.Cells(6, 1).Value & Chr(10) & .List(intListItem, intColumn)
sht.Cells(62, 1).Value = sht.Cells(62, 1).Value & Chr(10) & .List(intListItem, intColumn)
sht.Cells(63, 1).Value = sht.Cells(63, 1).Value & Chr(10) & .List(intListItem, intColumn)
Next intColumn
End If
Next intListItem
End With
答案 2 :(得分:0)
非常感谢大家!发布的建议代码实际上有效!我现在的问题是单元格中只有一组列表框选项中的某些选项。例如,该集合将仅发送我检查的四个选项中的两个。是因为为i设置的整数?我现在将命令按钮代码设置为:
With Me.ListBox21
For i = 0 To .ListCount - 1
If .Selected(i) Then
sht.Cells(4, 4).Value = sht.Cells(4, 4).Value & Chr(10) & .List(i)
End If
Next i
For i = 1 To .ListCount - 1
If .Selected(i) Then
sht.Cells(4, 7).Value = sht.Cells(4, 7).Value & Chr(10) & .List(i)
End If
Next i
For i = 2 To .ListCount - 1
If .Selected(i) Then
sht.Cells(4, 10).Value = sht.Cells(4, 10).Value & Chr(10) & .List(i)
End If
Next i
For i = 3 To .ListCount - 1
If .Selected(i) Then
sht.Cells(4, 13).Value = sht.Cells(4, 13).Value & Chr(10) & .List(i)
End If
Next i
End With
我是否需要使用列表框代码定义列表框选项的顺序?请告诉我。