1

ユーザーフォームに複数選択リストボックスを作成しました。リストボックスには 9 個のアイテムがあります。選択した項目を 1 つの文にまとめるにはどうすればよいですか?

リストボックスには、チェックを返す理由が含まれています。リストボックス内の項目は、より長い文字列の識別子またはプレースホルダーであるため、「署名なし」を選択すると、返された文字列「チェックは署名されていません」が作成されます。

ユーザーはいくつかの理由を選択できるため、選択内容に応じて、「x、y、および z」または「y および z」または「z」の形式の文構造が必要です。(例: 「小切手は署名されておらず、小切手は後日付けられており、小切手はサードパーティの小切手です。」)

選択から配列を作成し、選択をカウントし、次に「If then」ステートメントを作成して文を作成する必要があるようですが、困惑しています。選択した項目を数えることはできますし、1 つの項目だけを選択すれば文を作成することもできますが、複合文は私を困惑させます。

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)

その時点から、最後のコンマを "and" に置き換えるだけで、すべて設定できます。

于 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 に答える