Rick,
Thank you for your help so far.
I ended up using much of the code you wrote and it works great. I added the
feature to limit the code to 4 items. For the time being, I got rid of the
select "ALL" feature since this was kind of confusing. Some questions:
- For some reason, the first change I make to the listbox doesn't stick. I
doesn't matter if I am adding or subtracting an item, it simply goes through
the cycle once and then reverts back to its previous state. Note that I load
listbox from outside of UserForm.
- Related to the about problem, the warning I added comes up twice if I add
an item in excess of 4 of the first click.
' These three lines go in (General)(Declarations) section
Dim PickCount As Long
Dim Processing As Boolean
Dim OldList As String
Private Sub ListBox2_Change()
Dim X As Long
Dim NewList As String
Dim Msg, Style, Title, Help, Ctxt, Response, MyString
If Processing Then Exit Sub
NewList = ""
With ListBox2
PickCount = 0
Processing = True
For X = 0 To .ListCount - 1
If .Selected(X) Then
PickCount = PickCount + 1
NewList = NewList & "1"
Else
NewList = NewList & "0"
End If
Next
If PickCount < 5 Then
OldList = NewList
Else
For X = 0 To .ListCount - 1
If Mid(OldList, X + 1, 1) = "1" Then
.Selected(X) = True
Else
.Selected(X) = False
End If
Next X
'Check for excessive amounts of filter parameters
Msg = "A maximum of 4 individual filter items may be selected.
Please remove items before adding more or check the 'ALL' box below if you
would like to select all of the items." ' Define message.
Style = vbOKOnly ' Define buttons.
Title = "Filter Parameter Limit" ' Define title.
Response = MsgBox(Msg, Style, Title)
End If
Processing = False
End With
End Sub
> Rick,
>
[quoted text clipped - 143 lines]
> > >> >>> > in
> > >> >>> > advance.
Rick Rothstein (MVP - VB) - 20 Mar 2008 16:41 GMT
I changed the logic of your code somewhat in order to minimize the number of
variables needed (some of which were introduced to handle your "All" item
that has been removed). One of the variable I removed was NewList and,
because of this, the variable named OldList has a name that seems
inappropriate now (perhaps changing it to ListSelections would be more
descriptive). I added an explanation symbol to your MessageBox and changed
the wording of your alert message (mainly since it still referred to the
"All" item).
I am not sure if the changes I made in your code (see the new code below my
signature) solve the problems you described or not, so you will have to try
it out and see. If it does not solve your problems, can you describe those
problems in a little more detail? I wasn't sure what you meant about
adding/subtracting items (where and how are you doing this?) not "sticking".
Also, where are you loading the ListBox from if not from within the
UserForm? And I don't see the warning message come up more than once, but
you might have other code somewhere doing this; if so, can you post your
other code?
Rick
' These three lines go in (General)(Declarations) section
Dim PickCount As Long
Dim OldList As String
Private Sub ListBox2_Change()
Dim X As Long
Dim NewList As String
Dim Msg As String
With ListBox2
PickCount = 0
' Make OldList start out with as many
' zeroes as there are items in the list
OldList = String(.ListCount, "0")
For X = 0 To .ListCount - 1
If .Selected(X) Then
PickCount = PickCount + 1
'Check for excessive amounts of filter parameters
If PickCount > 4 Then
' Turn off the selection just made because
' it would have been the 5th selected item
.Selected(.ListIndex) = False
' Now warn the user he/she picked too many items
Msg = "A maximum of 4 individual filter items may " & _
"be selected at one time!" & vbCrLf & vbCrLf & _
"You may remove one or more items from your " & _
"current selection in order to select a " & _
"different set of items."
MsgBox Msg, vbOKOnly Or vbExclamation, _
"Filter Parameter Limit"
Else
' Stuff a "1" into the Xth position of OldList
Mid(OldList, X + 1) = Abs(.Selected(X))
End If
End If
Next
End With
End Sub
> Rick,
>
[quoted text clipped - 243 lines]
>> > >> >>> > in
>> > >> >>> > advance.
ZipCurs - 20 Mar 2008 17:58 GMT
Rick,
I am all set with this. Thanks for your help.
> I changed the logic of your code somewhat in order to minimize the number of
> variables needed (some of which were introduced to handle your "All" item
[quoted text clipped - 274 lines]
> >> > >> >>> > End If
> >> > >> >>> > End With