Solved

Treeview - looping through nodes

Posted on 2012-04-01
6
257 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 46

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
Active Directory Webinar

We all know we need to protect and secure our privileges, but where to start? Join Experts Exchange and ManageEngine on Tuesday, April 11, 2017 10:00 AM PDT to learn how to track and secure privileged users in Active Directory.

 

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 46

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

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Excel 2007 Macro to Change Column Formatting 3 37
MS Excel Formula Help 3 35
Excel Split Employee Name into Lname Fname Mname 3 18
NEED TRANSFER  DATA 59 24
This code takes an Excel list of URL’s and adds a header titled “URL List”. It then searches through all URL’s in column “A”, looking for duplicates. When a duplicate is found, it is moved to the top of the list. The duplicate URL’s are then highlig…
Some code to ensure data integrity when using macros within Excel. Also included code that helps secure your data within an Excel workbook.
This Micro Tutorial will demonstrate the scrolling table in Microsoft Excel using the INDEX function.
This Micro Tutorial will demonstrate how to use a scrolling table in Microsoft Excel using the INDEX function.

820 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