Buen día, necesito su ayuda
Tengo el siguiente detalle, copio un rango de datos en excel y lo paso a power point, intento moverlo en un área especifica de la diapositiva, pero no logro moverla......ayuda
------SELECCION DE RANGO------
Range("A4").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
---PEGADO EN POWER POINT
diapositiva.Shapes.PasteSpecial(Link:=True).Select
''''''''usando un codigo que se publico
Set mi_imagen = ActivePresentation.Slides(1).Shapes(1) "INTENTO CON EL NUMERO DE SHAPE EN LA PRESENTACION
'Set mi_imagen = ActivePresentation.Slides(1).Shapes("Objeto 2") '''INTENTO COMO NOMBRE DEL OBJETO EN LA PRESENTACION
With mi_imagen
.Left = 10
.Top = 10
End With
PD: mi_imagen esta declarada desde el inicio!
Pero no mueve la imagen al pegarla
Ayuda!
Adjunto | Tamaño |
---|---|
tabla_ppt.png | 9.75 KB |
referencias.png | 38.04 KB |
¿Cómo tienes declarada la variable mi_imagen?
Pues a mí si me funciona con shapes(1)
Set mi_imagen = ActivePresentation.Slides(1).Shapes(1)
¿te da algún error?
prueba a ponerlo de esta otra manera, utilizando la variable diapositiva:
Set mi_imagen = diapositiva.Shapes(1)
------
Ya sé Excel, pero necesito más.
Este es el codigo que estoy probando solo para mover la imagen, pero no funciona.... no manda ningun error
Dim mi_imagen As Shape
Sub Moverimagen()
NumDiapositiva = 1 ']
'<< VALIDAR SI SE ESTÁ EJECUTANDO POWERPOINT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>]
On Error Resume Next ']
Set PPT = GetObject(, "PowerPoint.Application") ']
If PPT Is Nothing Then
Set PPT = CreateObject("PowerPoint.Application") ']
PPT_en_Curso = True ']
End If
'ruta del archivo que abre
Set Presentacion = PPT.Presentations.Open("C:\............. \archivo.pptx")
'Set mi_imagen = ActivePresentation.Slides(1).Shapes(1) intento normal
'Set mi_imagen = ActivePresentation.Slides(1).Shapes("Rectangulo1") intento con el nombre
Set mi_imagen = diapositiva.Shapes(1) 'ultimo untento
With mi_imagen
.Left = 10
.Top = 10
End With
End Sub
Como has cargado el archivo en la variable Presentacion, vamos a utilizarla, no?
Con Presentacion.Slides(1).Shapes(1) a mí me funciona.
Si el shape se llama Rectangulo1, también funciona Presentacion.Slides(1).Shapes("Rectangulo1")
¿Qué te puede pasar?
Que ActivePresentation no se corresponda con Presentacion, por la razón que sea. Por ejemplo, porque haya otra presentación abierta que acapare el foco.
Que Slides(1) no sea la diapositiva con la que quieres trabajar. Lo suyo sería utilizar una inspección que te diga qué es el objeto Slides(1), pero muchas veces es más rápido escribir en la ventana Inmediato algo como debug.print Slides(1).name
Que haya otras shapes, y la que tú quieres mover no sea Shapes(1). La manera más rápida de mirar esto es abriendo el panel de selección en Powerpoint y ver qué tienes por ahí.
Por lo demás, mientras no adjuntes el archivo de powerpoint que te da problemas, no podemos hacer otra cosa que adivinar. El paso a paso que he puesto puede ser una guía para hacer un buen debugging.
Un saludo
Cron
gracias por tu comentario pero ya probe de todo, una diapositiva en blanco en el archivo y solo una imagen y justamente la nombro como se llama en el panel de seleccion....... en el archivo solo hay un slide y una diapositiva
¿porque no se mueve?!!!!!!!
Hola
He replicado tu ejemplo en el VBE de un Excel, con un PPT abierto. ¿Puede ser que haya algún problema en la definición de los objetos?
Partiendo de tener seleccionada la referencia a la librería de Powerpoint (esta sería nuestra primera aproximación, durante la programación. Después sustituiríamos todos los objetos Powerpoint por el genérico Object para que funcione en cualquier máquina), mi código es el siguiente:
Sub asdf()
Dim ppt As PowerPoint.Application
Dim presentation As PowerPoint.presentation
Dim imagen As PowerPoint.Shape
Set ppt = GetObject(, "Powerpoint.application")
Set presentation = ppt.ActivePresentation
Set imagen = presentation.Slides(1).Shapes(1)
imagen.Left = 100
imagen.Top = imagen.Top + 50
End Sub
Este código funciona perfectamente. Adáptalo como necesites.
Un saludo
Muchas gracias Cron.... probe el codigo y funciono bien, ahora estoy adaptando en la rutina para pasar varias tablas!
Gracias!
Pacomegia.. te agradezco tambien..
Saludos!