Hola.
Eliza da en el clavo.
Declara una variable booleana y listo.
Al pulsar el botón la pones = TRUE.
Antes de iniciar el bucle para rellenar el grid la pones = FALSE.
En el medio del bucle pregunta por el valor de la variable, si es TRUE, sal del bucle. Eso sí: para que esto funcione es indispensable que en algun lugar del bucle coloques una instrucción
DoEvents que permita que se procesen los eventos en cola (de otra forma tu aplicación no se enteraría de la pulsación del botón hasta que salieras del bucle).
Esquemáticamente:
Private bCancel As Boolean
Private Sub Command1_Click()
bCancel = True
End Sub
Private Sub Metodo()
bCancel = False
Do While condicion
.
.
.
DoEvents
If bCancel Then Exit Do
.
.
.
loop
End Sub
Debéis de tener en cuenta que introducir en el bucle la instrucción Doevents + una comparación implica penalizar el rendimiento, por lo que puede ser buena idea introducir un contador para realizar la comprobación cada X iteraciones del bucle.
Chao.