It seems to me that, this is quite as expected.

I have never thougt of using the Exit command from a sub !!

It seems, that the looping structures in KiX are also "self contained", ie. keeping their own scope of @Error.
So you have to check the @Error macro within the loop, to check the result of Exit in sub's.

But Exit x in subroutines, causes the loop to start from beginning of the loop, skipping the remainder of the loop.

The following script will break correctly, and return to the calling script:

code:
For $i = 1 to 10
If @Error ; Sub returns an error - return to calling script
Return
EndIf
"Before call to sub" ?
GoSub sub
"After call to sub" ?
Next

Return

:sub
"Sub Called" ?
If $i = 3
Exit 1
EndIf
Return

The above is the working solution for Sub's, but i would prefer to use Function's instead Sub's if i want to inspect
the result of the call.

-Erik