2012-03-22 5 views
13

Excel 통합 문서의 Sheet1에 ListBox1이라는 목록 상자가 있습니다.Excel에서 스프레드 시트의 목록 상자에서 값을 가져 오는 VBA

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

따라서 Value1, Value2, Value3, Value4가 있고 사용자가 Value1과 Value3을 선택하면 Value1, Value3으로 strLB가 필요합니다. 꽤 직설적 인.

나는 일을 시도하는 사후에 :

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

하지만이 매우 느립니다 (나는 실제로 내 목록 상자에서 15K 값이). 이것이 사용자가 입력을 마친 후 실시간으로 선택 사항을 기록해야하는 이유입니다.

물론 사용자가 이전 선택 항목을 제거했는지 확인하는 방법이 필요합니다.

여러분이 도와 드리겠습니다.

답변

12

불행히도 MSForms 목록 상자에서 목록 항목을 반복하고 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 

을 :)의 허용 대답하지 않는 HTH

시드

+0

나는 약간의 작업 코드를 생각 해낼 수 있는지 한번 시도해 볼 것입니다! 고마워요! – Bruder

+0

사용자 폼에없는 목록 상자에 대해'.ListIndex'와 동일한 기능을 찾을 수 없습니다. ActiveSheet.ListBoxes ("ListBox1"). (ActiveSheet.ListBoxes ("ListBox1"). ListIndex)'에 붙어 있는데, 이런 식으로 작동하지 않습니다 ... – Bruder

+0

어떻게 목록 상자를 추가 하시겠습니까? ActiveX 컨트롤입니까? –

6

을 추적 할 수 있습니다 사용자가 행 선택을 취소하면 그에 따라 목록이 업데이트되지 않기 때문에 잘라냅니다.

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

+0

StrSelection = Replace (StrSelection, ","& ListBox1.List (ListBox1.ListIndex), "") 내가 말할 수있는 한, – Bruder

0

의 다음 다음을 사용 목록 상자의 선택 항목의 값을 얻으려면 : 여기

내가 대신 제안 것입니다. 단일 열리스트 박스의 경우

: ListBox1.List(ListBox1.ListIndex)

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

이 루핑 매우 효율적입니다 피한다.

관련 문제