2014-05-18 2 views
3

VBA 사용자 양식에 8 개 항목이 들어있는 목록 상자가 있습니다. 다중 선택 목록 상자로 정의됩니다. 항목 2와 항목 3은 서로 종속되어 둘 다 함께 선택할 수 없습니다. 위해 내가 쓴해야 할 일 :목록 상자 항목을 옵션 단추처럼 작동시키기 VBA

If ListBox1.Selected(3) = True Then 
    ListBox1.Selected(2) = False 
ElseIf ListBox1.Selected(2) = True Then 
    ListBox1.Selected(3) = False 
End If 

그것은 작업을 수행하지만 아주 멋지게. 아이템 2와 아이템 3을 선택하면 괜찮습니다. 하지만 항목 2를 나중에 선택하려고 할 때 항목 3을 먼저 선택 취소하고 항목 2를 선택해야합니다. 옵션을 선택하기 전에 선택 항목을 취소 할 필요없이 옵션 단추처럼 작동 할 수있는 더 좋은 방법이 있습니까?

답변

1

좋은 질문 - 변경 이벤트는 실제로 변경된 항목을 알려주지 않으므로 목록 상자에서는 사소하지 않습니다!

다음은 두 가지 중 마지막으로 선택한 것을 저장하여이 문제를 해결합니다.

'Member fields 
Private fListBoxItem2PreviouslySelected As Boolean 

Private Sub ListBox1_Change() 
    With ListBox1 
     If fListBoxItem2PreviouslySelected Then 
      If .Selected(3) Then 
       .Selected(2) = False 
       fListBoxItem2PreviouslySelected = False 
      End If 
     Else 
      If .Selected(2) Then 
       .Selected(3) = False 
       fListBoxItem2PreviouslySelected = True 
      End If 
     End If 
    End With 
End Sub 

'Just used for testing purposes 
Private Sub UserForm_Initialize() 
    Dim i As Long: For i = 0 To 10: ListBox1.AddItem i: Next 
End Sub 
+0

여전히 나에게 똑같습니다. 첫 번째 줄은 어디에 두어야합니까? : private fListBoxItem2PreviouslySelected 부울 – user1040563

+0

@ user1040563으로 첫 줄이 모듈 맨 위에 독립 실행 형으로 표시됩니다. 그게 효과가 없다고 확신합니까? 새 사용자 양식을 작성하고 목록 상자를 놓은 다음 MultiSelect = fmMultiSelectMulti로 설정 한 다음 위의 내용은 항목 2와 항목 3 또는 항목 3은 아니지만 2, 또는 : 2는 아니지만 3을 허용하거나 완벽하게 허용됩니다. 2와 3이 아닙니다. 또한 Selected()가 0이기 때문에 첫 번째 항목이 Selected (0) 등임을 참고해야합니다. –

+0

작동하지 않습니다! 나는 첫번째 선을 틀린 장소에 놓았습니다. 고마워요! – user1040563

관련 문제