Excel.VBA.UserForm.MultiComlumnListBox.ListBoxes

我目前正在进行一个项目,要求我使用多列列表中的值。 我有这个用户表单中的单列列表框,我想要一个选定的值给出选定的多列列表。 截至目前,我可以得到单个列表框突出显示,但由于一些奇怪的原因,值不被选中。 如果用户不select另一个列表值,我需要能够拉这些值。 我在这个论坛张贴新的,但我有一个Excel文件来演示我的问题,但不知道如何发布在这里。 由于我不知道如何上传文件,所以我编写了这个文件:

Private Sub ListBox1_AfterUpdate() Me.ListBox2.Value = ListBox1.Column(1) Me.ListBox3.Value = ListBox1.Column(2) Me.ListBox4.Value = ListBox1.Column(3) Me.ListBox5.Value = ListBox1.Column(4) MsgBox ListBox2.Value & " = " ListBox3.Value & " = " ListBox4.Value & " = " ListBox5.Value ' Check values End Sub Private Sub UserForm_Initialize() With ListBox1 .ColumnCount = 15 .RowSource = ActiveSheet.Range("A1:E10").Address End With With Sheets("Sheet2") ListBox2.RowSource = "'" & .Name & "'!" & .Range("Variable1").Address ListBox3.RowSource = "'" & .Name & "'!" & .Range("Variable2").Address ListBox4.RowSource = "'" & .Name & "'!" & .Range("Variable3").Address ListBox5.RowSource = "'" & .Name & "'!" & .Range("Variable4").Address End With End Sub 

只是你们知道,特定列中的值仅限于variables范围。 如果任何人都可以帮忙,可以真正感激。 谢谢!

列表框具有Selected属性,它是一个从0到ListCount-1编号的列表项的布尔集合。要预先selectListBox5中的第三个项目,您可以使用如ListBox5.Selected(3)=True代码。 使用False取消select它。

你不是很容易纠正这个问题。 所以我写了一些代码供你玩。 请用一个ListBox创build一个用户窗体并将其ListBox2将以下代码粘贴到UserForm的代码表中。

 Option Explicit Private Sub UserForm_Click() Static i As Integer With ListBox2 .Selected(i) = True MsgBox "ListIndex = " & .ListIndex & vbCr & _ "Value = " & .Value & vbCr & _ "Column(3) = " & .Column(3) End With i = i + 1 If i > 6 Then i = 0 End Sub Private Sub UserForm_Initialize() Dim Rng(2 To 5) As Range Dim Id As Integer With ActiveSheet Set Rng(2) = .Range(.Cells(3, 3), .Cells(8, 7)) Set Rng(3) = .Range(.Cells(9, 3), .Cells(18, 7)) Set Rng(4) = .Range(.Cells(19, 3), .Cells(28, 7)) Set Rng(5) = .Range(.Cells(29, 3), .Cells(38, 7)) End With For Id = LBound(Rng) To UBound(Rng) SetListBox Id, Rng Exit For ' for testing: exit after doing the first ListBox Next Id End Sub Private Sub SetListBox(Id As Integer, Rng() As Range) Dim Wdth As String Dim i As Integer Wdth = "60 pt" For i = 2 To Rng(Id).Columns.Count Wdth = Wdth & "; 0pt" Next i With Me.Controls("ListBox" & CStr(Id)) .RowSource = Rng(Id).Address(External:=True) .ColumnCount = Rng(Id).Columns.Count .ColumnWidths = Wdth End With End Sub 

在F5上运行代码,然后单击表单上的任意位置 – 如果您喜欢,请重复。

基本安排是有5列的列表。 列数等于源范围中的列数。 第一列是60分宽,其他隐藏。 这个想法是,用户从可见列中select一个项目,其他ListBox根据隐藏列中的值设置。 我没有设置,但ListBox2.Column(3)将返回所选项目的列3中的值。

我希望你有你需要的所有语法来使你的想法工作。 它不是按照你想要的方式安排的,但我相信它就在那里。 祝你好运。