Sub CienCopias()
ActiveSheet. PageSetup. PrintArea=”A1:E16”
ActiveWindow.PrintOut Copies:=100
End Sub
Esta macro, luego de establecer el rango por imprimir, ejecuta la impresión propiamente dicha, con cien copias.
Si queremos interrumpir la impresión antes de completarla, hay que tener en cuenta que, cuando se imprime una planilla de Excel (o un documento de Word), el programa le pasa la información al controlador de impresión. Es posible que, si interrumpimos la macro cuando ya se han impreso, por ejemplo, diez copias, el controlador de impresión ya “tenga adentro” otras diez o más copias.
Hecha la aclaración, una posible solución podría ser el siguiente juego de tres macros:
Sub Imprimir()
[F1] = 0
Application.OnKey “{P}”, “Fin”
unacopia
End Sub
Sub UnaCopia()
If [F1] < 100 Then
ActiveSheet.PrintOut
[F1] = [F1] + 1
Application.OnTime Now + 1 / 100000, “UnaCopia”
End If
End Sub
Sub Fin()
MsgBox (“Ejecución cancelada”)
[F1] = 100
Application.OnKey “{P}”
End Sub
La primera macro inicializa un contador de copias en la celda [F1]. Luego establece que, cuando se oprima la tecla de la letra P, se ejecutará la macro Fin. Finalmente, ejecuta la segunda macro, llamada UnaCopia.
Esta segunda macro imprime una copia de la hoja, incrementa el contador de copias y hace una pausa de algo menos de un segundo antes de ejecutarse a sí misma.
En condiciones normales, la macro UnaCopia seguirá llamándose a sí misma hasta que la celda [F1] alcance el tope de cien unidades.
Si, en la pausa que nos deja la instrucción OnTime, oprimimos la tecla de la letra P, se ejecutará la tercera macro (Fin) que, además de mostrar un mensaje dando cuenta de la cancelación, lleva el contador a su máximo, por lo que la macro UnaCopia no seguirá ejecutándose. Esta macro también cancela la asignación de la tecla <P> para cancelar la impresión.