【问题标题】:Multi-Select ListBox contents to Range多选列表框内容到范围
【发布时间】:2017-08-18 08:40:17
【问题描述】:

使用 VBA,我创建了一个带有各种文本框、组合框和列表框的用户窗体。我目前将其设置为,一旦您点击提交按钮 (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。

【问题讨论】:

    标签: vba excel listbox userform


    【解决方案1】:

    您可以迭代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
    

    【讨论】:

    • 嗨,谢谢,我已尝试将代码修改为我需要的代码,但出现运行时 70 错误,权限被拒绝。 @Robin Mackenzie
    • 哪一行会报错? Sheet2 上是否有受保护的工作表或受保护的单元格?
    • 工作表和单元格尚未受到保护,表单与单元格的唯一关系是行源
    • 将 'UserForm1.Hide` 移动到我建议的代码的末尾,也可以注释掉 Unload Me(因为你将把 UserForm1.Hide 放在那里)
    • 我已经删除了它,但它仍然出现错误,即使删除了(.Add Item "DataStore")。然后在下一个可用行出错
    猜你喜欢
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多