Du musst deine Funktion zum Abspielen in eine eigene Funktion auslagern. Diese rufst du auf, wenn das Click-Event ausgelöst wird. Gleichzeitig setzt du eine globale Variable auf true, welche in der repeat-until-Schleife geprüft wird.
In der Schleife selbst bringst du noch ein application.processmessages unter, damit der Button-Click verarbeitet wird. Sollte jetzt das Click-Event ausgeführt werden und die globale Variable auf true stehen, dann wird die Funktion nicht nochmal ausgeführt, und die Variable bekommt den Wert false. Das führt wiederum dazu, dass die Schleife beendet wird.
Allerdings: Wenn das Programm noch etwas anderes machen soll, dann musst du dich mit Threads beschäftigen. Gibt aber genug Beispiele dafür.