1

我在用户窗体上创建了一个多选列表框。列表框中有 9 个项目。我如何将这些选定的项目收集到一个句子中?

列表框包含返回支票的原因。列表框中的项目是较长字符串的标识符或占位符,因此选择“未签名”会创建返回的字符串“支票未签名”。

用户可以选择多个原因,因此根据选择,我需要格式为:“x、y 和 z”或“y 和 z”或“z”的句子结构。(例如:“支票未签名,支票过期,支票是第三方支票。”)

似乎需要从选择中创建一个数组,对选择进行计数,然后使用“If then”语句来创建句子,但我很难过。我可以计算选定的项目,如果只选择一项,我可以创建句子,但复合句难倒我。

4

3 回答 3

12

我有这个函数,它从列表框中返回一个选定项目的数组。我已从原始答案更新为返回分隔字符串而不是所选项目的数组:

Public Function GetSelectedItems(lBox As MSForms.ListBox) As String
'returns an array of selected items in a ListBox
Dim tmpArray() As Variant
Dim i As Integer
Dim selCount As Integer
    selCount = -1
    '## Iterate over each item in the ListBox control:
    For i = 0 To lBox.ListCount - 1
        '## Check to see if this item is selected:
        If lBox.Selected(i) = True Then
            '## If this item is selected, then add it to the array
            selCount = selCount + 1
            ReDim Preserve tmpArray(selCount)
            tmpArray(selCount) = lBox.List(i)
        End If
    Next

    If selCount = -1 Then
        '## If no items were selected, return an empty string
        GetSelectedItems = "" ' or "No items selected", etc.
    Else:
        '## Otherwise, return the array of items as a string,
        '   delimited by commas
        GetSelectedItems = Join(tmpArray, ", ")
    End If
End Function

您可以通过分配给数组来调用它:

Dim mySentence as String
mySentence = GetSelectedItems(MyUserForm.MyListBox)

从那时起,您只需将最后一个逗号替换为“和”,您就应该准备好了。

于 2013-10-23T20:43:40.837 回答
0

这是非常基本的,我很快就把它放在一起,但可能适用于你想要做的事情:

Private Sub ListBox1_Change()

    If ListBox1.Selected(0) = True Then
        msg1 = ListBox1.List(0)
    End If

    If ListBox1.Selected(1) = True Then
        msg2 = ListBox1.List(1)
    End If

    If ListBox1.Selected(2) = True Then
        msg3 = ListBox1.List(2)
    End If

    MsgBox msg1 & ", " & msg2 & ", " & msg3

End Sub
于 2013-10-23T20:54:53.973 回答
0

忘记 REDim 数组的概念——可能会让人感到困惑。收集多选选项的简单方法如下

Sub SelectMulti()
picklist1 = ""
For i = 0 To ListBox1.ListCount - 1
   If ListBox1.Selected(i) = True Then
      Debug.Print i    ' optional 
      If picklist1 = "" Then
         picklist1 = ListBox1.List(i)
       Else
         picklist2 = ListBox1.List(i)
         picklist1 = picklist1 & ";" & picklist2
       End If
    End If
Next
Debug.Print picklist1

End sub
于 2017-12-24T01:32:49.187 回答