Home › Forums › Discussion Forum › identifying if any task in a block is linked to tasks outside the block
Tagged: I
I have an existing project plan that someone has copied and updated a section of. I now need to copy that block (which has been extensively changed) back into the live plan. Obviously, this is simple to do however, a few of the tasks are linked to items outside the block which will be copied in.
As an example, the section of the plan will be copied in existing tasks 100-200. A few of these tasks are linked to either <100 or >200.
After I have copied the block in, I will manually add these few links in however, finding them is tricky.
I can’t use the “is within” filter as this only finds single links; for instance, if task 150 is driven by 90, it will not find task 150 if it is driven by 90,110.
Does anyone have any solutions to this?
Thanks
Miles
I solved it, so I thought I would share it here 🙂 Using VBA and marking the tasks (so you need to set task formatting for marked tasks to see the results):
Sub find_links_outside_block()
'Produce by Miles Goodchld 26th Aug 2022
Dim t As Task
Dim T_pred As Task
Dim T_succ As Task
Dim Block_start As Integer
Dim Block_end As Integer
Dim Choice As Integer
Block_start = 15
Block_end = 23
Choice = 3 '1 = predecessor only, 2=successort only, 3 = both2
Block_start = InputBox("enter the row number of the start of your block", "finding links outside a block of tasks")
Block_end = InputBox("enter the row number of the end of your block", "finding links outside a block of tasks")
Choice = InputBox("Select what you want to hightlight:" & vbCrLf & "1 = Only Predesessors" & vbCrLf & "2 = Only Successors" & vbCrLf & "3 = Both", "finding links outside a bloxk of tasks")
For Each t In ActiveProject.Tasks
If Not t Is Nothing Then
t.Marked = False
If t.ID >= Block_start And t.ID <= Block_end Then
If Choice = 1 Or Choice = 3 Then
For Each T_pred In t.PredecessorTasks
If T_pred.ID < Block_start Or T_pred.ID > Block_end Then t.Marked = True
Next T_pred
End If
If Choice = 2 Or Choice = 3 Then
For Each T_succ In t.SuccessorTasks
If T_succ.ID < Block_start Or T_succ.ID > Block_end Then t.Marked = True
Next T_succ
End If
Else
'do nothing as outside the block
End If
Else
'do nothing as T is nothing
End If
Next t