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