** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Otros Productos Microsoft
  Mensajes nuevos Mensajes nuevos RSS - ¿Cómo copio todos elementos de powerpoint a word?
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

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

 Responder Responder Página  12>
Autor
Mensaje
Josepo Ver desplegable
Asiduo
Asiduo


Unido: 25/Mayo/2006
Estado: Sin conexión
Puntos: 229
Enlace directo a este mensaje Tema: ¿Cómo copio todos elementos de powerpoint a word?
    Enviado: 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


Editado por Josepo - 11/Mayo/2016 a las 10:15
Arriba
Josepo Ver desplegable
Asiduo
Asiduo


Unido: 25/Mayo/2006
Estado: Sin conexión
Puntos: 229
Enlace directo a este mensaje Enviado: 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?
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Binghamton
Estado: en línea
Puntos: 3387
Enlace directo a este mensaje Enviado: 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
Estos son mis principios. Si no le gustan... tengo otros
Arriba
Josepo Ver desplegable
Asiduo
Asiduo


Unido: 25/Mayo/2006
Estado: Sin conexión
Puntos: 229
Enlace directo a este mensaje Enviado: 12/Mayo/2016 a las 17:48

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


Editado por lbauluz - 13/Mayo/2016 a las 16:53
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Binghamton
Estado: en línea
Puntos: 3387
Enlace directo a este mensaje Enviado: 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
Estos son mis principios. Si no le gustan... tengo otros
Arriba
Josepo Ver desplegable
Asiduo
Asiduo


Unido: 25/Mayo/2006
Estado: Sin conexión
Puntos: 229
Enlace directo a este mensaje Enviado: 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. 


Editado por lbauluz - 13/Mayo/2016 a las 16:54
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Binghamton
Estado: en línea
Puntos: 3387
Enlace directo a este mensaje Enviado: 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
Estos son mis principios. Si no le gustan... tengo otros
Arriba
Josepo Ver desplegable
Asiduo
Asiduo


Unido: 25/Mayo/2006
Estado: Sin conexión
Puntos: 229
Enlace directo a este mensaje Enviado: 14/Mayo/2016 a las 09:53
Gracias @Ibauluz , pero parece que hay un problema con el agrupamiento







Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Binghamton
Estado: en línea
Puntos: 3387
Enlace directo a este mensaje Enviado: 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..
Estos son mis principios. Si no le gustan... tengo otros
Arriba
Josepo Ver desplegable
Asiduo
Asiduo


Unido: 25/Mayo/2006
Estado: Sin conexión
Puntos: 229
Enlace directo a este mensaje Enviado: 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


Editado por Josepo - 15/Mayo/2016 a las 10:57
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11096
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11096
Enlace directo a este mensaje Enviado: 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?






Editado por Mihura - 15/Mayo/2016 a las 11:18
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Josepo Ver desplegable
Asiduo
Asiduo


Unido: 25/Mayo/2006
Estado: Sin conexión
Puntos: 229
Enlace directo a este mensaje Enviado: 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?
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 11096
Enlace directo a este mensaje Enviado: 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.

Access Aplicaciones
Tecsys.es
Arriba
Josepo Ver desplegable
Asiduo
Asiduo


Unido: 25/Mayo/2006
Estado: Sin conexión
Puntos: 229
Enlace directo a este mensaje Enviado: 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
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable