Per non dare l'apparenza del blocco, devi inserire una istruzione DoEvents nei cicli piu' pesanti.
Per interrompere l'elaborazione, devi inserire, sempre nel ciclo piu' interno una If che controlli lo stato di una variabile booleana che ti fa uscire dalla Sub se e' messa a True.
E il valore di questa variabile lo cambi tramite un altro Command.
Ma se non inserisci il DoEvents come ti ho detto prima, il tutto non funziona.