Devolver formas a los valores predeterminados en Excel

Devolver formas a los valores predeterminados en Excel

Tengo alrededor de 70 formas en un documento de planificación que uso para el trabajo, todo está bien pero estoy intentando agregar una nueva característica. Estas formas se cambian usando puntos de edición cada semana para mostrarlas en un mapa, pero a veces es posible que la forma "A" no se use y solo quiero volver a su tamaño predeterminado junto con todas las demás formas. ¿Alguien sabe cómo podría lograr esto a través de una macro? He probado muchas cosas y buscado en todas partes, pero estoy al límite...

Si una forma no es predeterminada, establezca todas las formas no predeterminadas en el tamaño predeterminado.

gracias de antemano

Respuesta1

No sé dónde almacena Excel la altura y el ancho predeterminados de las formas. Supongo que, de forma predeterminada, te refieres al tamaño de la forma cuando haces clic para colocarla en lugar de arrastrarla para ajustarla al tamaño. Los óvalos, por ejemplo, miden 72x72. Lo mismo para los cuadrados.

Una forma de hacerlo es utilizar la propiedad AlternativeText de la forma. Puede almacenar los tamaños predeterminados en esta propiedad. Haga clic derecho en la forma, elija Formato de autoforma, vaya a la pestaña Web y escriba 72|72. Estoy usando la tubería como delimitador entre ancho y alto. Tendrías que averiguar cuál es el tamaño predeterminado para cada tipo de forma que tengas, pero como dije, no sé dónde lo almacena Excel. Una vez que tenga configurada la propiedad AlternativeText, puede usar un código como el siguiente

Sub FixShape()

    Dim shp As Shape
    Dim vaDefault As Variant

    Const sDELIM = "|"

    For Each shp In Sheet1.Shapes
        If Len(shp.AlternativeText) > 0 Then
            vaDefault = Split(shp.AlternativeText, sDELIM)
            shp.Width = vaDefault(0)
            shp.Height = vaDefault(1)
        End If
    Next shp

End Sub

Esto establecerá cada forma que tenga algo en AlternativeText al ancho y alto que registró. Esto supone que no estás usando AlternativeText para otra cosa.

Si no desea utilizar AlternativeText para almacenarlo, puede codificar los valores en VBA.

Sub FixShape2()

    Dim shp As Shape

    Const lDEFOVALHEIGHT As Long = 72
    Const lDEFOVALWIDTH As Long = 72
    Const lDEFSQRHEIGHT As Long = 72
    Const lDEFSQRWIDTH As Long = 72

    For Each shp In Sheet1.Shapes
        Select Case shp.AutoShapeType
            Case msoShapeOval
                shp.Height = lDEFOVALHEIGHT
                shp.Width = lDEFOVALWIDTH
            Case msoShapeRectangle
                shp.Height = lDEFSQRHEIGHT
                shp.Width = lDEFSQRWIDTH
        End Select
    Next shp

End Sub

información relacionada