In an Excel worksheet, I am iterating through tasks in a MS Project file with VBA.
I've found that my code works perfectly until I encounter a MS Project task that does not have a name but the error is confusing me. When I delete these unnamed tasks, the error goes away.
I tried adding an if statement: If prj.Tasks(i).UniqueID Is Nothing Then
to catch this error but I get a Type mismatch
error.
Dim i As Integer
Dim TaskID As Long
Dim ExcelRow As Integer
For i = 1 To prj.Tasks.Count
TaskID = prj.Tasks(i).UniqueID 'This line is highlighted when I debug
ExcelRow = GetRowByUniqueID(TaskID)
Debug.Print ExcelRow
My error is Object variable not set (Error 91). I am confused by this because I was under the impression that all Tasks have a unique ID. When I open my .mpp file in Microsoft Project, I can see that the tasks have no name but have a unique ID in the Unique ID column.
Edit: I just realized it is not an issue with prj.Tasks(i).UniqueID
but rather an issue with prj.Tasks(i)
. How is it possible that this variable is not set when i
is within the range of the number of Tasks?
Okay so I just figured it out.
Somehow, when I iterate through all the Tasks, some of them are Nothing
. I don't really understand why but at the very least, I was able to catch this with an if statement:
If prj.Tasks(i) Is Nothing Then
Debug.Print "This is nothing."
Else
TaskID = prj.Tasks(i).UniqueID
ExcelRow = GetRowByUniqueID(TaskID)
Debug.Print ExcelRow
Now, my code does not break at all.