Imprimir página | Cerrar ventana

¿Cómo copio todos elementos de powerpoint a word?

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Otros Productos Microsoft
Descripción del foro: PowerPoint, Navision, Visio, FrontPage, InfoPath etc
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=81799
Fecha de impresión: 14/Noviembre/2019 a las 23:32


Tema: ¿Cómo copio todos elementos de powerpoint a word?
Publicado por: Josepo
Asunto: ¿Cómo copio todos elementos de powerpoint a word?
Fecha de publicación: 11/Mayo/2016 a las 10:06
Hola a todos.
Tengo que pasar unos manuales de powerpoint a word. Normalmente guardo todas las diapositivas en jpg y luego las inserto en el word y ya. 
Suelen ser unas 200 diapositivas. Normalmente me piden que meta unas 2 diapositivas por hoja de word. Así que quedan unas 100 hojas. Pero luego me piden que intente recortar márgenes superiores e inferiores de las diapositivas, quitar imágenes poco relevantes que ocupen espacio, ajustar espaciados entre parrafos, y cosillas similares para que en el word queden menos de 100 páginas.

Para el primero, lo que hice es guardar todas las diapositivas en jpg (con guardar como) y luego insertarlas en el word. Hasta ahí bien, pero claro luego tengo que ir a las 200 imágenes que quedan en las 100 hojas del word, e ir recortando los márgenes, y recortando partes de las imágenes (espaciados grandes, encabezados grandes,etc) para ir consiguiendo un word más reducido de unas 70 hojas. Bastante tedioso.

Había pensado en copiar todos los textos e imágenes de las diapositivas pero sin el diseño de la diapositiva, y pegarlos al word. Evidentemente tendría que revisar el word , pero creo que me ahorraría mucho tiempo. Sólo sería ir ajustando saltos de párrafo, comprobar que las imágenes no se han descuadrado, etc). 
Pero, ¿cómo copio todo el contenido del powerpoint sin copiar la diapositiva entera? 
Es decir, lo que quiero es copiar los cuadros de textos, imágenes, figuras,etc , es decir, el contenido de todas las diapositivas pero sin el fondo de la diapositiva.

¿Se os ocurre algo?

¿Quizás un VBA que recorra todas las diapositivas y seleccione todos los objetos que contenga? O igual alguna opción más sencilla que no estoy viendo



Respuestas:
Publicado por: Josepo
Fecha de publicación: 12/Mayo/2016 a las 12:35
Con este bucle se seleccionan los objetos de cada diapositiva pero pasa de uno a otro la selección, no se seleccionan todos
For Each sld In ActivePresentation.Slides
    For Each sh In sld.Shapes
    sld.Select
    Next
Next

¿A alguien se le ocurre como mantener todos seleccionados?


Publicado por: lbauluz
Fecha de publicación: 12/Mayo/2016 a las 15:35
Pues por programació no, pero lo que yo hago es (se podría hacer una macro en PPT que lo haga) ir a la diapositica, selecciona todo, agrupar

Selecciono todo (CTRL A) y lo pego en el Paint

si quiero recortar algo es ahora cuando lo hago, restringiendo el tamaño de la imagen

Selecciono todo del Paint y lo pego en el Word

Supongo que usando el (denostado) send keysse podría hacer una macro en PPT que haga todo eso, excepto recortar como tú quieres


-------------
El Búho es mi ídolo caido


Publicado por: Josepo
Fecha de publicación: 12/Mayo/2016 a las 17:48

Sí , pero eso te vale para una diapositiva nada más, no para 100 por ejemplo


Publicado por: lbauluz
Fecha de publicación: 12/Mayo/2016 a las 20:57
Por eso te digo que hay que hacer una macro. con el mismo bucle que has hecho tú, pero haciendo todo lo que te he dicho.

No es perfecto pero creo que se puede hacer


-------------
El Búho es mi ídolo caido


Publicado por: Josepo
Fecha de publicación: 13/Mayo/2016 a las 08:24

No te había entendido. He modificado la macro pero no consigo copiar todos los elementos, sólo el último

For Each sld In ActivePresentation.Slides
    For Each sh In sld.Shapes
    sld.Select
    SendKeys "^{e}"
    Next
Next

No controlo mucho de programación. No sé si habría que almacenarlo en un array y luego de alguna manera pegarlo en el word, no sé. 
En cuanto al tema de recortar no pasa nada, eso lógicamente lo ajusto yo manualmente después. 
Te agradezco mucho la ayuda si puedes orientarme en dar este último paso para lograr copiarlo todo, me quitaría mucho curro, la verdad. 


