Problema con macro para excel: Imprimir papel vs PDF

Aquí estoy molestándote otra vez.

Tengo un problema con unas macros para hojas excel.
Tengo 2 macros: Una para imprimir la hoja en pdf, y otra en papel.
Te explico la situación:
Si cuando yo abro el archivo, ejecuto la macro "Imprimir en papel" (ejecuta una impresión rápida en la impresora predeterminada), se ejecuta bien. Si después ejecuto la macro "Imprimir en PDF", también se ejecuta. Pero si después quiero volver a ejecutar la macro "Imprimir en papel", no se ejecuta, imprimiendo el documento en PDF.
Creo que esto se hace porque la haber ejecutado la macro imprimir en PDF, esta marca la impresora CUTE PDF como predeterminada, y por tanto, cuando después de esto yo quiero imprimir en papel, se imprime en PDF.
¿Cómo soluciono esto?

1 respuesta

Respuesta
1

Con esta función puedescambiar tu impresora predeterminada por tu printer.

Para saber la impresora activa puedes utilizar

Application. Activeprinter, recuerda que esto devuelve el nombre de la impresora con un texto adicional "en XXXX", por lo tanto puedes utilizar un if then else

if InStr(0, Application.ActivePrinter, "Nombre de tu impresora", vbTextCompare) = 0 then

'asignas tu impresora, porque esta activa la del pdf

Setdefaultprinter("Nombre de tu impresora")

end if

Este código es mio, pero la función no, esa la tome prestada.

Lo he tomado prestado asi que lo copio con el nombre del creador:

'--------------------------------------------------------- '

' SetDefaultPrinter '

' Código escrito originalmente por Juan M Afán de Ribera.

' Estás autorizado a utilizarlo dentro de una aplicación

' Siempre que esta nota de autor permanezca inalterada.

' En el caso de querer publicarlo en una página Web,

' Por favor, contactar con el autor en '

' [email protected] '

' Este código se brinda por cortesía de

' Juan M. Afán de Ribera '

Function SetDefaultPrinter(PrinterName As String) As Boolean

Dim wshNetwork As Object 'New wshNetwork
On Error GoTo err_SetDefaultPrinter

Set wshNetwork = CreateObject("WScript.Network")

wshNetwork.SetDefaultPrinter PrinterName

Set wshNetwork = Nothing

SetDefaultPrinter = True

err_SetDefaultPrinter:
End Function '---------------------------------------------------------

Hola experto y gracias por tu siempre inestimable ayuda.

Te comento.

Lo que yo busco es no tener que incluir el nombre de la impresora (papel) en el código de la macro, ya qeu pretendo usar el libro excel en varios ordenadores.

No me importa en el código de la macro incluir el nombre de la CutePDF, ya que este es genérico para todos los ordenadores (se puede descargar gratuitamente).

¿Una posible solución podría ser ver si la predeterminada es la de CutePDF, y entonces "desseleccionarla" para que la predeterminada fuera la de papel? ¿O algo así?

¿Puedes ayudarme en esto?

Muchas gracias.

Entonces lo que necesitas es lo siguiente pero combinado con lo que explique antes.

ImpresoraActual guardará la impresora activa (por si quieres dejar las cosas en su lugar al terminar de imprimir; entonces cuando termines asignaras con la función que explique nuevamente la impresora que estuvo activa en su momento.

Dim ImpresoraActual As String

ImpresoraActual = Application.ActivePrinter

Application.Dialogs(xlDialogPrinterSetup).Show

Cuando hagas esto, obtendrás un cuadro de dialogo que te listará las impresoras que tiene conectado el usuario, eliges una y das ok, automáticamente la impresora activa cambió, ahora ya puedes enviar la impresión...

Buenos días,

Quiero hacer lo siguiente:

Poner condición de que si la impresora predeterminada es la PDF, me salte cuadro de diálogo para seleccionar impresora. En cambio, si no es la PDF, se ejecute directamente la impresión en la printer predeterminada.

No entiendo el código que debo poner ya que me sale error en la línea que pongo en negrita (no entiendo ese código así que probablemente esté mal, lo que quiero hacer es que si en el nombre de la predeterminada detecta que hay las siglas PDF, entienda que la predeterminada es la pdf, y por tanto salga cuadro de diálogo).

Dim ImpresoraActual As String
ImpresoraActual = Application.ActivePrinter
If InStr(0, Application.ActivePrinter, "PDF", vbTextCompare) = 1 Then
'cuadro de diálogo para asignar impresora, porque esta activa la del pdf
Application.Dialogs(xlDialogPrinterSetup).Show
Else
ExecuteExcel4Macro "PRINT(1,,,1,,,,,,,,2,,,TRUE,,FALSE)"
End If

¿Puedes orientarme?

Gracias.

Carlos, necesito:

El Nombre de tu impresora PDF y el nombre de tu impresora física.

En la linea que me marcas en negrita, debes reemplazar PDF por el nombre de tu impresora PDF, la linea directamente pregunta si en el nombre de la impresora activa se encuentra la palabra PDF, si es asi, osea si esta activa la PDF entonces asignas la impresora física con xldialogPrinterSetup

If InStr(1, Application.ActivePrinter, "PDF", vbTextCompare) = 1 Then

Application.Dialogs(xlDialogPrinterSetup).Show

'y mandas tu impresión

end if

Espero que esto sirva, si no me envías tu fichero y veo que puede estar fallando.

Sigue sin funcionar.

No reconoce la coincidencia en el nombre del PDF.

No obstante, se me ha ocurrido otra forma de solucionarlo, a raíz que de lo que tú propones, que funcionara siempre que la impresora PDF sea CutePDF Writer en CPW2.

He puesto:

If Application.ActivePrinter = "CutePDF Writer en CPW2:" Then
Application.Dialogs(xlDialogPrinterSetup).Show

Funciona bien. ¿Cómo lo ves?

¿Crees que funcionará siempre que la PDF sea la PDF Writer, o cambiará en cada ordenador eso de "en CPW2"?

Si no cambia, con este código me valdría.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas