Hmmmm .... I have absolutely no problem with the above code in 2004....however after perusing it a bit, might I make a suggestion....of course I might... otherwise you would not have posted the dang thing....
There are some automation protocols in 2000 and 2002 that create problems in lisp, vba and VLisp that you should be aware of...
Any time you issue a command or a command is in progress and you try to manipulate an object modified or created by that command in progress you will have this error, many times it is a fatal error and AutoCAD will crash or lock up....
The problem is perhaps related to the way ActiveX handles objects and the way a command handles objects...
Any command i.e. (command "blah blah blah" ...) that creates, edits, or otherwise changes an object does not commit the changes to the drawing database until the command is ended...the result is that the object was opened for read, not write. You might try adding a closing command call right after the while loop thereby assuring that the offset command is indeed finished and the objects are no longer under the control of the command interface.
Incedently this same thing happens if you try to modify an object through VLisp immediately after it was modified by VBA using an "End_Command" reactor.