Il codice è abbastanza lungo, potresti dire per cortesia qual'è l'errore riscontrato? Oppure "crasha" automaticamente?
In ogni caso come prima cosa quando si scrivono procedure così nidificate, è buona regola controllare l'utilizzo delle parentesi graffe, però è probabile anche che vi sia un errore nella condizione del ciclo while.