View Single Post
  #6   Report Post  
Posted to microsoft.public.excel.programming
ZipCurs ZipCurs is offline
external usenet poster
 
Posts: 103
Default Looping Listbox in Userform

Hello Rick,

Thanks for your detailed response. Unfortunately, I have been unable to
test this in detail due to other distractions and the fact that I implemented
a kludge that basically gets what I need done.

The question I should have asked from the beginning is how to limit the
number of items selected on a multiple select listbox. Once four has been
reached, I want to disable add, while still allowing items to be removed.

Thanks

"Rick Rothstein (MVP - VB)" wrote:

I forgot to mention... put a Label control on your form... the code updates
this Label (named Label1) with the value of PickCount (that is, it displays
the number of selected items). I wasn't sure what you wanted PickCount to be
when ALL was selected, so I simply set it to -1 so that it could easily be
tested for.

Rick


"Rick Rothstein (MVP - VB)" wrote in
message ...
Does this code do what you want?

' These two lines go in the (General)(Declarations) section
Dim PickCount As Long
Dim Processing As Boolean

Private Sub ListBox2_Change()
Dim X As Long
If Processing Then Exit Sub
With ListBox2
PickCount = 0
Processing = True
If .ListIndex 0 Then .Selected(0) = False
If .Selected(0) Then
For X = 1 To .ListCount - 1
.Selected(X) = False
Next
PickCount = -1
Else
For X = 1 To .ListCount - 1
If .Selected(X) Then PickCount = PickCount + 1
Next
End If
Processing = False
End With
Label1.Caption = PickCount
End Sub

Rick



"ZipCurs" wrote in message
...
Mike,

Thanks for your response. While this is not exactly what I am after, it
is
a step in the right direction. I forgot to mention that this is a
multipick
listbox, so I really need to know how many items have been selected.
With
your input, I have figured that one out.

The real issue is getting the Event_Change feature to work only when
manual
changes are made rather than automated ones. It seems like you should be
able to prevent this.

Again, any help would be appreciated.

"Mike" wrote:

This will do your count of whats in the listbox
Sub listbox()
For i = 0 To ListBox2.ListCount - 1
If ListBox2.Selected(i) Then
MsgBox i
End If
Next i
End Sub

"ZipCurs" wrote:

I am using the following code which activates when the userform is
changed.

Private Sub ListBox2_Change()

Dim NumberOfCategories As Integer
Dim PickCount As Integer

NumberOfCategories = Sheets("Parameters").Range("C6") - 1

'Determine the number of items selected
PickCount = 0
For x = 1 To NumberOfCategories
With ListBox2
If .Selected(x) Then
PickCount = PickCount + 1
End If
End With
Next x

'If "ALL" selected turn everything else off ("ALL" is the first line)
If ListBox2.Selected(0) And PickCount 0 Then
With ListBox2
For x = 1 To NumberOfCategories
.Selected(x) = 0
Next x
End With
End If

I have 2 problems. The code the count the number of items selected
fails at
x=2. More importantly the "ALL" code causes the code to loop
continuously.

Is there a way to set the change event to false at the bottom of the
code to
prevent continuous looping? What other option do I have? Thank you
in
advance.