programing

시트의 목록 상자에서 값 가져오기

muds 2023. 10. 3. 11:36
반응형

시트의 목록 상자에서 값 가져오기

엑셀 워크북 1장에 ListBox1이라는 이름의 리스트박스가 있습니다.

사용자가 목록에 있는 항목 중 하나를 선택할 때마다 strLB라는 변수로 이름을 복사해야 합니다.

그래서 만약 내가 Value1, Value2, Value3, Value4를 가지고 있고 사용자가 Value1과 Value3을 선택한다면 나의 strLB가 Value1,Value3로 나와야 합니다.

나는 그 포스트혹을 시도했습니다.

For i = 1 To ActiveSheet.ListBoxes("ListBox1").ListCount
    If ActiveSheet.ListBoxes("ListBox1").Selected(i) Then strLB = strLB & etc.etc.
Next i

하지만 이것은 매우 느립니다(리스트 박스에 15k 값이 있습니다).이것이 사용자가 입력을 마친 후 사이클이 아닌 실시간으로 선택 내용을 기록해야 하는 이유입니다.

사용자가 이전 선택을 삭제했는지 확인하는 방법도 필요할 것 같습니다.

유감스럽게도 MSForms list 박스가 list 항목들을 반복적으로 살펴보고 Selected 속성을 확인하는 것이 유일한 방법입니다.그러나 여기에 대안이 있습니다.선택한 항목을 변수에 저장/제거하고 있습니다. 어떤 리모트 셀에서 이 작업을 수행하고 추적할 수 있습니다 :)

Dim StrSelection As String

Private Sub ListBox1_Change()
    If ListBox1.Selected(ListBox1.ListIndex) Then
        If StrSelection = "" Then
            StrSelection = ListBox1.List(ListBox1.ListIndex)
        Else
            StrSelection = StrSelection & "," & ListBox1.List(ListBox1.ListIndex)
        End If
    Else
        StrSelection = Replace(StrSelection, "," & ListBox1.List(ListBox1.ListIndex), "")
    End If
End Sub

사용자가 행을 선택 취소하면 목록이 그에 따라 업데이트되지 않기 때문에 승인된 답변은 삭제되지 않습니다.

대신 제가 제안하는 것은 다음과 같습니다.

Private Sub CommandButton2_Click()
    Dim lItem As Long

    For lItem = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(lItem) = True Then
            MsgBox(ListBox1.List(lItem))
        End If
    Next
End Sub

http://www.ozgrid.com/VBA/multi-select-listbox.htm 제공

목록 상자에서 선택한 항목의 값을 얻으려면 다음을 사용합니다.

단일 열 목록 상자의 경우:ListBox1.List(ListBox1.ListIndex)

다중 열 목록 상자의 경우:ListBox1.Column(column_number, ListBox1.ListIndex)

이렇게 하면 루프가 발생하지 않고 매우 효율적입니다.

선택한 값을 가져옵니다.

worksheet name = ordls
form control list box name = DEPDB1

selectvalue = ordls.Shapes("DEPDB1").ControlFormat.List(ordls.Shapes("DEPDB1").ControlFormat.Value)

언급URL : https://stackoverflow.com/questions/9821968/get-values-from-a-listbox-on-a-sheet

반응형