多选ListBox内容到范围

时间:2017-08-18 08:40:18

标签: excel vba excel-vba listbox userform

使用VBA我创建了一个包含各种Textbox,Comboboxes&列表框。我目前设置它,以便一旦您点击提交按钮(Commandbutton1),各种框内容将填充我的工作表上的选定单元格。

Private Sub CommandButton1_Click()

    Sheets("Sheet2").Range("D4") = TextBox1.Text
    Sheet2.Cells(5, 4) = ComboBox2.Text
    Sheet2.Cells(6, 4) = ComboBox1.Text
    Sheet2.Cells(7, 4) = TextBox2.Text
    Sheet2.Cells(8, 4) = TextBox4.Text

    UserForm1.Hide

End Sub

我还希望我的多选列表框的内容对单元格(9,4) - (15,4)执行相同的操作。我怎样才能做到这一点?此多选列表框中的选项包括Insight,Barracuda,Siena,Visio,Project。

1 个答案:

答案 0 :(得分:0)

您可以迭代ListBox的所选项目并将其添加到数组中。收集完所有选定项目后,转移到Range。例如:

Private Sub CommandButton1_Click()

    ' your code
    Sheets("Sheet2").Range("C8") = TextBox1.Text
    Sheets("sheet2").Range("C12") = ComboBox2.Text
    Sheets("sheet2").Range("F12") = ComboBox1.Text
    Sheets("sheet2").Range("F8") = TextBox2.Text
    Sheets("sheet2").Range("F10") = TextBox4.Text
    Sheets("Sheet2").Range("C30") = TextBox7.Text
    Sheets("Sheet2").Range("F29:F36") = TextBox8.Text

    ' my code to update the sheet with the listbox selections
    Dim ws As Worksheet
    Dim rng As Range
    Dim lng1 As Long
    Dim lng2 As Long
    Dim str() As String

    Set ws = ThisWorkbook.Worksheets("Sheet2")
    Set rng = ws.Range("F22") ' (9, 4) - (15, 4)

    lng2 = 0 ' count of selected items
    For lng1 = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(lng1) Then
            lng2 = lng2 + 1 ' increment counter
            ReDim Preserve str(1 To lng2) ' resize array...
            str(lng2) = Me.ListBox1.List(lng1) ' and add selected item
        End If
    Next lng1

    ' transfer to range
    rng.Resize(lng2, 1).Value = Application.Transpose(str)

    ' close form
    'Unload Me
    UserForm1.Hide

End Sub