Imprimir desde un módulo VBA
Resuelto
Mistral_13200
Mensajes publicados
649
Estado
Miembro
-
Oz -
Oz -
Hola,
Hola a todos,
He creado un libro de Excel en el que tengo un módulo VBA para la impresión. Este libro está a disposición de varias decenas de usuarios. Funciona muy bien y es apreciado por todos. Sin embargo, se me pide que lo mejore permitiendo elegir la impresora (en caso de que varias impresoras estén conectadas a la computadora) o elegir la calidad de impresión. Para ello, me gustaría que en mi macro de impresión a continuación llamara y mostrara el cuadro de diálogo "Imprimir", ¡pero no logro hacerlo!
Independientemente de esta modificación, el libro y la impresión funcionan muy bien.
¿Puede ayudarme?
De antemano, gracias.
Mistral
Hola a todos,
He creado un libro de Excel en el que tengo un módulo VBA para la impresión. Este libro está a disposición de varias decenas de usuarios. Funciona muy bien y es apreciado por todos. Sin embargo, se me pide que lo mejore permitiendo elegir la impresora (en caso de que varias impresoras estén conectadas a la computadora) o elegir la calidad de impresión. Para ello, me gustaría que en mi macro de impresión a continuación llamara y mostrara el cuadro de diálogo "Imprimir", ¡pero no logro hacerlo!
Sub ImpresionTabla() Dim p As Integer 'Application.ScreenUpdating = False ' Bloquea la actualización de la pantalla. 'Application.EnableEvents = False ' Detiene la verificación. If Sheets("Bordereau").Range("A28").Value = "" Then ' Prueba si la primera celda utilizada, A28. MsgBox ("¡La tabla no ha sido completada!" & vbCrLf & " " & vbCrLf & "Por lo tanto, no hay nada que imprimir."), vbCritical, "Federación Trucmuche" Exit Sub End If 'Define el área completa Sheets("Tabla").PageSetup.PrintArea = "$A$1:$N$235" ' Parte de la hoja utilizada. p = Nb_LineaBdx ' Salta a la función Nb_LineaBdx p = Nb_PaginasBdx(p) ' Salta a la función Nb_PaginasBdxN2 With Sheets("Tabla") .Visible = True .PrintOut from:=1, To:=p .Visible = False End With Application.ScreenUpdating = True ' Restaura la actualización de la pantalla. Application.EnableEvents = True ' Restablece la verificación. End Sub ' Calcula y devuelve el N° de la última línea no vacía. Function Nb_LineaBdx() As Integer Dim I As Integer For I = 28 To 235 If Sheets("Tabla").Range("A" & I).Value = "" Then Exit For ' Prueba la primera celda vacía de la columna A. Next I Nb_LineaBdx = I - 1 End Function ' Calcula y devuelve el número de páginas. Function Nb_PaginasBdx(Lineas As Integer) As Integer Select Case Lineas Case 1 To 58: Nb_PaginasBdx = 1 Case 59 To 110: Nb_PaginasBdx = 2 Case 111 To 162: Nb_PaginasBdx = 3 Case 163 To 214: Nb_PaginasBdx = 4 Case Is > 214: Nb_PaginasBdx = 5 End Select End Function Independientemente de esta modificación, el libro y la impresión funcionan muy bien.
¿Puede ayudarme?
De antemano, gracias.
Mistral
37 respuestas
- 1
- 2
Siguiente
Hola,
Para elegir una impresora
y normalmente tienes el botón "propiedades de la impresora"
esta sintaxis quizás no funcione en red (yo estoy en un solo puesto) en ese caso habría que utilizar WMI... Dices.
Michel
Para elegir una impresora
Application.Dialogs(xlDialogPrint).Show
y normalmente tienes el botón "propiedades de la impresora"
esta sintaxis quizás no funcione en red (yo estoy en un solo puesto) en ese caso habría que utilizar WMI... Dices.
Michel
Hola Michel,
Gracias por tu respuesta y por tu rapidez.
He hecho una prueba en un simple libro y funciona correctamente, al menos para las propiedades de la impresora. Me queda probar esto con varias impresoras.
Sin embargo, no consigo integrar esta línea en mi módulo mientras conservo el cálculo del número de páginas a imprimir.
¿Tienes alguna idea?
Atentamente,
Mistral
Gracias por tu respuesta y por tu rapidez.
He hecho una prueba en un simple libro y funciona correctamente, al menos para las propiedades de la impresora. Me queda probar esto con varias impresoras.
Sin embargo, no consigo integrar esta línea en mi módulo mientras conservo el cálculo del número de páginas a imprimir.
¿Tienes alguna idea?
Atentamente,
Mistral
Re,
De hecho, tengo muchas dificultades para entender todos los argumentos (15 en total) de la instrucción:
Consigo validar el número de páginas a imprimir (de 2 a [p]) así como el número de copias (7), pero no logro validar la opción "Páginas" y, sin embargo, pongo bien el décimoquinto argumento en 1.
¿Tendrías alguna idea o solución que me propongas?
Cordialmente
Mistral
De hecho, tengo muchas dificultades para entender todos los argumentos (15 en total) de la instrucción:
Application.Dialogs(xlDialogPrint).Show(, 2, [p], 7, , , , , , , , , , , 1)
Consigo validar el número de páginas a imprimir (de 2 a [p]) así como el número de copias (7), pero no logro validar la opción "Páginas" y, sin embargo, pongo bien el décimoquinto argumento en 1.
¿Tendrías alguna idea o solución que me propongas?
Cordialmente
Mistral
Hola,
Intenta con este código que te permite elegir la impresora (clic en OK para validar la selección):
O con esto:
El Pingüino
Intenta con este código que te permite elegir la impresora (clic en OK para validar la selección):
Application.Dialogs(Excel.xlBuiltInDialog.xlDialogPrinterSetup).ShowY en tu código recuperas el nombre de la impresora activa que colocas como argumento adicional de
PrintOut .PrintOut from:=1, To:=p .....
O con esto:
Sub choix_imprimante imprimante = Application.Dialogs(xlDialogPrinterSetup).Show Application.ActivePrinter = imprimante End SubSaludos.
El Pingüino
Hola Le Pingou,
Primero que nada, gracias por interesarte en mi problema.
Quise probar las dos soluciones propuestas, pero debo reconocer que me estoy perdiendo un poco.
En la primera, efectivamente se abre la ventana de selección de la impresora, puedo elegirla y configurar la impresión con la tecla "Configurar", pero no veo cómo recuperar el nombre de la impresora ni cómo insertarlo después.
En la segunda tengo un error 1004: El método ActivePrinter del objeto Application ha fallado.
¿Puedes ayudarme, por favor?
Atentamente
Mistral
Primero que nada, gracias por interesarte en mi problema.
Quise probar las dos soluciones propuestas, pero debo reconocer que me estoy perdiendo un poco.
En la primera, efectivamente se abre la ventana de selección de la impresora, puedo elegirla y configurar la impresión con la tecla "Configurar", pero no veo cómo recuperar el nombre de la impresora ni cómo insertarlo después.
En la segunda tengo un error 1004: El método ActivePrinter del objeto Application ha fallado.
¿Puedes ayudarme, por favor?
Atentamente
Mistral
Hola,
La instrucción dada por Le Pingou :
Respuesta editada para la adición de ImpresoraInicial que permite restablecer los parámetros predeterminados......
La instrucción dada por Le Pingou :
imprimante = Application.Dialogs(xlDialogPrinterSetup).Showdevuelve "verdadero" o "falso". Verdadero y falso no son nombres de impresora (;-)) te recomiendo :
Sub elección_impresora() Dim impresora As String, ImpresoraInicial As String ImpresoraInicial = Application.ActivePrinter Application.Dialogs(xlDialogPrinterSetup).Show impresora = Application.ActivePrinter MsgBox impresora Application.ActivePrinter = ImpresoraInicial End Sub
Respuesta editada para la adición de ImpresoraInicial que permite restablecer los parámetros predeterminados......
Hola Mistral_13200,
Sí, puedo ayudarte, es difícil responder sin ver el código que has creado.. !
Nota: en cuanto a la primera, no he dicho la tecla [Configurar] sino: haz clic en Aceptar para validar la opción, lo cual es diferente.
Saludos.
El Pingüino
Sí, puedo ayudarte, es difícil responder sin ver el código que has creado.. !
Nota: en cuanto a la primera, no he dicho la tecla [Configurar] sino: haz clic en Aceptar para validar la opción, lo cual es diferente.
Saludos.
El Pingüino
El Pingou,
Pijaku
Hola a los dos,
Gracias por dedicar su tiempo a resolver mi problema.
Todo el código de mi macro está en mi primer mensaje. Solo recordaría que este código funciona perfectamente tal como está. Sin embargo, algunos usuarios me piden que lo modifique para poder elegir la impresora y la calidad de impresión.
He entendido que hay que validar la elección de la impresora con OK, simplemente quería decir que también se podría intervenir en los parámetros de la impresora si se desea.
Es en la integración de la impresora predeterminada en mi macro donde me atasco y es precisamente ahí donde necesito su ayuda.
Ahora, si ustedes consideran que la instrucción
He intentado:
Pero ahí me atoro en la forma de validar la opción de página de la ventana "Imprimir". Sé recuperar el Nb de página y el Nb de copias y eso es indispensable para imprimir solo el Nb de página necesario.
De todas maneras, muchas gracias a los dos.
Atentamente
Mistral
Pijaku
Hola a los dos,
Gracias por dedicar su tiempo a resolver mi problema.
Todo el código de mi macro está en mi primer mensaje. Solo recordaría que este código funciona perfectamente tal como está. Sin embargo, algunos usuarios me piden que lo modifique para poder elegir la impresora y la calidad de impresión.
He entendido que hay que validar la elección de la impresora con OK, simplemente quería decir que también se podría intervenir en los parámetros de la impresora si se desea.
Es en la integración de la impresora predeterminada en mi macro donde me atasco y es precisamente ahí donde necesito su ayuda.
Ahora, si ustedes consideran que la instrucción
PrintOutno es adecuada, no tengo nada en contra de cambiarla, pero no sé por cuál.
He intentado:
Application.Dialogs(xlDialogPrint).Show(, 2, [p], 7, , , , , , , , , , , 1)
Pero ahí me atoro en la forma de validar la opción de página de la ventana "Imprimir". Sé recuperar el Nb de página y el Nb de copias y eso es indispensable para imprimir solo el Nb de página necesario.
De todas maneras, muchas gracias a los dos.
Atentamente
Mistral
Hola,
Sí, pero no es el código con la corrección el que no funciona.
En este caso, las líneas de código que debes tener justo después de la línea:
Nota: en el cuadro de diálogo eliges la impresora y validas con OK.
--
Saludos.
El Pingüino
Sí, pero no es el código con la corrección el que no funciona.
En este caso, las líneas de código que debes tener justo después de la línea:
p = Nb_PagesBdx(p):
Application.Dialogs(Excel.XlBuiltInDialog.xlDialogPrinterSetup).Show Nom = ActivePrinter With Sheets("Tableau") .Visible = True .PrintOut from:=1, To:=p, ActivePrinter:=Nom .Visible = False End With Nota: en el cuadro de diálogo eliges la impresora y validas con OK.
--
Saludos.
El Pingüino
Hola a todos,
Por casualidad
No he encontrado ayuda sobre tus 15 argumentos (...?...) y no entiendo este 1.... cuando hablas de "hojas", ¿te refieres a hojas dentro de una "tabla" de Excel?
Para encontrar el número de hojas por tabla, encontré esta instrucción en otro sitio
y para imprimir:
pero....
--
Michel
Por casualidad
No he encontrado ayuda sobre tus 15 argumentos (...?...) y no entiendo este 1.... cuando hablas de "hojas", ¿te refieres a hojas dentro de una "tabla" de Excel?
Para encontrar el número de hojas por tabla, encontré esta instrucción en otro sitio
ExecuteExcel4Macro("GET.DOCUMENT(50)") y para imprimir:
FeuilN.PrintOut From:=1 To:=ExecuteExcel4Macro("GET.DOCUMENT(50)" pero....
--
Michel
Hola Michel,
La instrucción:
Application.Dialogs(xlDialogPrint).Show(, 1, [p], 7, , , , , , , , , , , 1)
tiene 15 argumentos de configuración posibles que son:
range_num, from, to, copies, draft, preview, print_what, color, feed, quality, y_resolution, selection, printer_text, print_to_file, collate
Puedo configurar sin problema las páginas que deseo imprimir (de 1 a p) y el número de ejemplares a imprimir (7), ver el ejemplo anterior, pero no logro validar la opción de páginas en la parte "Rango" del cuadro de diálogo Imprimir, siempre queda en "Todo". Por lo tanto, imprimo toda la hoja del libro, es decir, 25 páginas.
Atentamente
Mistral
La instrucción:
Application.Dialogs(xlDialogPrint).Show(, 1, [p], 7, , , , , , , , , , , 1)
tiene 15 argumentos de configuración posibles que son:
range_num, from, to, copies, draft, preview, print_what, color, feed, quality, y_resolution, selection, printer_text, print_to_file, collate
Puedo configurar sin problema las páginas que deseo imprimir (de 1 a p) y el número de ejemplares a imprimir (7), ver el ejemplo anterior, pero no logro validar la opción de páginas en la parte "Rango" del cuadro de diálogo Imprimir, siempre queda en "Todo". Por lo tanto, imprimo toda la hoja del libro, es decir, 25 páginas.
Atentamente
Mistral
Hola Mistral_13200,
Una de las soluciones está aquí: https://forums.commentcamarche.net/forum/affich-21020404-imprimer-depuis-un-module-vba#12
Lo he probado y funciona.
¿Es posible saber si para ustedes está en orden?
Saludos.
El Pingüino
Una de las soluciones está aquí: https://forums.commentcamarche.net/forum/affich-21020404-imprimer-depuis-un-module-vba#12
Lo he probado y funciona.
¿Es posible saber si para ustedes está en orden?
Saludos.
El Pingüino
porque "p" es una variable, es el resultado del cálculo del número de páginas a imprimir.
Para ser más preciso, en la parte Alcance de la ventana Imprimir hay dos opciones: "Todo" y "Página(s)" quiero cambiar de "Todo" a "Página(s)" y no puedo.
Para ser más preciso, en la parte Alcance de la ventana Imprimir hay dos opciones: "Todo" y "Página(s)" quiero cambiar de "Todo" a "Página(s)" y no puedo.
Estoy un poco perdido en medio de todos estos mensajes, pero he respondido a tu propuesta, quizás no en el orden correcto y te pido disculpas.
Estoy de acuerdo, las variables están respetadas.
Aparentemente, solo queda, más fácil de decir que de hacer, poder modificar los parámetros de impresión como la calidad Normal/Borrador o N&B/Color.
Estoy de acuerdo, las variables están respetadas.
Aparentemente, solo queda, más fácil de decir que de hacer, poder modificar los parámetros de impresión como la calidad Normal/Borrador o N&B/Color.
Re El Pingüino,
Parece que efectivamente funciona la impresora, ya que está bien reconocida como la predeterminada. ¡Eso ya es algo bueno!
Sin embargo, si cambio la calidad de impresión o si elijo imprimir en B/N o en color utilizando el botón "Configurar" de la ventana de diálogo, no pasa nada y, sin embargo, confirmo correctamente con Ok.
De hecho, diría que mantengo los parámetros de impresión de la última configuración manual.
No entiendo nada...
Atentamente
Mistral
Parece que efectivamente funciona la impresora, ya que está bien reconocida como la predeterminada. ¡Eso ya es algo bueno!
Sin embargo, si cambio la calidad de impresión o si elijo imprimir en B/N o en color utilizando el botón "Configurar" de la ventana de diálogo, no pasa nada y, sin embargo, confirmo correctamente con Ok.
De hecho, diría que mantengo los parámetros de impresión de la última configuración manual.
No entiendo nada...
Atentamente
Mistral
Hola,
Sí, parece que es más fácil decirlo que hacerlo, poder modificar los parámetros de impresión como la calidad Normal/Borrador o N&B/Color y para que eso funcione hay que pasar los parámetros elegidos al procedimiento.
¿Puede mencionar exactamente qué parámetros serán permitidos para el usuario?
--
Saludos.
El Pingüino
Sí, parece que es más fácil decirlo que hacerlo, poder modificar los parámetros de impresión como la calidad Normal/Borrador o N&B/Color y para que eso funcione hay que pasar los parámetros elegidos al procedimiento.
¿Puede mencionar exactamente qué parámetros serán permitidos para el usuario?
--
Saludos.
El Pingüino
Hola Mistral_13200,
Acabo de realizar pruebas con el código que le propuse, cambiando los diversos valores de configuración, negro/blanco, colores, orientación (Vertical/Horizontales), etc. y todo funciona perfectamente con el código tal como está.
--
Saludos.
El Pingüino
Acabo de realizar pruebas con el código que le propuse, cambiando los diversos valores de configuración, negro/blanco, colores, orientación (Vertical/Horizontales), etc. y todo funciona perfectamente con el código tal como está.
--
Saludos.
El Pingüino
Hola Le Pingou,
Yo también hice otras pruebas anoche en otra computadora y otra impresora y efectivamente pude cambiar la calidad de impresión y el color. Desafortunadamente, en el club no tengo impresoras en red...
Voy a averiguar por qué en mi impresora color me quedo en B/N???
Cuando haya solucionado mi problema y si me lo permites, me volveré a poner en contacto contigo si tengo más preguntas.
Una vez más, muchas gracias a los tres por su ayuda.
Atentamente
Mistral
PD: Estaré ausente hasta el 21/03
Yo también hice otras pruebas anoche en otra computadora y otra impresora y efectivamente pude cambiar la calidad de impresión y el color. Desafortunadamente, en el club no tengo impresoras en red...
Voy a averiguar por qué en mi impresora color me quedo en B/N???
Cuando haya solucionado mi problema y si me lo permites, me volveré a poner en contacto contigo si tengo más preguntas.
Una vez más, muchas gracias a los tres por su ayuda.
Atentamente
Mistral
PD: Estaré ausente hasta el 21/03
Re,
Es exactamente lo que acabo de hacer y el problema persiste.
A continuación, el código completo con el que realizo mis pruebas y por el cual no creo haber cometido un error.
Si ves alguna anomalía, gracias por señalármelo.
Desahogarme no me hará daño...
Cordialmente
Mistral
Es exactamente lo que acabo de hacer y el problema persiste.
A continuación, el código completo con el que realizo mis pruebas y por el cual no creo haber cometido un error.
Sub ImpressionTableau() Dim p As Integer Application.ScreenUpdating = False ' Bloquea la actualización de la pantalla. Application.EnableEvents = False ' Detiene la revisión. If Sheets("Tableau").Range("A28").Value = "" Then ' Prueba si la primera celda utilizada, A28. MsgBox ("¡El Tabla no ha sido ingresado!" & vbCrLf & " " & vbCrLf & "Por lo tanto, no hay nada que imprimir."), vbCritical, "Federación Trucmuche" Exit Sub End If 'Define el área completa Sheets("Tableau").PageSetup.PrintArea = "$A$1:$N$235" ' Parte de la hoja utilizada. p = Nb_LigneBdx ' Salta a la función Nb_LigneBdx p = Nb_PagesBdx(p) ' Salta a la función Nb_PagesBdx 'p = 9 If Application.Dialogs(Excel.XlBuiltInDialog.xlDialogPrinterSetup).Show = False Then GoTo Line1 Else Nom = ActivePrinter With Sheets("Tableau") .Visible = True .PrintOut from:=1, To:=p, ActivePrinter:=Nom '.Visible = False 'A poner de nuevo en la versión definitiva. End With End If Line1: Application.ScreenUpdating = True ' Restaura la actualización de la pantalla. Application.EnableEvents = True ' Reestablecimiento del servicio de revisión. End Sub ' Calcula y devuelve el número de la última línea no vacía. Function Nb_LigneBdx() As Integer Dim I As Integer For I = 28 To 235 If Sheets("Tableau").Range("B" & I).Value = "" Then Exit For ' Prueba la primera celda vacía de la columna A. Next I Nb_LigneBdx = I - 1 End Function ' Calcula y devuelve el número de páginas. Function Nb_PagesBdx(Lignes As Integer) As Integer Select Case Lignes Case 1 To 58: Nb_PagesBdx = 1 Case 59 To 110: Nb_PagesBdx = 2 Case 111 To 162: Nb_PagesBdx = 3 Case 163 To 214: Nb_PagesBdx = 4 Case Is > 214: Nb_PagesBdx = 5 End Select End Function Si ves alguna anomalía, gracias por señalármelo.
Desahogarme no me hará daño...
Cordialmente
Mistral
Hola,
La parte que toca a la impresora es correcta.
Para evitar el [GoTo Line1] lo escribiría de esta manera:
Nota: para su impresora, asegúrese de que la modificación de los parámetros se tenga en cuenta directamente sin pasar por el procedimiento VBA.
--
Saludos.
El Pingüino
La parte que toca a la impresora es correcta.
Para evitar el [GoTo Line1] lo escribiría de esta manera:
If Application.Dialogs(Excel.XlBuiltInDialog.xlDialogPrinterSetup).Show = True Then Nom = ActivePrinter With Sheets("Tableau") .Visible = True .PrintOut from:=1, To:=p, ActivePrinter:=Nom '.Visible = False 'A reponer en la versión definitiva. End With End If Nota: para su impresora, asegúrese de que la modificación de los parámetros se tenga en cuenta directamente sin pasar por el procedimiento VBA.
--
Saludos.
El Pingüino
Hola L e Pingou,
Vuelvo a la carga porque aún no funciona. He reinstalado mi impresora y funciona con normalidad. Si realizo pruebas de impresión manualmente desde Archivo/Imprimir, imprimo bien en B/N o en color según mis elecciones. Lo mismo para la calidad de impresión Normal/Borrador.
Sin embargo, cuando hago pruebas utilizando la macro, tengo dos problemas (En ese momento, la impresora está configurada en color/Normal):
Primer intento: Inicio la impresión con el botón y valido la elección por OK sin cambiar nada. La impresión es en B/N aunque la impresora estaba configurada en color y se mantuvo así. ¿Por qué?
Segundo intento: Inicio la impresión y configuro la impresión en B/N y luego valido por OK. La impresión se realiza correctamente en B/N (la impresora está OK, verificado por Archivo/Imprimir) pero aparece el segundo problema, que es que tengo dos líneas punteadas que aparecen en el borde derecho de las celdas de las columnas G y N. ¿Por qué?
Tercer intento: Inicio la impresión y configuro la impresión en Color, luego valido por OK. La impresión se realiza en B/N aunque la impresora ha cambiado a color (la impresora está OK, verificado por Archivo/Imprimir)!!!
Todas estas pruebas se realizaron en el libro cuyo enlace está a continuación:
http://www.cijoint.fr/cjlink.php?file=cj201103/cij3nbfyED.xls
¿Puedes ayudarme porque realmente ya no entiendo nada?
Gracias de antemano.
Atentamente
Mistral
Vuelvo a la carga porque aún no funciona. He reinstalado mi impresora y funciona con normalidad. Si realizo pruebas de impresión manualmente desde Archivo/Imprimir, imprimo bien en B/N o en color según mis elecciones. Lo mismo para la calidad de impresión Normal/Borrador.
Sin embargo, cuando hago pruebas utilizando la macro, tengo dos problemas (En ese momento, la impresora está configurada en color/Normal):
Primer intento: Inicio la impresión con el botón y valido la elección por OK sin cambiar nada. La impresión es en B/N aunque la impresora estaba configurada en color y se mantuvo así. ¿Por qué?
Segundo intento: Inicio la impresión y configuro la impresión en B/N y luego valido por OK. La impresión se realiza correctamente en B/N (la impresora está OK, verificado por Archivo/Imprimir) pero aparece el segundo problema, que es que tengo dos líneas punteadas que aparecen en el borde derecho de las celdas de las columnas G y N. ¿Por qué?
Tercer intento: Inicio la impresión y configuro la impresión en Color, luego valido por OK. La impresión se realiza en B/N aunque la impresora ha cambiado a color (la impresora está OK, verificado por Archivo/Imprimir)!!!
Todas estas pruebas se realizaron en el libro cuyo enlace está a continuación:
http://www.cijoint.fr/cjlink.php?file=cj201103/cij3nbfyED.xls
¿Puedes ayudarme porque realmente ya no entiendo nada?
Gracias de antemano.
Atentamente
Mistral
- 1
- 2
Siguiente