Excel - Usar BeforePrint para exportar en pdf antes de imprimir

 
Vista:
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Usar BeforePrint para exportar en pdf antes de imprimir

Publicado por Christian Villegas (10 intervenciones) el 12/12/2018 21:52:53
Hola gente, tengo un problema, lo que deseo hacer es, cuando un usuario abra un excel, y al momento de darle en imprimir (antes que imprima), quiero que una macro exporte el archivo en PDF en una ruta especifica.

Tengo una macro pero al momento de darle click en IMPRIMIR, se queda cargando, teniendo en cuenta que estoy haciendolo en un archivo de prueba donde no hay información pesada, y en la ruta de destino para el PDF exportado, se van todos los temporales de la impresión que son como 50, tambien va la exportación PDF que quiero, pero nunca imprime el excel, se congela y se termina cerrando.

Ayudenme gente!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Usar BeforePrint para exportar en pdf antes de imprimir

Publicado por Antoni Masana (2478 intervenciones) el 13/12/2018 06:41:09
¿Y?

No quisiera parecer quisquilloso pero creo que te has dejado un pequeño detalle, no has añadido el libro, y a menos que solo quieras que te acompañemos en el sentimiento en poco o mejor dicho en nada te podemos ayudar.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Usar BeforePrint para exportar en pdf antes de imprimir

Publicado por Christian (10 intervenciones) el 13/12/2018 15:53:44
Lo siento, olvide adjunta el libro, pero ya esta, lo acabo de adjuntar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Usar BeforePrint para exportar en pdf antes de imprimir

Publicado por Christian (10 intervenciones) el 13/12/2018 15:57:02
Lo que me estan pidiendo exactamente, es que en un excel cuando un usuario quiera imprirmir, automaticamente me genere un pdf (que sea transparente para el usuario) en una ruta especifica, conteniendo información de datos modificados, y con la información del usuario , hora y fecha de modificación, cosa que ya lo hice, pero cuando quiero exportarlo me bota muchos temp a la ruta de destino y el excel deja de funcionar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Usar BeforePrint para exportar en pdf antes de imprimir

Publicado por Antoni Masana (2478 intervenciones) el 14/12/2018 07:26:41
Adjunto el fichero con la macro modificada.

Adémas de los cambios para arreglar el problema he realizado algunas mejoras. Te cuento cuales y el por qué:

- Las asignaciones a B1, B2 y B3 directas sin variables intermedias, no son necesarias.
- El comando WITH mejora el rendimiento porque cada vez que pones SHEETS a de buscar la hoja. Es bueno conocer nuevos comandos.
- La y la fecha la asigno a una variable al principio porque el tiempo pasa inexorablemente y puede llegar a no coincidir lo que pones en la celdas y el nombre del fichero.

Que pasaria si cuando haces el primer FORMAT son las 13/12/2018 23:59:59.999999 y cuando haces el segundo a pasado una micra de segundo.

Y ahora a la solución del problema:

Cuando se ejecuta la línea de la MACRO: ThisWorkbook.ExportAsFixedFormat... provoca que se ejecute de nuevo el evento Workbook_BeforePrint y esto hace que entre en un bucle infinito hasta comerse todos los recursos de la máquina.

¿Como se detecta?

En la primera línea ejecutable del código pulsas F9.
Cuando se pulsa el botón imprimir ejecuta la macro en forma de depuración es decir se para donde pulsamos F9 y a partir de aquí iremos pulsando F8 para ir paso a paso hasta llegar a donde se genera el problema.
En este caso se ve que vuelve a llamar a la función.

¿Como se soluciona?

Desactivando la ejecución de eventos antes de grabar el PDF y activarlo después.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    Dim carpeta As String, archivo As String, _
        w_fecha1 As String, w_hora1 As String
 
    ' ---&--- En esta primera parte se exportaran los datos detallados
 
    w_fecha1 = Format(Now, "yyyymmdd")
    w_hora1 = Format(Now, "HHmmss")
 
    With Sheets("DatosUsuario")
        .Unprotect Password:="123123"
        .Range("B1").Value = Environ("computername")
        .Range("B2").Value = Environ("username")
        .Range("B3").Value = ActiveWorkbook.Path
        .Range("B4").Value = w_fecha1
        .Range("B5").Value = w_hora1
        .Protect Password:="123123"
    End With
 
    ' ---&--- En esta segunda parte se exportara en PDF el libro, con el nombre
    '         concatenado con la fecha y hora de edición. Si el usuario desea
    '         imprimir, solo podra el formato mas no la hoja bloqueada
 
    carpeta = "C:\Users\cvillegas\Documents\Carpeta de prueba Excel\"
    archivo = w_fecha1 & w_hora1 & " " & ActiveWorkbook.Name
 
    Worksheets("DatosUsuario").PageSetup.PrintArea = "$A$1:$B$5"
 
    Application.EnableEvents = Falso
    ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
                                     Filename:=carpeta & archivo & ".pdf", _
                                     Quality:=xlQualityStandard, _
                                     IncludeDocProperties:=True, _
                                     IgnorePrintAreas:=False
    Application.EnableEvents = True
End Sub


Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Usar BeforePrint para exportar en pdf antes de imprimir

Publicado por Christian (10 intervenciones) el 14/12/2018 13:41:49
Amigo muchisimas gracias por toda la explicación y el adjunto modificado, ahora entiendo todo, te lo agradezco bastante, me sirvió!!! Gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Usar BeforePrint para exportar en pdf antes de imprimir

Publicado por Christian (10 intervenciones) el 14/12/2018 13:43:41
Una ultima consulta, existe manera de yo incluir toda la información de la hoja "DatosUsuario" directamente en la exportación PDF sin necesidad de que este creada esa hoja? Esto con la finalidad que el usuario no lo vea, que le sea transparente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.136
Plata
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Usar BeforePrint para exportar en pdf antes de imprimir

Publicado por Andres Leonardo (1583 intervenciones) el 14/12/2018 14:52:14
crea la hoja antes de la exportacion.
y luego la eliminas... y es como si no existiera.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 17
Ha disminuido 1 puesto en Excel (en relación al último mes)
Gráfica de Excel

Usar BeforePrint para exportar en pdf antes de imprimir

Publicado por Christian (10 intervenciones) el 14/12/2018 15:12:36
Buena idea, gracias.

Utilice este comando

Worksheets.Add(After:=Worksheets(Worksheets.Count)).Name = "DatosUsuario"

Para crear la hoja al ultimo, y este comando para eliminarlo,

Sheets("DatosUsuario").Delete

y me funciono, pero tengo otra duda, cuando lo exporta en pdf no veo completo la información exportada, por lo que la celda no se ancho para que se vea todo. Hay alguna manera para que pueda verse completo?

Adjunto imagen de la exportación
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar