Trataremos hoy una manera de mover y/o duplicar autoformas desde una macro.
Para ello emplearemos las propiedades de las Autoformas:
.Top - controla la posición vertical de la forma, desde la parte superior de la hoja
.Left - controla la posición horizontal de la forma , desde el margen izquierdo de la hoja
.Rotation - el ángulo de giro
y
.Height - la altura del objeto
.Width - el ancho...
Y por otra parte el método .Duplicate si lo que queremos es copiar la autoforma de origen.
Lo primero que debemos hacer es añadir una autoforma a nuestra hoja.. por ejemplo, una estrella de siete puntas...
Tras ejecutar la macro de más abajo obtendremos:
Insertaremos los siguientes procedimientos en un módulo estándar:
Otro punto interesante de este proceso es que al incorporarle la llamada al otro procedimiento 'TimeOut', que fuerza la ejecución de eventos, veremos como se realiza el copiado/duplicado de las autoformas...
Finalmente para eliminar los 360 objetos o autoformas podemos lanzar este otro procedimiento
O bien manualmente selecciona una de las autoformas y presiona:
CTRL+MAYÚSCULA+BARRA ESPACIADORA
lo que provocará la selección de todas los objetos de la hoja... después simplemente presiona suprimir.
Para ello emplearemos las propiedades de las Autoformas:
.Top - controla la posición vertical de la forma, desde la parte superior de la hoja
.Left - controla la posición horizontal de la forma , desde el margen izquierdo de la hoja
.Rotation - el ángulo de giro
y
.Height - la altura del objeto
.Width - el ancho...
Y por otra parte el método .Duplicate si lo que queremos es copiar la autoforma de origen.
Lo primero que debemos hacer es añadir una autoforma a nuestra hoja.. por ejemplo, una estrella de siete puntas...
Tras ejecutar la macro de más abajo obtendremos:
Insertaremos los siguientes procedimientos en un módulo estándar:
Sub MoverDuplicarForma() Dim tamaño As Long tamaño = 1 'controlamos, según la posición de la forma 'inicio y fin del bucle... Dim a As Integer, b As Integer If ActiveSheet.Shapes(1).Left <= 10 Then a = 1 b = 360 paso = 1 Else a = 360 b = 1 paso = -1 End If 'realizamos proceso... 'Selection.ShapeRange.Duplicate.Select For i = a To b Step paso 'si solo queremos moverla... 'With ActiveSheet.Shapes(1) 'o bien si queremos duplicarla y obtener el efecto... With ActiveSheet.Shapes(1).Duplicate 'damos ángulo de rotación/giro .Rotation = i 'damos situación a la forma alto e izquierda 'desde la esquina superior izquierda punto (0,0) .Top = 50 .Left = i 'definimos su altura y ancho .Height = i .Width = i 'damos color RGB a la forma si el ángulo es par If i Mod 2 = 0 Then rojo = Int((255 - 0 + 1) * Rnd + 0) verde = Int((255 - 0 + 1) * Rnd + 0) azul = Int((255 - 0 + 1) * Rnd + 0) .Fill.ForeColor.RGB = RGB(rojo, verde, azul) End If End With 'damos un tiempo de ejecución 'para que se haga visible el cambio TimeOut 0.01 Next i End Sub '''''''''''''''''''''''''''''''''''''''''''''''''' Sub TimeOut(duracion As Double) Ini = Timer Do DoEvents Loop Until (Timer - Ini) >= duracion End Sub
Otro punto interesante de este proceso es que al incorporarle la llamada al otro procedimiento 'TimeOut', que fuerza la ejecución de eventos, veremos como se realiza el copiado/duplicado de las autoformas...
Finalmente para eliminar los 360 objetos o autoformas podemos lanzar este otro procedimiento
'''''''''''''''''''''''''''''''''''''''''''''''''' Sub Borrar_Hoja() Dim forma As Shape 'Para cada autoforma For Each forma In ActiveSheet.Shapes ' Eliminamos forma forma.Delete Next forma End Sub
O bien manualmente selecciona una de las autoformas y presiona:
CTRL+MAYÚSCULA+BARRA ESPACIADORA
lo que provocará la selección de todas los objetos de la hoja... después simplemente presiona suprimir.
Interesante animación! lamento muchísimo que no tengas un vídeo donde se aprecie más el efecto, éste estaría genial para despertar más la curiosidad, creatividad y fantasía de los jóvenes que siguen la COMUNIDAD G+ MS EXCEL GAMES CURIOSITIES UNUSUAL ENGINEERING ... estimado Ismael Romero, recibe por favor mis saludos y respetos.
ResponderEliminarGracias Manuel,
Eliminarcierto que hacer algo más visual 'vende' más... pero no es ese mi objetivo, solo trato de compartir un poco, en este caso, de programación en VBA Excel.
Un cordial saludo