Excel VBA从列表框中获取多项选择

时间:2015-12-15 10:39:47

标签: excel vba excel-vba listbox

我有一个列表框,我设置为selectmulti

我试图用这个来获取所选项目的值:

Private Sub CommandButton3_Click()

Dim lItem As Long
Dim nboc As Integer
Dim c As Integer

Range("G:G").Clear
nboc = Worksheets("BDD").Range("IQ2").Value
c = 0
    For lItem = 0 To ListBox2.ListCount - 1
         If ListBox2.Selected(lItem) = True Then
            c = c + 1
            Worksheets("Bordereau Prep").Range("G15:G" & 14 + c) = ListBox2.List(lItem)
            ListBox2.Selected(lItem) = False

        End If
    Next
End Sub

只要我选择了一个项目,这就有效。如果我选择了x个项目,则会返回第一个项目的x倍。

你能帮帮我吗? (我对VBA很新,我想自己学习)

2 个答案:

答案 0 :(得分:1)

这一行:

Worksheets("Bordereau Prep").Range("G15:G" & 14 + c) = ListBox2.List(lItem)

您覆盖此功能先前打印的值。

在第一次迭代中,您打印范围G15:G15(在这种情况下为单个单元格)的每个单元格中的值,在第二次迭代中,您打印范围G15:G16的每个单元格中的值(因此您覆盖打印的值)第一次迭代)等等。

您需要更改此行,如下所示:

Worksheets("Bordereau Prep").Range("G14").Offset(c, 0) = ListBox2.List(lItem)

答案 1 :(得分:1)

你的问题在于:

if ( $( ".element" ).next().index() == $( ".element" ).next( ".element" ).index() ) { alert( "yes" ); $( ".element" ).wrap( "<div class='container'></div>" ); } else { alert( "no" ); } 它只是将整个范围分配给最后找到的值。这是适合你的东西,你可以以某种方式进一步使用它并改变它。

Worksheets("Bordereau Prep").Range("G15:G" & 14 + c) = ListBox2.List(lItem)

最后但并非最不重要的是,您尝试不在VBA中使用Integers,但是很长。享受吧!