i try to load a treeview and then when i click on each node, it shows data at the right panel (list box) now loading treeview is ok but when click on the nodes, for some nodes right panel shows ok data but for some node like (mcbook,test packs) it shows error 91 (object variable or with block variable not set) for child node of (test packs) when i click i have no error.





loading and selected node code event are as below.

Option Compare Database
Option Explicit
Private mp As [*clsMousePosition]
Private varHash As Variant

Private Sub Form_Load()
On Error GoTo Error_Trap
Dim objNode As Node, objNode2 As Node, strKey As String
Dim rst As DAO.Recordset, rst2 As DAO.Recordset, intKey As Long, matchup As Long, matchTestPack As Long
varHash = Array("A", "B", "C", "D", "E", "F", "G", "H", "I", "J")
With TreeView
.Nodes.Clear

TreeView.Nodes.Add , , "MC Book", "MC Book", 7

'MC Book.Expanded = True
TreeView.Nodes.Add "MC Book", tvwChild, "Item List by Unit/System", "Item List by Unit/System", 2, 1
TreeView.Nodes.Add "Item List by Unit/System", tvwChild, "Item Systems", "Item Systems", 2, 1
TreeView.Nodes.Add "Item List by Unit/System", tvwChild, "Test Packs", "Test Packs", 2, 1
TreeView.Nodes.Add "MC Book", tvwChild, "Task Database", "Task Database", 2, 1
TreeView.Nodes.Add "Task Database", tvwChild, "Construction Tasks", "Construction Task", 2, 1
TreeView.Nodes.Add "Construction Tasks", tvwChild, "CCK-CON", "CCK", 2, 1
TreeView.Nodes.Add "Construction Tasks", tvwChild, "PIP-CON", "PIP", 2, 1
TreeView.Nodes.Add "Task Database", tvwChild, "Pre-Commissioning Tasks", "Pre-Commissioning Task", 2, 1
TreeView.Nodes.Add "Pre-Commissioning Tasks", tvwChild, "CCK-PRECOM", "CCK", 2, 1
TreeView.Nodes.Add "Pre-Commissioning Tasks", tvwChild, "STS-PRECOM", "STS", 2, 1
TreeView.Nodes.Add "Pre-Commissioning Tasks", tvwChild, "PIP-PRECOM", "PIP", 2, 1
TreeView.Nodes.Add "MC Book", tvwChild, "Dossier Status", "Dossier Status", 2, 1
TreeView.Nodes.Add "MC Book", tvwChild, "Punch List", "Punch List", 2, 1
TreeView.Nodes.Add "MC Book", tvwChild, "Search", "Search", 4
TreeView.Nodes.Add "Search", tvwChild, "Subsystem", "Subsystem", 4
TreeView.Nodes.Add "Search", tvwChild, "Test Pack", "Test Pack", 4
TreeView.Nodes.Add "Search", tvwChild, "Items", "Items", 4
TreeView.Nodes.Add "Search", tvwChild, "Tasks", "Tasks", 4
TreeView.Nodes.Add "Search", tvwChild, "Punch List-Search", "Punch List", 4

TreeView.Nodes("MC Book").Expanded = True
Set rst = CurrentDb.OpenRecordset("qrytreeview4")
If rst.RecordCount > 0 Then
While Not rst.EOF
intKey = rst.Fields("MenuID").Value
If rst.Fields("Parent") = 0 Then
Set objNode = .Nodes.Add("Item Systems", tvwChild, NumberToString(intKey), rst.Fields("Option"), 5)
objNode.Expanded = False
Else
Debug.Print (NumberToString(intKey))
Select Case rst.Fields("level") ' Evaluate Number.


Case "level2" ' Number between 1 and 5, inclusive.
matchup = 6
' The following is the only Case clause that evaluates to True.
Case "level3" ' Number between 6 and 8.
matchup = 7

