Hola
Quería enviar a una impresora, desde código, un archivo para imprimirlo en un formato de papel bastante raro. mide 159mmx104mm
Me temo que no sea posible definir un tamaño de papel desde Excel, porque lo define el driver de la impresora, pero aun así lo pregunto por si alguien sabe cómo hacerlo.
Muchas gracias. Un saludo
Es más, necesitaría también saber cómo puedo localizar exactamente en un punto del papel lo que yo quiero escribir, como sí se puede hacer en Word.
Quiero decir, me gustaría poder colocar al milímetro el contenido de una celda en un punto del papel determinado.
Por ahora no se me ocurre cómo hacerlo de otra forma, igual con una clase... pero ni idea.
No está documentado en toda la internet, así que toca prueba-error, que es el método que más me gusta a mi... XDDD.
Lo único en lo que he podido avanzar:
Ãrmate de paciencia (digo tiempo) y prueba este código... puedes cancelarlo a los dos minutos porque no vas a conseguir avanzar mucho más. Pero prueba:
Sub ListameConfiguracionesPagina()
Dim lgContador As long
intContador = 0
Application.ScreenUpdating = False
Dim ConjuntoConfiguracionesPagina As Excel.PageSetup
Set ConjuntoConfiguracionesPagina = ActiveSheet.PageSetup
Do
On Error Resume Next
With ConjuntoConfiguracionesPagina
.PaperSize = lgContador '28672 esta es una definición mía para un papel
If lgContador= .PaperSize Then Debug.Print .PaperSize
End With
DoEvents
lgContador= lgContador+ 1
Loop
On Error GoTo 0
Application.ScreenUpdating = True
End Sub
Vale, ya te has cansado, pero habrás obtenido este listado:
1,3,5,7,8,9,11,12,13,14,20,27,28,34,37
que se corresponden, más o menos (pero no), con las que aquí figuran http://msdn.microsoft.com/en-us/library/microsoft.visualbasic.powerpacks.printing.compatibility.vb6.printer.papersize.aspx
... y no avanzará más hasta llegar a... 28672, que es el primer tipo definido por el usuario, lo cual ocurre varias horas después de ejecución de macro.
El usuario debe haber creado antes los "tamaños de página definidos por el usuario" y tendrá por numeración... el 28672, 28673,... and 'so on'.
Si lo quieres asignar con el xlPaperUser:
Sub AsignaPapel()
Const xlPaperUser = 28673
With ActiveSheet.PageSetup
.PaperSize = xlPaperUser
End With
End Sub
Y si conoces de antemano el tamaño del papel, porque ya lo has creado, con esto imprimirás donde quieras:
With ActiveSheet.PageSetup
.LeftMargin = Application.CentimetersToPoints(xxx.xxxx)
.TopMargin = Application.CentimetersToPoints(xxx.xxxx)
.HeaderMargin = Application.CentimetersToPoints(0) 'Anula el encabezamiento
.FooterMargin = Application.CentimetersToPoints(0) 'Anula el pie
End With
ActiveWindow.SelectedSheets.PrintPreview
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Bueno, el papel mide lo que yo puse encima.
Voy a contar para qué es... Para rellenar automáticamente una quiniela!!!
Estoy con el prueba-error pero dando anchos y altos a las columnas y filas. Pero quería saber si hay la posibilidad de colocar milímetro a milímetro como con Word algo en una hoja de papel.
Aun así, gracias por contestar
Haber empezado por ahí...
Una actividad tan poco prosaica, merece su tiempo de dedicación:
Sub JugandoConLaRegla()
'Punto: unidad de medida que hace referencia al alto de un carácter impreso
'Un punto es igual a 1/72 de pulgada, o aproximadamente 1/28 de centímetro.
Columns(xxxx).ColumnWidth = Application.CentimetersToPoints(yyyyy)
'Convierte una medida de centímetros a puntos
'1 cm son... 28,3464566929134 puntos, y una hoja tipo A4 sin márgenes tiene sobre 720 píxeles de ancho (aunque no me salen bien las cuentas porque eso son ~25,4 cm).
'Con la medida que utilizar Excel por defecto, la hoja A4 tiene de ancho 102, que es más o menos, 0'2058823/cm.
'Columns(xxxx).ColumnWidth = Application.InchesToPoints(zzzzz)
'Convierte una medida de pulgadas a puntos
End Sub
-----------------------------------------------------------------
www.TrazEX.com (soluciones sobre Excel)
Gracias por el dato. Lo comprobaré a ver si me funciona.
Lo que pasa también es que, además, hay unos márgenes mínimos de la impresora (los de Excel ya los puse a cero) que debería tener en cuenta.
Total, la cosa es para imprimir en el trabajo (Ya sabes, que Excel trabaje para mí. Si Excel imprime las quinielas, menos tiempo gastaremos y más podremos dedicar a trabajar... o a urdir más planes alternativos, jaja) y siempre será la misma impresora.
Saludos