Bueno, pues lo primero es referirte a la imagen, podría tener este aspecto (he puesto diapositiva 1 y objeto shape 1, en tu caso será otra cosa)
Dim mi_imagen As Shape
Set mi_imagen = ActivePresentation.Slides(1).Shapes(1)
y luego con la imagen haz lo que quieras
With mi_imagen .Left = 150 .Top = 55 End With
Para recortar la imagen utiliza la propiedad PictureFormat del objeto Shape, que te da acceso a características específicas de las imágenes.
por ejemplo:
With mi_imagen.PictureFormat
.CropTop = 20
.CropLeft = 20
End With
Un truco: Aunque PowerPoint no tiene grabador de macros, las imágenes las trata igual que en Excel, así que puedes grabar una macro en Excel que ajuste tu imagen para ver cómo lo hace, y luego lo adaptas a PowerPoint
paco gracias por tu ayuda no lo huviera logrado sin tu ayuda
pero como le haria para que realizara lo mismo en dos imagenes ,solo que la otra imagen lleva un corte y ajuste distinto
de echo tengo que hacer esto en 28 slides cada slide tiene 2 imagenes y entodos los slides ua imagn lleva la misma posicion y corte y la segunda lleva otra posicion y corte y en todas haria lo mismo es posible esto paco
El truco está en los índices de las colecciones, lo que quieres es recorrer una colección de elementos
puedes hacerlo a mano
Slides(1)
Slides(2)
Slides(3)
....
para las formas, pues igual
Shapes(1)
Shapes(2)
o puedes recorrer toda la colección con un bucle con un For Each
por ejemplo:
Sub test01()
' www.necesitomas.com (para que te acuerdes de mí cuando lo veas en el futuro)
Dim mi_Diapositiva As Slide
Dim mi_imagen As Shape
For Each mi_Diapositiva In ActivePresentation.Slides
Set mi_imagen = mi_Diapositiva.Shapes(1)
' y aquí haces lo que sea con imagen 1 de la presentación actual
With mi_imagen
.Left = 150
.Top = 55
End With
With mi_imagen.PictureFormat
.CropTop = 20
.CropLeft = 20
End With
Set mi_imagen = mi_Diapositiva.Shapes(2)
' y aquí haces lo que sea con imagen 2 de la presentación actual
With mi_imagen
.Left = 550
.Top = 55
End With
With mi_imagen.PictureFormat
.CropTop = 140
.CropLeft = 180
End With
Next
End Sub
Con esto yo creo que tienes la idea de cómo se hace, luego tendrás que ver qué número es cada imagen
Puede que no en todas las diapositivas la imagen se llamen igual o tengan el mismo índice. Depende de mil cosas
Por si te sirve también de ayuda, cada imagen tiene un nombre (será Picture 1, PIcture 28, ...) y también puedes utilizar ese nombre para referirte a un elemento de la colección
Shapes("Picture 28")
Si no sigue ninguna lógica, siempre puedes referirte al objeto seleccionado con
ActiveWindow.Selection.ShapeRange.Left=100
aunque tendrías que ir seleccionando a mano las cosas
Gracias ya identifique porque me mando falla la macro ,bueno no en si fallas, realmente aqui es donde me gustaria me volvieras apoyar,ya que mis slides tienen textos ,son como 10 slides cada uno con texto distinto y como puedo hacer para que la macro no considere estos textos?
me gustaria que la macro no me considerara estos textos como imagen o shape , ya que ahi es donde se detiene
En Power Point todo son Shapes, porque los textos están dentro de cuadros de texto, no hay párrafos como en Word ni celdas como en Excel. En Power point el contenedor es una forma
Bueno, pues lo primero es referirte a la imagen, podría tener este aspecto (he puesto diapositiva 1 y objeto shape 1, en tu caso será otra cosa)
Dim mi_imagen As Shape
Set mi_imagen = ActivePresentation.Slides(1).Shapes(1)
y luego con la imagen haz lo que quieras
With mi_imagen
.Left = 150
.Top = 55
End With
Un truco: Aunque PowerPoint no tiene grabador de macros, las imágenes las trata igual que en Excel, así que puedes grabar una macro en Excel que ajuste tu imagen para ver cómo lo hace, y luego lo adaptas a PowerPoint
------
Ya sé Excel, pero necesito más.
me sorprendes eres un genio gracias si funciono de maravillas
paco gracias por tu ayuda no lo huviera logrado sin tu ayuda
pero como le haria para que realizara lo mismo en dos imagenes ,solo que la otra imagen lleva un corte y ajuste distinto
de echo tengo que hacer esto en 28 slides cada slide tiene 2 imagenes y entodos los slides ua imagn lleva la misma posicion y corte y la segunda lleva otra posicion y corte y en todas haria lo mismo es posible esto paco
saludos..............
El truco está en los índices de las colecciones, lo que quieres es recorrer una colección de elementos
puedes hacerlo a mano
Slides(1)
Slides(2)
Slides(3)
....
para las formas, pues igual
Shapes(1)
Shapes(2)
o puedes recorrer toda la colección con un bucle con un For Each
por ejemplo:
Sub test01()
' www.necesitomas.com (para que te acuerdes de mí cuando lo veas en el futuro)
Dim mi_Diapositiva As Slide
Dim mi_imagen As Shape
For Each mi_Diapositiva In ActivePresentation.Slides
Set mi_imagen = mi_Diapositiva.Shapes(1)
' y aquí haces lo que sea con imagen 1 de la presentación actual
With mi_imagen
.Left = 150
.Top = 55
End With
With mi_imagen.PictureFormat
.CropTop = 20
.CropLeft = 20
End With
Set mi_imagen = mi_Diapositiva.Shapes(2)
' y aquí haces lo que sea con imagen 2 de la presentación actual
With mi_imagen
.Left = 550
.Top = 55
End With
With mi_imagen.PictureFormat
.CropTop = 140
.CropLeft = 180
End With
Next
End Sub
Con esto yo creo que tienes la idea de cómo se hace, luego tendrás que ver qué número es cada imagen
Puede que no en todas las diapositivas la imagen se llamen igual o tengan el mismo índice. Depende de mil cosas
Por si te sirve también de ayuda, cada imagen tiene un nombre (será Picture 1, PIcture 28, ...) y también puedes utilizar ese nombre para referirte a un elemento de la colección
Shapes("Picture 28")
Si no sigue ninguna lógica, siempre puedes referirte al objeto seleccionado con
ActiveWindow.Selection.ShapeRange.Left=100
aunque tendrías que ir seleccionando a mano las cosas
------
Ya sé Excel, pero necesito más.
ya me funciono en las dos imagenes dela primeraa slide me ajusta y corta ,pero mas en el resto de los slides no hace nada
te anexo como lo tengo
Sub test01()
' www.necesitomas.com (para que te acuerdes de mí cuando lo veas en el futuro)
Dim mi_Diapositiva As Slide
Dim mi_imagen As Shape
For Each mi_Diapositiva In ActivePresentation.Slides
Set mi_imagen = mi_Diapositiva.Shapes(1)
' y aquí haces lo que sea con imagen 1 de la presentación actual
With mi_imagen
.Height = 925
.ScaleWidth 0.935, msoFalse, msoScaleFromTopLeft
.Left = 0
.Top = 85
End With
'Para recortar la imagen utiliza la propiedad PictureFormat del objeto Shape,
'que te da acceso a características específicas de las imágenes.
'por ejemplo:
With mi_imagen.PictureFormat
.CropTop = 365
.CropLeft = 5
.CropRight = 5
.CropBottom = 210
End With
Set mi_imagen = mi_Diapositiva.Shapes(2)
' y aquí haces lo que sea con imagen 2 de la presentación actual
With mi_imagen
'.Height = 1200
.Width = 1650
.Left = 209
.Top = -270
End With
'Para recortar la imagen utiliza la propiedad PictureFormat del objeto Shape,
'que te da acceso a características específicas de las imágenes.
'por ejemplo:
With mi_imagen.PictureFormat
.CropTop = 350 'arriba
.CropLeft = 205 'izq
.CropRight = 850 'derecha
.CropBottom = 190 'abajo
End With
Next
End Sub
tendre mal alguna declaracion en el codigo
¿has comprobado que las imagenes son Shapes(1) y Shapes(2) en todas las diapositivas?
------
Ya sé Excel, pero necesito más.
Gracias ya identifique porque me mando falla la macro ,bueno no en si fallas, realmente aqui es donde me gustaria me volvieras apoyar,ya que mis slides tienen textos ,son como 10 slides cada uno con texto distinto y como puedo hacer para que la macro no considere estos textos?
me gustaria que la macro no me considerara estos textos como imagen o shape , ya que ahi es donde se detiene
saludos espero me puedas ayudar
me gustaria que la macro no me considerara estos textos como imagen o shape , ya que ahi es donde se detiene
saludos espero me puedas ayudar
En Power Point todo son Shapes, porque los textos están dentro de cuadros de texto, no hay párrafos como en Word ni celdas como en Excel. En Power point el contenedor es una forma
------
Ya sé Excel, pero necesito más.
[comentario movido a tema nuevo en el foro http://www.necesitomas.com/buenas-tardes-foronecesito]