View Single Post
  #4   Report Post  
Posted to microsoft.public.excel.programming
Tom Ogilvy Tom Ogilvy is offline
external usenet poster
 
Posts: 27,285
Default ListBox and arrays

John Walkenbach uses a custom collection in his routine to fill a listbox
with unique items.

http://j-walk.com/ss/excel/tips/tip47.htm

It demonstrates some of the key aspects of creating and using a collection.

A collection has a remove method, so you can remove your item directly
without having to manage the storage of the items in the collection. You
can also assign an index value, so you can use that or the numerical index
to retrieve items.

You use collections all the time in Excel - so I guess you mean you are
unfamiliar with creating a collection.

--
Regards,
Tom Ogilvy

"Michael Malinsky" wrote in message
...
So if I were to maintain an array structure, I'd have a loop essentially
saying:

Item1(x-1)=Item1(x)
Redim Preserve Item1(x-1)

I'm not familiar with collections. Any recommendaitons on a good source

to
determine if this might be a more viable solution?

Thanks.
--
Michael J. Malinsky
Pittsburgh, PA

"I am a bear of very little brain, and long
words bother me." -- AA Milne, Winnie the Pooh

"Tom Ogilvy" wrote in message
...
For a simple array structure
you would have to locate the item in the array, move all the items above

it
down one slot and resize the array. This would require a loop.


You might explore using a collection.

--
Regards,
Tom Ogilvy



"Michael Malinsky" wrote in message
...
I have UserForm1 with TextBox1, TextBox2, TextBox3, ListBox1,
CommandButton1, and CommandButton2.

The user enters information in the 3 TextBoxes, then presses

CommandButton1
to add that info to ListBox1. The code for CommandButton1 is:

Private Sub CommandButton1_Click()

x = lbRangeList.ListCount

'If Item2 is higher than Item3, display a message box
'and do not update ListBox1 to include the range. Otherwise,

update
the
list.

If Val(TextBox2.Value) < Val(TextBox2.Value) Then
ReDim Preserve Item1(x), Item2(x), Item3(x)
Item1(x) = TextBox1.Value
Item2(x) = TextBox2.Value
Item3(x) = TextBox3.Value
ListBox1.AddItem Item1(x)
ListBox1.List(ListBox1.ListCount - 1, 1) = Item2(x)
ListBox1.List(ListBox1.ListCount - 1, 2) = Item3(x)
x = x + 1 'Add 1 to x for the next item
End If
Else
a = MsgBox("Item1 cannot be higher than Item2. Please

re-enter
your
data.", vbCritical, "Invalid Entry")
End If
'Clear textboxes
For Each ctrl In Me.Controls
If TypeName(ctrl) = "TextBox"
Next ctrl
Item1.SetFocus
lbRangeList.ListIndex = -1

End Sub

I put these items in arrays (declared as public variables) for using

the
arrays in other parts of my project. Here's my problem: I want to be

able
to remove a line from ListBox1 by pressing CommandButton2. I can do

this
easily enough, but my problem is in how to update the arrays I've

created
to
account for items I've removed from ListBox1. Currently, I have the
following code for ListBox2:

Sub CommandButton2_Click()

ListBox1.RemoveItem lbRangeList.ListIndex

End Sub

Which removes the items from ListBox1, but when I continue to run

other
subroutines in the module, I get a subscript out of range error which

I'm
assuming has to do with removing an item from ListBox1, but not

updating
the
arrays to account for this change.

Any help would be greatly appreciated.

--
Michael J. Malinsky
Pittsburgh, PA

"I am a bear of very little brain, and long
words bother me." -- AA Milne, Winnie the Pooh