Case "level1" ' Number between 6 and 8.
matchup = 9
'Case 9 To 10 ' Number is 9 or 10.
'Debug.Print "Greater than 8"
'Case Else ' Other values.
' Debug.Print "Not between 1 and 10"
End Select


Set objNode = .Nodes.Add(NumberToString(rst.Fields("Parent")), tvwChild, NumberToString(intKey), rst.Fields("Option2"), matchup)
End If
rst.MoveNext
Wend
End If

rst.Close
Set rst = Nothing


Set rst2 = CurrentDb.OpenRecordset("qrytreeview_TestPackage")
If rst2.RecordCount > 0 Then
While Not rst2.EOF
intKey = rst2.Fields("MenuID").Value
If rst2.Fields("Parent") = 0 Then
Set objNode2 = .Nodes.Add("Test Packs", tvwChild, NumberToString(intKey), rst2.Fields("Option"), 5)
objNode2.Expanded = False
Else
Debug.Print (NumberToString(intKey))
Select Case rst2.Fields("level") ' Evaluate Number.


Case "level2" ' Number between 1 and 5, inclusive.
matchup = 6
' The following is the only Case clause that evaluates to True.
Case "level3" ' Number between 6 and 8.
matchup = 7

Case "level1" ' Number between 6 and 8.
matchup = 9
'Case 9 To 10 ' Number is 9 or 10.
'Debug.Print "Greater than 8"
'Case Else ' Other values.
' Debug.Print "Not between 1 and 10"
End Select


Set objNode2 = .Nodes.Add(NumberToString(rst2.Fields("Parent")), tvwChild, NumberToString(intKey), rst2.Fields("Option"), matchup)
End If
rst2.MoveNext
Wend
End If
End With
rst2.Close
Set rst2 = Nothing


Error_Exit:
Exit Sub

Error_Trap:
MsgBox ("Error Code:" & Err.Number & " Error Description:" & Err.Description)
Resume Error_Exit
End Sub


-----------------------------------------------------

Private Sub TreeView_NodeClick(ByVal selectedNode As Object)
On Error GoTo Error_Trap
Dim frm As Access.Form
Dim frm2 As Access.Form
Dim strNodeText As String
Dim strTitlePlus As String

MsgBox selectedNode.Parent.Parent.Parent
MsgBox selectedNode.Text

Set frm = Me![fsubItem].Form
' Set frm2 = Me![fsubTask].Form

'MsgBox selectedNode.Text
' MsgBox selectedNode.Key




If selectedNode.Parent.Parent.Parent = "test packs" Then



strNodeText = selectedNode.Text

Me![txtSelectedDoc].Value = strNodeText
'Me![fsubItem]![ItemList].RowSource = "qryitem"
frm![ItemList].RowSource = "qryTestPack_line"
frm.Requery
frm.ItemList.Requery
frm.Visible = True
Else
frm![ItemList].RowSource = "qryTestPackage"
frm.Requery
frm.ItemList.Requery
frm.Visible = True
End If



'If selectedNode.Text = "Test Packs" Then


'MsgBox "masoud"

'Me![fsubItem]![ItemList].RowSource = "qryitem"




' Dim intMenuID As Integer
' Dim strSql, strArg, strForm As String
' intMenuID = StringToNumber(selectedNode.Key)
' strSql = "Select * from tblmenu"
' strSql = strSql & " where menuID=" & intMenuID
' strArg = Nz(CurrentDb.OpenRecordset(strSql).Fields("Action" ).Value, "")
' strForm = Nz(CurrentDb.OpenRecordset(strSql).Fields("Form"). Value, "")

' Select Case strArg
' Case "Open"
'DoCmd.OpenForm strForm, acNormal, , , , acWindowNormal
' MsgBox strForm
' Case "Exit"
' Application.Quit
' End Select

Error_Exit:
Exit Sub

Error_Trap:
MsgBox ("Error Code:" & Err.Number & " Error Description:" & Err.Description)
Resume Error_Exit
End Sub


Best Regards.