Macro para

08/12/2007 - 00:38 por Rucoma | Informe spam
Grabé una macro en power point para que me cambiara el tamaño de las
imagenes de una diapositiva y las situara correctamente en ella.
El código resultante es el siguiente:

With ActiveWindow.Selection.ShapeRange
.Fill.Transparency = 0#
.LockAspectRatio = msoFalse
.Height = 200
.Width = 350#
End With
ActiveWindow.Selection.Unselect
ActiveWindow.Selection.SlideRange.Shapes("Picture 7").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft 175#
.IncrementTop 100#
End With
ActiveWindow.Selection.SlideRange.Shapes("Picture 6").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft -175#
.IncrementTop 100#
End With
ActiveWindow.Selection.SlideRange.Shapes("Picture 5").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft 175#
.IncrementTop -100#
End With
ActiveWindow.Selection.SlideRange.Shapes("Picture 4").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft -175#
.IncrementTop -100#
End With
End Sub


El problema está en que al correr la macro en la siguiente diapositiva
(y tengo que hacerlo en muchas), las referencias a las imágenes
("Picture 7", etc) han cambiado, por lo que no me sirve.
Hay alguna manera de hacerlo para que la macro no se guíe por el
nombre del objeto?
Espero haberme explicado con claridad.

Muchas gracias y saludos.

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
08/12/2007 - 09:03 | Informe spam
hola, ruben !

no se que relacion tenga tu consulta con el grupo de excel (esta incluido en los grupos a los que posteaste)
tampoco se si la relacion del nombre de los shapes/pictures tenga relacion directa con su numero de indice
es decir, si el orden en que copias/pegas las imagenes ("Picture 7", "...6", "...5", "...4") equivale a 1, 2, 3 y 4 -?-

si suponemos que el orden es equivalente (nombre = indice o posicion) y que siempre existiran (SOLO) 4 shapes/picture...
el siguiente codigo se ejecuta exactamente igual para cada diapositiva de 4 imagenes en la misma posicion (inicial -> final)

Dim n As Byte
With ActiveWindow.Selection.SlideRange
For n = 1 To 4
With .Shapes(n)
.Fill.Transparency = 0
.LockAspectRatio = msoFalse
.Height = 200
.Width = 350
.LockAspectRatio = msoFalse
.Height = 200
.Width = 350
.IncrementLeft 175 * IIf((n - 1) Mod 2, -1, 1)
.IncrementTop 100 * IIf(n > 2, -1, 1)
End With
Next
End With

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ la consulta original __
Grabe una macro en power point para que me cambiara el tamano de las imagenes de una diapositiva y las situara correctamente en ella.
El codigo resultante es el siguiente:

With ActiveWindow.Selection.ShapeRange
.Fill.Transparency = 0#
.LockAspectRatio = msoFalse
.Height = 200
.Width = 350#
End With
ActiveWindow.Selection.Unselect
ActiveWindow.Selection.SlideRange.Shapes("Picture 7").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft 175#
.IncrementTop 100#
End With
ActiveWindow.Selection.SlideRange.Shapes("Picture 6").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft -175#
.IncrementTop 100#
End With
ActiveWindow.Selection.SlideRange.Shapes("Picture 5").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft 175#
.IncrementTop -100#
End With
ActiveWindow.Selection.SlideRange.Shapes("Picture 4").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft -175#
.IncrementTop -100#
End With
End Sub

El problema esta en que al correr la macro en la siguiente diapositiva (y tengo que hacerlo en muchas)
las referencias a las imagenes ("Picture 7", etc) han cambiado, por lo que no me sirve.
Hay alguna manera de hacerlo para que la macro no se guie por el nombre del objeto?
Espero haberme explicado con claridad.
Respuesta Responder a este mensaje
#2 Héctor Miguel
08/12/2007 - 09:03 | Informe spam
hola, ruben !

no se que relacion tenga tu consulta con el grupo de excel (esta incluido en los grupos a los que posteaste)
tampoco se si la relacion del nombre de los shapes/pictures tenga relacion directa con su numero de indice
es decir, si el orden en que copias/pegas las imagenes ("Picture 7", "...6", "...5", "...4") equivale a 1, 2, 3 y 4 -?-

si suponemos que el orden es equivalente (nombre = indice o posicion) y que siempre existiran (SOLO) 4 shapes/picture...
el siguiente codigo se ejecuta exactamente igual para cada diapositiva de 4 imagenes en la misma posicion (inicial -> final)

