Ok. Disculpa, no expliqué bien, aunque yo te entendí perfectamente. Así como lo explicas la primera solución mía es más razonable que la tuya, por lo siguiente:
Te digo lo que está malo con tu macro:
1. inicio = Range("D14"). Value: La variable inicio solamente va a almacenar el valor, oye bien, el valor, no la referencia de la celda D14
fin = Range("F14"). Value: La variable “fin” solamente va a almacenar el valor, oye bien, el valor, no la referencia de la celda de la celda F14, o sea, si en la celda D14 está el valor “Juan”, eso es el valor que va a tomar la variable “i”, si no hay entonces el FOR no hace nada, sale un error.
Es porque el ciclo FOR… NEXT se controla con números.
2. Ahora bien, si por alguna razón poderosa, los valores de D14 y F14 son numéricos el primero menor y el segundo mayor, entonces la asignación:
Range("C5"). FormulaR1C1 = i, Inserta “Juan” en la celda C5 cada vez, desde “i” hasta “fin”.
3. La declaración: ActiveWindow. SelectedSheets. PrintOut Copies:=1, sólo va a imprimir tantas hojas en la impresora como “inicio” y “fin” tengan valores, o sea, va a imprimir, tantos juan por hojas del FOR…NEXT.
En consecuencia, la macro no va ha imprimir un rango de 60 filas con sus respectivas columnas.
Tu necesitas imprimir un rango de 60 lineas usa este código:
Sub Imprimir2()
ActiveSheet.PageSetup.PrintArea = ""B1:G60"
Selection.PrintOut Copies:=1
End Sub
Puedes usar envés de Selection.PrintOut Copies:=1 usa ActiveSheet.PrintPreview para ver primeramente la vista previa del rango a imprimir.
Ten en cuenta que ""B1:G60" te va a seleccionar un área de impresión de 60 filas con 6 columnas, o sea, 160 celdas...