View Single Post
  #8   Report Post  
Posted to microsoft.public.excel.programming
RB Smissaert RB Smissaert is offline
external usenet poster
 
Posts: 2,452
Default update collection of arrays

Thanks for the tip.
I think storing the arrays with in the node tag works fine and it can't be
any more robust linkage with the nodes.
Will try this for now.

RBS

"Dana DeLouis" wrote in message
...
...the option to add an item after a known other
item and that is what I need...


Hi. For Collections, one technique is to store the "Key" name as part of
the data. It's not ideal, but can be a work-around.
You will need some error checking with mixed data types in the collection.

Sub Demo()
Dim oColl As Collection
Dim arr(0 To 10)
Dim p As Long

Set oColl = New Collection

arr(0) = "a" ' Index 0 for key...
arr(1) = 5

oColl.Add arr, "a"
oColl.Add 3.14, "Pi"
oColl.Add 1.23, "Sales"

'// Update "a"
arr(1) = 6
For p = 1 To oColl.Count
If oColl(p)(0) = "a" Then
oColl.Remove ("a")
oColl.Add arr, "a", Befo=p
Exit For
End If
Next
End Sub

Another technique is to store the key name and your data array inside
another array...
oColl.Add Array("a", arr), "a"

Hope this helps. :)
--
Dana DeLouis
Win XP & Office 2003


"RB Smissaert" wrote in message
...
Jim,

Yes, I had a look at the dictionary object, but what is misses is the
option to add an item after a known other
item and that is what I need as it has to be in the same order as the
nodes in the treeview.

Will look again in putting the data as a 1-D array in node tags. That
would be the most robust linkage with the
nodes and would save me having a routine for clearing data after a node
was deleted.
The other option I can think of now is storing it in a sheet.

RBS

"Jim Cone" wrote in message
...
RBS,

You can do something close to what you want with the
Scripting Dictionary object...
'-------------
Sub test3()
'Requires project reference to "MicrosoftScriptingRuntime"
'Note that the order of the Key and Item arguments are the reverse
'of those in a Collection.
Dim oDic As Scripting.Dictionary
Dim arr(1 To 10)
Set oDic = New Scripting.Dictionary

arr(1) = 5
oDic.Add "a", arr()
MsgBox oDic("a")(1)

arr(1) = 6
oDic("a") = arr()
MsgBox oDic("a")(1)

Set oDic = Nothing
End Sub
'------------------------
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware



"RB Smissaert"
wrote in message

Is it possible to update the value of an array element if that array is
held
by a collection?
It seems not:

Sub test2()
Dim oColl As Collection
Dim arr(1 To 10)
Set oColl = New Collection
arr(1) = 5
oColl.Add arr, "a"
MsgBox oColl(1)(1)

oColl(1)(1) = 6
MsgBox oColl(1)(1)
End Sub

Is there any solution for this?
The whole purpose is to store data with nodes of a treeview control and
to
have a robust
linkage between the nodes and the stored data.

RBS