A recent comment pointed out that the IPPlaneLine function (intersection of a 3D line with a plane) in the IP2 spreadsheet was giving incorrect results. This has now been fixed, and the corrected spreadsheet can be downloaded from IP2.zip.
The problem turned out to be in another function called PlaneCoeff which modified an array that had been passed by reference (ByRef), and this modified array was then used in IPPlaneLine, whereas the unmodified array was required. The solution was to pass the array by value (ByVal), so that the modifications performed in PlaneCoeff were not passed back to the calling routine.
See Transferring data within VBA for more details about the effects of passing ByRef or ByVal.