Publicado por: lbauluz
Fecha de publicación: 13/Mayo/2016 a las 17:24
A ver si esto te orienta

Sub kk()
    For n = 1 To ActivePresentation.Slides.Count
        ActivePresentation.Slides(n).Select             ' Activate present slide
        Set myDocument = ActivePresentation.Slides(n)   ' Assign to a variable the slide (perhaps is not necessary?)

        ActivePresentation.Slides(n).Shapes.Range(myDocument.Shapes.SelectAll).Group.Select ' Group the shapes together.
        ActivePresentation.Slides(n).Shapes.SelectAll   ' Sellect all the content
        ActiveWindow.Selection.Copy                     ' Copy to clipboard
      ' Now you need to copy from clipboard to Paint or what ever you whant
        
    Next n
End Sub


Con esto estoy tomando para cada diapositiva todo su contenido, agrupándolo y copiándolo en memoria,

Te queda como tarea pegar esa imagen que está en memoria en el sitio que te apetezca.

Un saludo

Luis


-------------
El Búho es mi ídolo caido


Publicado por: Josepo
Fecha de publicación: 14/Mayo/2016 a las 09:53
Gracias @Ibauluz , pero parece que hay un problema con el agrupamiento









Publicado por: lbauluz
Fecha de publicación: 15/Mayo/2016 a las 02:42
Probablemente tienes un solo objeto y por eso no puede agruparlo, deberías hacer algún tipo de gestión de errores para este caso..

-------------
El Búho es mi ídolo caido


Publicado por: Josepo
Fecha de publicación: 15/Mayo/2016 a las 10:57
Obviando esa línea hace lo mismo que el anterior código, recorre las diapositivas y deja seleccionado los objetos de la última.
Donde me indicas que debería poner una instrucción que haga lo que yo quiero, quiero poner que me lo copie en un word, pero no sé como hacerlo.
Entiendo que primero habría que abrirlo (pero fuera del bucle) y luego pegar en ese word. No sé si quizás habría que poner en el bucle:
- Pegar el contenido del clipboard en c:\carpeta\ejemplo.docx
- Crear un salto de línea al final de c:\carpeta\ejemplo.docx

¿Y así quizás vaya copiando y pegando los objetos de cada diapositiva seguidos, no?

Lo que no tengo ni idea es como se pone esa instrucción. He probado con Document. Open pero no sé hacerlo


Publicado por: Mihura
Fecha de publicación: 15/Mayo/2016 a las 11:03
Una cosa muuuuuuy útil es la grabadora de macros, .... la pones en funcionamiento, haces lo que quieres con los menús y comandos normales y cuando terminas cierras la macro, la examinas y ves las órdenes que has dado traducidas a VBA.

El problema puede ser la versión de powerpoint que uses, ya que a partir del 2.010 el impresentable equipo de desarrollo de PW la quitó. Si no tuvieras una versión anterior puedes mirar de instalártela, en otro equipo o en una máquina virtual, que para eso es comodísima.


-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: Mihura
Fecha de publicación: 15/Mayo/2016 a las 11:14
He abierto un PW en 2003, le he dado a la grabadora, he modificado el titulo, el subtitulo, he seleccionado todo y lo he copiado.

La macro creada es esta:

Sub Macro1()
'
' Macro grabada el 15/05/2016 por JESUS
'

    ActiveWindow.Selection.SlideRange.Shapes("Rectangle 2").Select
    ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Select
    ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Characters(Start:=1, Length:=0).Select
    With ActiveWindow.Selection.TextRange
        .Text = "TITULO"
        With .Font
            .Name = "Arial"
            .Size = 44
            .Bold = msoFalse
            .Italic = msoFalse
            .Underline = msoFalse
            .Shadow = msoFalse
            .Emboss = msoFalse
            .BaselineOffset = 0
            .AutoRotateNumbers = msoFalse
            .Color.SchemeColor = ppTitle
        End With
    End With
    ActiveWindow.Selection.SlideRange.Shapes("Rectangle 3").Select
    ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Select
    ActiveWindow.Selection.ShapeRange.TextFrame.TextRange.Characters(Start:=1, Length:=0).Select
    With ActiveWindow.Selection.TextRange
        .Text = "Subtitulo" + Chr$(CharCode:=9)
        With .Font
            .Name = "Arial"
            .Size = 32
            .Bold = msoFalse
            .Italic = msoFalse
            .Underline = msoFalse
            .Shadow = msoFalse
            .Emboss = msoFalse
            .BaselineOffset = 0
            .AutoRotateNumbers = msoFalse
            .Color.SchemeColor = ppForeground
        End With
    End With
    ActiveWindow.Selection.Unselect
    ActiveWindow.Selection.SlideRange.Shapes("Rectangle 3").Select
    ActiveWindow.Selection.Unselect
    ActiveWindow.Selection.SlideRange.Shapes.SelectAll
    ActiveWindow.Selection.Copy
