View Single Post
  #3   Report Post  
Posted to microsoft.public.excel.programming
RB Smissaert RB Smissaert is offline
external usenet poster
 
Posts: 2,452
Default treeview node tag hold array?

KeepITCool,

'this works
Dim v
v = .Tag
v(UBound(v, 1), UBound(v, 2)) = "indirect"
.Tag = v


Thanks for that, that works indeed!
Just wonder how you came up with that.
If I can implement this fully it will simplify a lot of things.
For example deleting or inserting nodes could be done without complex
array manipulations.
It would be a reasonably big re-write of my app, but I think it would be
worth it on the long run.

RBS


"keepITcool" wrote in message
ft.com...


yeah.. strange.
probably due to passing the node byval

Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
With Node
If IsArray(.Tag) Then
'this works
Dim v
v = .Tag
v(UBound(v, 1), UBound(v, 2)) = "indirect"
.Tag = v
'this fails
.Tag(UBound(.Tag, 1), UBound(.Tag, 2)) = "direct"
MsgBox .Tag(UBound(.Tag, 1), UBound(.Tag, 2))
End If
End With
End Sub

Private Sub UserForm_Initialize()
Dim arr(1 To 10, 1 To 35) As String
With TreeView1
With .Nodes
With .Add(, tvwChild, "key1", "text1")
.Tag = arr
End With
End With
End With
End Sub



--
keepITcool
| www.XLsupport.com | keepITcool chello nl | amsterdam


RB Smissaert wrote :

Trying to find a better way to let a treeview hold data and thought
that perhaps the Tag of the treeview nodes could hold arrays, so I
tried this.

In one Sub:

dim arr(1 to 2, 1 to 35)

Set nodx = _
MainForm.TreeView1.Nodes.Add(actNodeKey, tvwChild, , , Image:=3)

nodx.tag = arr

Then in another Sub:

.TreeView1.SelectedItem.Tag(1, 8) = "test"

But when I run this for the first time I get an out of stack space
error and the second time Excel just unloads, so a crash.

Couldn't find anything about how this could be done, but if it could
work it would be better than the way I do this now, which is hold the
node data in an array and update the array according to what happens
to the nodes. Thanks for any advice.


RBS