我想将活动x列表框中的所有选中项目都放到工作表上的单元格中。我有这个代码完全符合我的要求:
Private Sub CommandButton1_Click()
Dim lItem As Long
Dim outstr As String
For lItem = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(lItem) = True Then
outstr = outstr & ListBox1.List(lItem) & "/"
End If
Next
Range("A1") = Left(outstr, Len(outstr) - 1)
End Sub
这会将所有已检查的项目放入单元格a1。
我把它转换成这样的函数:
Function CopySelected(lb As MSForms.ListBox) As String
Dim lItem As Long
Dim outstr As String
For lItem = 0 To lb.ListCount - 1
If lb.Selected(lItem) = True Then
outstr = outstr & lb.List(lItem) & "/"
End If
Next
CopySelected = Left(outstr, Len(outstr) - 1)
End Function
但是我不能给函数提供正确的参数来返回与sub相同的参数。我需要提出什么作为参数?
我尝试了以下内容:
=Copyselected(Sheet1.ListBox1)
=Copyselected(Sheet1.ListBoxes("ListBox1"))
=Copyselected(Sheet1.Shapes("ListBox1").OLEFormat.Object)
=Copyselected(Worksheets("Sheet1").ListBox1)
似乎没什么用。功能不正确还是通过?
答案 0 :(得分:3)
使用以下代码:
Public Function GetAllSelected(strListBox As String)
Dim lItem As Long
Dim outstr As String
With Worksheets(1).OLEObjects(strListBox).Object
For lItem = 0 To .ListCount - 1
If .Selected(lItem) = True Then
outstr = outstr & .List(lItem) & "/"
End If
Next lItem
End With
GetAllSelected = Left(outstr, Len(outstr) - 1)
End Function
然后调用它将ListBox的名称作为字符串传递:
=GetAllSelected("ListBox1")
请注意,此时必须知道工作表。如果您需要将工作表名称(以及)传递给该函数,则必须相应地调整代码。
对于使用ListBox1_Change()
事件的下面评论中概述的主动方法,结果将是这样的:
然而,在这种情况下,每个ListBox都有一个过程,sub的结果总是写入同一个单元格(硬编码)。
答案 1 :(得分:1)
使用@Ralph中的代码,你也应该能够按原样使用你的功能......
...试
=Copyselected(Sheet1.OLEObjects("ListBox1").Object)