Hi! In making my Install list I developed the tree procedures to make a tree, it's leaves and children of children.
Now I don't have to use 4 arrays, or more than one, but I did for the very reason to make tree views with several levels. So, below are the dimensions, and the calls to make tree children. The data for the children is not fixed but a good test. Sincerely Bruce Dim strAllTitle, strUnInstallTitle Dim programArray() Dim intAllCount, intUnInstallCount intAllCount = 0: intUnInstallCount = 0 Dim arrayAllByName(), arrayAllByDate(), arrayUnInstallByName(), arrayUnInstallByDate() Dim maxColumns maxColumns = 5 strAllTitle = "The Installed Applications Total Is: " strUnInstallTitle = "The UnInstallable Applications Total Is: " Dim treeOptionNames treeOptionNames = Array( "Programs By Name", "Programs By Date", "All Programs By Name", "All Programs By Date") 'GetAllPrograms Sub resetTreeView( dObj, treeId, nodeName, nodeData) 'Reset programs Tree View level based on ID. dObj.Control( treeId).Clear Dim tvRoot Set tvRoot = dObj.Control( treeId).NewItem tvRoot.Text = nodeName tvRoot.Data = nodeData dObj.Control( treeId).TopLevel.Insert tvRoot, tviRoot ' GetAllTreeLeaves "tv_Programs", dObj.Control("tv_windows").Root, dObj, dArray End Sub 'This is original and an array has to be passed in. ' The array is either the program list or the list of choice of listing. ' In other words the first time through is the 4 choices and the call inside is the program array associated to it. ' Any sub call is another routine just like this for the program list. Sub GetAllTreeLeaves( treeName, lastNode, dObj, dArray) Dim tChildName, tCount, tMax, tLevel, i, j Dim tvNewChild, tvNewChildChildren, tvNewChildChildrensChildren tCount = 0 For Each tChildName In dArray tCount = tCount + 1 ' Now create sub tree level with a name and data. GetChildNode treeName, lastNode, tvNewChild, dObj, tChildName, tCount tMax = intUnInstallCount If tCount > 2 Then tMax = intAllCount For i = 0 to tMax-1 Select Case tCount Case 1: tChildName = arrayUnInstallByName( i, 0) Case 2: tChildName = arrayUnInstallByDate( i, 0) Case 3: tChildName = arrayAllByName( i, 0) Case 4: tChildName = arrayAllByDate( i, 0) End Select tLevel = tCount * 100 + i GetChildNode treeName, tvNewChild, tvNewChildChildren, dObj, tChildName, tLevel For j = 0 to maxColumns-1 tLevel = tCount * 10000 + i * 100 + j Select Case tCount Case 1: tChildName = arrayUnInstallByName( i, j) Case 2: tChildName = arrayUnInstallByDate( i, j) Case 3: tChildName = arrayAllByName( i, j) Case 4: tChildName = arrayAllByDate( i, j) End Select Select Case j Case 1: tChildName = "Install Date: " & Mid( tChildName, 5, 2) & "/" & Right( tChildName, 2) & "/" & Left( Trim( tChildName), 4) Case 2: tChildName = "Version: " & Trim( tChildName) Case 3: tChildName = "Size: " & Trim( tChildName) End Select GetChildNode treeName, tvNewChildChildren, tvNewChildChildrensChildren, dObj, tChildName, tLevel Next Next Next End Sub Sub GetChildNode( treeName, parentNode, tvINew, dObj, tvText, tvData) Set tvINew = dObj.Control( treeName).NewItem() tvINew.Text = tvText '& tvData tvINew.Data = tvData ' Note below last node is parent and created is child. parentNode.Children.Insert tvINew, tviLast End Sub Sub doSorting() QuickSort arrayUnInstallByName, 0, intUnInstallCount-1, 0, 4 QuickSort arrayUnInstallByDate, 0, intUnInstallCount-1, 1, 4 QuickSort arrayAllByName, 0, intAllCount-1, 0, 4 QuickSort arrayAllByDate, 0, intAllCount-1, 1, 4 End Sub