End Sub


Si haces lo mismo con Word, verás que la orden de pegar es:

Selection.Paste

Supongo que ya tendrás abierto un Word por automatización ... ¿no?






-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: Josepo
Fecha de publicación: 15/Mayo/2016 a las 13:47
No tengo abierto ningún word, Jesús. Lo estoy haciendo desde VBA Powerpoint.

¿Lo que propones es hacerlo al revés? Desde VBA para word?


Publicado por: Mihura
Fecha de publicación: 15/Mayo/2016 a las 13:59
A eso me refiero, desde PW tendrás un Word abierto para irle pegando lo que vayas copiando ¿no?.

La verdad es que también podrías hacerlo al revés, desde el Word destino abrir el PW que quieres tratar... tanto da, que da lo mismo.

Busca automatización, te saldrán ejemplos de abrir/crear/tratar un word desde VBA.




-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: Josepo
Fecha de publicación: 15/Mayo/2016 a las 19:36
He mirado algo de automatizar y he retocado el código pero nada. Lo he dejado así:
   Dim objWdDoc As Word.Document
   Set objWdDoc = GetObject("c:\prueba\prueba.docx")
   
  For n = 1 To ActivePresentation.Slides.Count
        ActivePresentation.Slides(n).Select             ' Activate present slide
        Set myDocument = ActivePresentation.Slides(n)   ' Assign to a variable the slide (perhaps is not necessary?)

        'ActivePresentation.Slides(n).Shapes.Range(myDocument.Shapes.SelectAll).Group.Select ' Group the shapes together.
        ActivePresentation.Slides(n).Shapes.SelectAll   ' Sellect all the content
        ActiveWindow.Selection.Copy                     ' Copy to clipboard
      ' Now you need to copy from clipboard to Paint or what ever you whant
        objWdDoc.Selection.Paste
        
        
    Next n

No sé, quizás no sea una buena idea este hilo. Me pareció una buena idea al principio pero ahora no le veo solución


Publicado por: Mihura
Fecha de publicación: 15/Mayo/2016 a las 21:24
Para ser la primera vez que programo en PW no queda mal ....  LOL

Option Explicit

Private Sub CopiarWord()
Dim n As Integer, WDoc As Object

    Set WDoc = CreateObject("Word.Application")
    WDoc.Visible = True
    WDoc.documents.Add
    

    For n = 1 To ActivePresentation.Slides.Count
        ActivePresentation.Slides(n).Select             ' Activate present slide
        ActiveWindow.Selection.SlideRange.Shapes.SelectAll
        ActiveWindow.Selection.Copy                     ' Copy to clipboard
        
        WDoc.Selection.endkey Unit:=6  'wdStory
        If n > 1 Then WDoc.Selection.InsertBreak Type:=7         'wdPageBreak
        WDoc.Selection.Paste
    
    Next n
    
    WDoc.activedocument.saveas2 FileName:="C:\Temp\DocumentoDiapo1.docx"
    WDoc.Quit
    Set WDoc = Nothing

End Sub


Obviamente será muy mejorable.  Tongue





-------------
Jesús Mansilla Castells.
Saludos desde Móstoles.

http://www.accessaplicaciones.com" rel="nofollow - Access Aplicaciones
http://www.tecsys.es" rel="nofollow - Tecsys.es


Publicado por: Josepo
Fecha de publicación: 15/Mayo/2016 a las 21:57
Muchas gracias, así sale perfecto. Queda algo grande en cada hoja del word, no puedo redimensionarlo desde el word si no es objeto a objeto, se me sale por el margen de la derecha. No sé si se puede indicar en la instrucción de pegado que de alguna manera lo haga un poco más pequeño. 
Pero bueno, lo que es copiar el contenido de las diapositivas y pegarlo, lo hace perfectamente
Aplaudir



Imprimir página | Cerrar ventana