Macros para manejar los elementos de una forma (objeto Shape)


Macro para crear una forma (shape)

Sub CrearFormas()
'Crea un rectángulo en la parte superior izquierda de la hoja 
    'AddShape(TipoForma, Izquierda, Arriba, Longitud, Altura) 
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, 0, 0, 100, 15).Name = "Rectángulo" 
End Sub


Macro para contar el número de formas (shapes) en una hoja activa

Sub NumeroFormas()
Dim n As Integer
'Número de formas en la hoja activa
n = ActiveSheet.Shapes.Count
MsgBox n
End Sub 

Macro para cambiar la longitud de una forma (shape)

Sub LongitudFormas()
    'Cambia la longitud de la forma 1 de la hoja activa 
    ActiveSheet.Shapes(1).Select
    Selection.ShapeRange.Width = 50 
End Sub
 

Macro para cambiar el color de una forma(shape)

Sub ColorFormas1()
    'Cambia el color de la forma 1 de la hoja activa
    ActiveSheet.Shapes(1).Select
    Selection.Interior.ColorIndex = 10 
End Sub
 

Sub ColorFormas2()
Dim Formas As Shape
    Set Formas = ActiveSheet.Shapes(1)
    'Cambia el color y el tamaño de la forma
    With Formas
        .Fill.ForeColor.RGB = RGB(255, 0, 255) 
        .Width = 50
    End With
End Sub
 

Macro para mover una forma (shape)

Sub MoverHorizontalmenteFormas()
    'Mueve la forma 1 a la izquierda 50 puntos (valor negativo)
    ActiveSheet.Shapes(1).IncrementLeft -50 

    'Mueve la forma 2 a la derecha 70 puntos (valor positivo)
    ActiveSheet.Shapes(2).IncrementLeft 50 
End Sub 

Macro para alinear un conjunto de formas (shapes)

Sub AlinearFormas()
    'Alínea las formas de la hoja activa a la izquierda 
    ActiveSheet.Shapes.SelectAll 
    Selection.ShapeRange.Align msoAlignLefts, False 
End Sub 


Sub AlinearFormas2()
    'Alínea tres formas de la hoja activa a la izquierda
    ActiveSheet.Shapes.Range(Array(1, 2, 3)).Align msoAlignLefts, False
End Sub

Macro para colocar una forma en una posición específica (shape)

Sub PosicionFormas()
    'Coloca la forma en la parte superior izquierda de la celda A1 
    ActiveSheet.Shapes(1).Top = ActiveSheet.Range("A1").Top
    ActiveSheet.Shapes(1).Left = ActiveSheet.Range("A1").Left
End Sub


Macro para asignar texto a una forma (shape)


Sub TextoFormas()
    With ActiveSheet.Shapes(1)
        .TextFrame.Characters.Text = "Ejemplo de texto"
        .TextFrame.Characters.Font.Name = "Arial"
        .TextFrame.Characters.Font.FontStyle = "Bold"
        .TextFrame.Characters.Font.Size = 11
        .Fill.ForeColor.RGB = RGB(0, 0, 255)
        .TextFrame.HorizontalAlignment = xlHAlignCenter
        .TextFrame.VerticalAlignment = xlVAlignCenter
End With End Sub