Word - Macro consume demasiada memoria

   
Vista:

Macro consume demasiada memoria

Publicado por TheRoot (2 intervenciones) el 01/06/2017 18:31:13
Buenos dias gente del foro, tengo un problema, en un documento WORD de 10,000 paginas debo crear un PDF por cada pagina, por lo que creé la siguiente macro:

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
Sub PDF()
'
' PDF Macro
'
'
    Dim numPaginas As Integer
    Dim pagToPDF As Integer
    Dim Ruta As String
    Dim NombrePagina As String
 
    Ruta = "C:\Garbage\PDF\"
 
    numPaginas = ActiveDocument.ComputeStatistics(wdStatisticPages)
 
    ChangeFileOpenDirectory Ruta
 
    For pagToPDF = 1 To numPaginas
        NombrePagina = Ruta & Right("00000" & Val(pagToPDF), 6) & ".pdf"
        ActiveDocument.ExportAsFixedFormat OutputFileName:= _
            NombrePagina, ExportFormat:=wdExportFormatPDF, _
            OpenAfterExport:=False, Range:= _
            wdExportFromTo, From:=pagToPDF, To:=pagToPDF
        ActiveDocument.Close
    Next pagToPDF
End Sub

El problema esta en que la maquina me indica que WORD usa demasiada memoria, con cada PDF creado veo en el Administrador de tareas que la RAM ocupada por WORD va en aumento hasta que me quedo sin memoria.

Imagino que esta creando en memoria una instancia a algun objeto o cache de lo creado en PDF pero no logro dar con la forma de liberar dicha memoria en cada iteracion del bucle.

¿Alguna idea (que no sea comprar mas RAM)?
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

Macro consume demasiada memoria

Publicado por Antoni Masana amasana@hotmail.com (184 intervenciones) el 02/06/2017 10:27:31
Puedes enviarme el fichero, asi podria investigar que le pasa.

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
Imágen de perfil de Antoni Masana

Macro consume demasiada memoria

Publicado por Antoni Masana (184 intervenciones) el 02/06/2017 10:44:19
Me he acordado de una cosa muy tonta.

Mientras se esta ejecutando la macro no se ejecuta nada más, como consecuencia esta enviando la orden de imprimir o crear PDF para cada página pero hasta que no termine la macro no se realizada la impresión.

La solución:
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
ub PDF()
'
' PDF Macro
'
'
    Dim numPaginas As Integer
    Dim pagToPDF As Integer
    Dim Ruta As String
    Dim NombrePagina As String
 
    Ruta = "C:\Garbage\PDF\"
 
    numPaginas = ActiveDocument.ComputeStatistics(wdStatisticPages)
 
    ChangeFileOpenDirectory Ruta
 
    For pagToPDF = 1 To numPaginas
        NombrePagina = Ruta & Right("00000" & Val(pagToPDF), 6) & ".pdf"
        ActiveDocument.ExportAsFixedFormat OutputFileName:=NombrePagina,
                                           ExportFormat:=wdExportFormatPDF, _
                                           OpenAfterExport:=False, _
                                           Range:=wdExportFromTo, _
                                           From:=pagToPDF, _
                                           To:=pagToPDF
        DoEvents
    Next pagToPDF
End Sub

En lugar del Close pones el DoEvents o incluso un par más y creo que problema solucionado. Creo.

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

Macro consume demasiada memoria

Publicado por TheRoot (2 intervenciones) el 02/06/2017 16:35:55
Gracias por la ayuda,

Al copiar el script se me paso (el CLOSE esta demas) ya que esa ultima instruccion cierra el documento y el script acaba ahi, era uno de los muchos intentos por cerrar objetos y liberar memoria.

He puesto DoEvents al final de la macro pero igual, ahora demora un poco mas pero la memoria sigue en aumento.

Cabe señalar que la generación de PDF si se da, puedo ver como se generan, pero al acabarse la memoria no termina con todas las paginas.

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
Imágen de perfil de Antoni Masana

Macro consume demasiada memoria

Publicado por Antoni Masana (184 intervenciones) el 05/06/2017 07:44:25
Puede que un DoEvents no sea suficiente y se tenga que ampliar

1
Tiempo=Timer+1 : Whie Tiempo > Timer : DoEvents : Wend

Con este código tardada al menos 10.000 segundos, Lo que significa 2 horas y 46 minutos y 40 segundos.

Quizas se podria hacer cada N páginas, se ha de calcular. De todas formas me sorprende un fichero tan grande, aunque no lo cuestiono.

Otra cosa que se me ocurre es hacer por ejemplo 100 páginas y esperar a que exista el fichero 100.pdf, lanzar 100 más y esperar a que exista el fichero 200.pdf y así no se le acumula el trabajo a la cola de impresión. y no llena la memoria porque si el envío es mas rapido que crear el PDF se genera una cola de impresión que se va comiendo la memoria.

Puedes subir el documento o enviarmelo y lo reviso.

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