Find a specified requirement in a specified folder
Public Function GetReqByPath(fullPath$, _
  Optional delimChar As String = "\") _
    As Req
' Find a specified requirement in a specified folder
' This function returns a Req object specified by its
' full path. For example:
'
'  Set r = GetReqByPath("SCRATCH\OTA_REQ_DEMO\OTA_S_O_1")
'  returns the OTA_S_O_1 object.
' A requirement name is not unique in the project, but it is
'  unique as a direct child of another requirement.
'  Therefore, these routine works by walking down the
'  requirement tree along the fullPath until the requirement
'  is found at the end of the path.
  Dim rFact As ReqFactory
  Dim theReq As Req, ParentReq As Req
  Dim ReqList As List
  Dim NodeArray() As String, PathArray() As String
  Dim WorkingDepth As Integer
' Trim the fullPath and strip leading and trailing delimiters.
  fullPath = Trim(fullPath)
  Dim pos%, ln%
  pos = InStr(1, fullPath, delimChar)
  If pos = 1 Then
    fullPath = Mid(fullPath, 2)
  End If
  ln = Len(fullPath)
  pos = InStr(ln - 1, fullPath, delimChar)
  If pos > 0 Then
    fullPath = Mid(fullPath, 1, ln - 1)
  End If
' Get an array of requirements, and the length
' of the path.
  NodeArray = Split(fullPath, delimChar)
  'WorkingDepth = UBound(NodeArray)
' Walk down the tree.
  'tdc is the global TDConnection object.
  Set rFact = tdc.ReqFactory
  For WorkingDepth = LBound(NodeArray) To UBound(NodeArray)
' First time, find under the root (-1).
'After that, under the previous requirement found: ParentReq.ID
    If WorkingDepth = LBound(NodeArray) Then
      Set ReqList = rFact.Find(-1, "RQ_REQ_NAME", _
          NodeArray(WorkingDepth), TDREQMODE_FIND_EXACT)
    Else
      Set ReqList = rFact.Find(ParentReq.ID, "RQ_REQ_NAME", _
      NodeArray(WorkingDepth), TDREQMODE_FIND_EXACT)
    End If
    If ReqList.Count = 0 Then
          Set GetReqByPath = Nothing
          Exit Function
    End If
    ' Delete parent. Each loop has to find it again.
    Set ParentReq = Nothing
    Dim strItem$, reqID&, strID$, thePath$
   'Get a single string from the list returned
   'by ReqFactory.Find. We know it's the first
   'item because the filter can only return one
   'item that exactly matches the RQ_REQ_NAME.
   strItem = ReqList(1)
   ' ReqFactory.Find returns a List
   ' of strings of format: ID,Name.   
   ' For example "9,Products/Services On Sale" 
   ' Extract the ID from the string by splitting the
   ' string at the comma.
   pos = InStr(strItem, ",")
   strID = Mid(strItem, 1, pos - 1)
   ' Convert the ID to a long, and get the object
   reqID = CLng(strID)
   Set theReq = rFact.Item(reqID)
   strID = Mid(strItem, 1, pos - 1)
   'Now check that the object is at the correct depth.
   'If so, we've found the requirement. On the next loop,
   'we'll look from here down.
   thePath = theReq.Path
   PathArray = Split(thePath, "\")
    '            Debug.Print "Number of elements is " & UBound(PathArray)
    '            Debug.Print theReq.ID, theReq.Name
   Set ParentReq = theReq
     If UBound(PathArray) = WorkingDepth Then
     Exit For
   End If
     If ParentReq Is Nothing Then Exit For
  Next WorkingDepth
  Set GetReqByPath = ParentReq
Exit Function
GetReqByPathErr:
  Set GetReqByPath = Nothing
End Function