将单个项目从范围插入到ListBox中

时间:2014-05-30 17:42:18

标签: excel-vba vba excel

我有以下代码从ListBox1填充ListBox2。这些框是从具有名称标题(A:AC)的工作表填充的,每个名称下面都是将填充到ListBox2中的ID列表。每个人可能有多个ID,或者有些人只有一个。我的两个问题是 1.如何从动态列插入列表框 2.在测试过程中,如果有多个ID,它会插入很好的但如果只有一个ID错误。

Private Sub ListBox1_Change()

Dim myArray As Variant
'pulls selected value from listbox1
myArray = ListBox1.List(ListBox1.ListIndex, 0)

Worksheets("Sheet1").Select
Columns("A:CC").Select
'looks for selected value from listbox1
Set found = Cells.Find(What:=myArray, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False)


If found Is Nothing Then
    'skipper
Else
    found.Offset(1, 0).Select
End If

'below is where i tried to assign the column letter to a variable, didn't work
'Col = Split(ActiveCell(1).Address(1, 0), "$")(0)
'Me.ListBox2.List = Worksheets("Sheet1").Range(Col & "2:" & Col & Range(Col & Range(Col & Rows.Count).End(xlUp).Row).Value

'belwo works great if more than one ID, otherwise it's crap
Me.ListBox2.List = Worksheets("Sheet1").Range("B2:B" & Range("B" & Rows.Count).End(xlUp).Row).Value

End Sub

取得一些进展。我已经通过动态列找到它并填充,但如果范围只是一个单元格,它仍然无法工作。感谢avb代码。

Else
   Set test = Range(found.Offset(1, 0), found.End(xlDown))
test.Copy
End If

Me.ListBox2.List = test.Value

解! 我发现如果只选择了一个项目,则需要使用.AddItem而不是我正在使用的.List。我最终得到了这个最后的片段。

Set sId = Range(found.Offset(1, 0), found.End(xlDown))
    sId.Copy

If IsEmpty(found.Offset(2, 0).Value) Then
   With Worksheets("Sheet1")
      Me.ListBox2.AddItem sId
   End With
Else
   Me.ListBox2.List = sId.Value
End If

2 个答案:

答案 0 :(得分:2)

解!我发现如果只选择了一个项目,则需要使用.AddItem而不是我正在使用的.List。我最终得到了这个最后的片段。

Set sId = Range(found.Offset(1, 0), found.End(xlDown))
    sId.Copy

If IsEmpty(found.Offset(2, 0).Value) Then
    With Worksheets("Sheet1")
    Me.ListBox2.AddItem sId
End With
Else
    Me.ListBox2.List = sId.Value
End If

答案 1 :(得分:1)

假设您的Id列表中没有空白单元格,这将起作用:

Else
    Me.ListBox2.List = Range(found.Offset(1, 0), found.End(xlDown))
End If