Dim n As Byte
With ActiveWindow.Selection.SlideRange
For n = 1 To 4
With .Shapes(n)
.Fill.Transparency = 0
.LockAspectRatio = msoFalse
.Height = 200
.Width = 350
.LockAspectRatio = msoFalse
.Height = 200
.Width = 350
.IncrementLeft 175 * IIf((n - 1) Mod 2, -1, 1)
.IncrementTop 100 * IIf(n > 2, -1, 1)
End With
Next
End With

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ la consulta original __
Grabe una macro en power point para que me cambiara el tamano de las imagenes de una diapositiva y las situara correctamente en ella.
El codigo resultante es el siguiente:

With ActiveWindow.Selection.ShapeRange
.Fill.Transparency = 0#
.LockAspectRatio = msoFalse
.Height = 200
.Width = 350#
End With
ActiveWindow.Selection.Unselect
ActiveWindow.Selection.SlideRange.Shapes("Picture 7").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft 175#
.IncrementTop 100#
End With
ActiveWindow.Selection.SlideRange.Shapes("Picture 6").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft -175#
.IncrementTop 100#
End With
ActiveWindow.Selection.SlideRange.Shapes("Picture 5").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft 175#
.IncrementTop -100#
End With
ActiveWindow.Selection.SlideRange.Shapes("Picture 4").Select
With ActiveWindow.Selection.ShapeRange
.IncrementLeft -175#
.IncrementTop -100#
End With
End Sub

El problema esta en que al correr la macro en la siguiente diapositiva (y tengo que hacerlo en muchas)
las referencias a las imagenes ("Picture 7", etc) han cambiado, por lo que no me sirve.
Hay alguna manera de hacerlo para que la macro no se guie por el nombre del objeto?
Espero haberme explicado con claridad.
Respuesta Responder a este mensaje
#3 Héctor Miguel
08/12/2007 - 09:11 | Informe spam
hola (de nuevo), ruben !

(perdon... me "engolosine" duplicando 3 instrucciones: LockAspectRatio, Height y Width)
las instrucciones debieron ser 3 lineas mas "cortas" :))

Dim n As Byte
With ActiveWindow.Selection.SlideRange
For n = 1 To 4
With .Shapes(n)
.Fill.Transparency = 0
.LockAspectRatio = msoFalse
.Height = 200
.Width = 350
.IncrementLeft 175 * IIf((n - 1) Mod 2, -1, 1)
.IncrementTop 100 * IIf(n > 2, -1, 1)
End With
Next
End With

saludos,
hector.
Respuesta Responder a este mensaje
#4 Héctor Miguel
08/12/2007 - 09:11 | Informe spam
hola (de nuevo), ruben !

(perdon... me "engolosine" duplicando 3 instrucciones: LockAspectRatio, Height y Width)
las instrucciones debieron ser 3 lineas mas "cortas" :))

Dim n As Byte
With ActiveWindow.Selection.SlideRange
For n = 1 To 4
With .Shapes(n)
.Fill.Transparency = 0
.LockAspectRatio = msoFalse
.Height = 200
.Width = 350
.IncrementLeft 175 * IIf((n - 1) Mod 2, -1, 1)
.IncrementTop 100 * IIf(n > 2, -1, 1)
End With
Next
End With

saludos,
hector.
Respuesta Responder a este mensaje
#5 Rucoma
08/12/2007 - 14:12 | Informe spam
Cierto es que este grupo es de excel y no de power point, pero también
es cierto que los cracks de VBA estais aquí, por lo que no he podido
evitar la tentación de poner aquí el mensaje.
He probado la macro y funciona de maravilla.
Un millón de gracias.

Saludos,

On Dec 8, 9:11 am, "Héctor Miguel"
wrote:
hola (de nuevo), ruben !

(perdon... me "engolosine" duplicando 3 instrucciones: LockAspectRatio, Height y Width)
las instrucciones debieron ser 3 lineas mas "cortas" :))

Dim n As Byte
With ActiveWindow.Selection.SlideRange
For n = 1 To 4
With .Shapes(n)
.Fill.Transparency = 0
.LockAspectRatio = msoFalse
.Height = 200
.Width = 350
.IncrementLeft 175 * IIf((n - 1) Mod 2, -1, 1)
.IncrementTop 100 * IIf(n > 2, -1, 1)
End With
Next
End With

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida