Solved

Treeview - looping through nodes

Posted on 2012-04-01
6
248 Views
Last Modified: 2012-04-02
Hi,

I am simply trying to loop through the nodes of my treeview control with following code:
With TaskItemsForm.trvTasks
        For Each n In trvTasks
            Debug.Print "Key :  ", .Nodes.Item.Key, "Text :   ", .Nodes.Item.Text
        Next n
     End With

Open in new window

but I am getting the error :
Compile error - argument not optional - and it highlights the ".Items" section of .Nodes.Item.Key

Any help on guiding me through this would be appreciated.

Best regards,

Craig
0
Comment
Question by:slobber72
  • 3
  • 2
6 Comments
 
LVL 33

Accepted Solution

by:
Norie earned 125 total points
ID: 37794250
Craig

Why aren't you using the loop variable n?

Have you checked what it is?

Is it a node?

Try this.
Dim N As Node

        For Each N In trvTasks.Nodes
            Debug.Print "Key :  ", N.Key, "Text :   ", N.Text
        Next N

Open in new window

0
 
LVL 45

Assisted Solution

by:Martin Liss
Martin Liss earned 125 total points
ID: 37794419
Here's code to "Walk" the nodes of a treeview.


Private Sub WalkTree(ByVal ParentNode As Node)
    
    Do Until ParentNode Is Nothing
        Debug.Print ParentNode.Text, ParentNode.Index
        WalkTree ParentNode.Child
        Set ParentNode = ParentNode.Next
    Loop

End Sub

Open in new window


Usage:

WalkTree trvTasks.Nodes(1)
0
 

Author Closing Comment

by:slobber72
ID: 37794479
Thanks guys. I am still a relative novice in coding - the different uses of methods / properties etc still gets me befuddled. You have both given me a way to cycle through the treeview and they both work really well with my code.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:slobber72
ID: 37794617
Hi Martin,

I am getting an error when trying to call your procedure- as I am hopeless with VBA in Excel I can't track down what the reason for it is.

When I call the procedure as below, I get the error "Type Mismatch"...

Private Sub UserForm_Initialize()
    With Me
        'Label the userform
        .Caption = "Menu Tasks Comment Form"
        ' Label the buttons
        .CommandButton1.Caption = "Close"
        .CommandButton2.Caption = "Add Comment"
        .CommandButton3.Caption = "View Comments"
        .Frame1.Caption = "Comments"
        'Null out the label
        .Label1 = vbNullString
        .TextBox1 = vbNullString
        'Label the treeview
        .TreeView1.LineStyle = tvwRootLines
        'Sort the treeview
        .TreeView1.Sorted = True
    End With
   'Populate the Treeview
    TreeView_Populate True ' populate the treeview control
    WalkTree Me.TreeView1.Nodes(1)
End Sub

Open in new window


Could you perhaps point me in the right direction as to what I am doing wrong ?

Thanks in advance.
Craig
0
 

Author Comment

by:slobber72
ID: 37794670
Hi again,

I found that I needed to change the procedure to declare the parentnode as an object, not as a node - it would appear that this is a version of treeview issue.

Private Sub WalkTree(ByVal ParentNode As Object) ' previously declared as node
    
    Do Until ParentNode Is Nothing
        Debug.Print ParentNode.Text, , ParentNode.Index, , ParentNode.Key
        WalkTree ParentNode.Child
        Set ParentNode = ParentNode.Next
    Loop

End Sub

Open in new window


Thanks again !!
0
 
LVL 45

Expert Comment

by:Martin Liss
ID: 37796587
I'm glad you were able to fix it. Not that I'm complaining but what happened between the time you said my code worked really well and the type mismatch error?

Just out of curiosity, does the following work for you?

Private Sub WalkTree(ByVal ParentNode As ComctlLib.Node)
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

What is a Form List Box? (skip if you know this) The forms List Box is the alternative to the ActiveX list box. If you are using excel 2007, you first make sure you have a developer tab (click the Orb)->"Excel Options"->Popular->"Show Developer tab…
Approximate matching with VLOOKUP and MATCH seems to me to be a greatly under-used technique, and one which is vital for getting good performance out of large lookups. Until recently I would always have advised using an exact match for simplicity an…
This Micro Tutorial will demonstrate in Google Sheets how to use the HYPERLINK function to create live links inside your spreadsheet.
This Micro Tutorial will demonstrate how to create pivot charts out of a data set. I also added a drop-down menu which allows to choose from different categories in the data set and the chart will automatically update.

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now