Home |
Search |
Today's Posts |
|
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
Looping Listbox in Userform
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. |
#2
Posted to microsoft.public.excel.programming
|
|||
|
|||
Looping Listbox in Userform
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. |
#3
Posted to microsoft.public.excel.programming
|
|||
|
|||
Looping Listbox in Userform
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. |
#4
Posted to microsoft.public.excel.programming
|
|||
|
|||
Looping Listbox in Userform
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. |
#5
Posted to microsoft.public.excel.programming
|
|||
|
|||
Looping Listbox in Userform
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. |
#6
Posted to microsoft.public.excel.programming
|
|||
|
|||
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. |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Listbox Looping | Excel Programming | |||
userform listbox cannot get listbox.value to transfer back to main sub | Excel Programming | |||
Looping to fill ListBox | Excel Programming | |||
Looping procedure calls userform; how to exit loop (via userform button)? | Excel Programming | |||
Looping through listbox controls | Excel Programming |