Excel: Insertar y cambiar autoforma según el contenido de una celda desplegable

Cuento con las casillas de "clasificacion" con formato de validación de datos con los valores 1,2 y 3 donde dependiendo del valor se debería insertar una autoforma, el valor 1 es un circulo, valor 2 cuadrado y el valor 3 triangulo (en caso de cambiar el valor de las celda desplegable de "clasificacion" debería cambiar la autoforma sin estar sobrepuesta en la anterior autoforma en caso de modificar el numero). Adicionalmente desearía poder conectar las autoformas de forma automática por medio de la casilla "conector" dirigiendo las líneas de conexión de una autoforma a otra. No tengo demasiadosdos conocimientos de visual basic, por lo que en el desarrollo que realizo, logro insertar la autoforma, sin embargo, al cambiar el valor de la lista despegabl las autoformas se sobreponen, agradecería si me pudieran ayudar con alguna codificación que podría ayudarme con el macro.

1 respuesta

Respuesta
2

Te ayudo con la parte donde las figuras se sobreponen.

Para que no se sobrepongan las figuras, primero debes borrar la figura anterior.

Para borrar una figura le debes poner un nombre fijo.

Por ejemplo, suponiendo que tienes algo similar a esto, para insertar la figura en la celda H7 según el valor de la celda B7

    wtop = Range("H7").Top + 7
    wleft = Range("H7").Left + 10
    Select Case Range("B7")
        Case 1: figura = msoShapeOval
        Case 2: figura = msoShapeRound1Rectangle
        Case 3: figura = msoShapeIsoscelesTriangle
    End Select
    ActiveSheet.Shapes.AddShape(figura, wleft, wtop, 30, 30).Select
    Selection.Name = "Figura B7"

Lo que estoy haciendo es crear la figura y le pongo el nombre fijo "Figura B7".

Ahora, antes de crear la figura, voy a eliminar la figura de esta forma:

    ActiveSheet.DrawingObjects("Figura B7").Delete

El código completo sería así:

Sub Macro2()
'
' Por.Dante Amor
' Insetar figura en H7 según el valor de B7
'
    On Error Resume Next
    ActiveSheet.DrawingObjects("Figura B7").Delete
    On Error GoTo 0
    wtop = Range("H7").Top + 7
    wleft = Range("H7").Left + 10
    Select Case Range("B7")
        Case 1: figura = msoShapeOval
        Case 2: figura = msoShapeRound1Rectangle
        Case 3: figura = msoShapeIsoscelesTriangle
    End Select
    ActiveSheet.Shapes.AddShape(figura, wleft, wtop, 30, 30).Select
    Selection.Name = "Figura B7"
End Sub

Si observas antes de eliminar pongo la instrucción: "On Error Resume Next", eso significa que si la figura no existe, la macro no se detendrá por el error y pasará a la siguiente instrucción. Después de eliminar la figura pongo la instrucción: "On Error GoTo 0", eso significa que en caso de error la macro se detenga.


Elimina todas tus figuras y vuelve a cargarlas con las instrucciones de nombrar las figuras, para que en la siguiente ejecución se puedan borrar y no se sobrepongan.


.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Dante muy agradecido por tu respuesta, el código enviado me funciona a la perfección cuando la casilla cuenta con los valores 1,2 y 3. Tengo dos dudas, existe la posibilidad de cambiar el valor numérico de la casilla B7 por un valor verbal, por ejemplo la palabra circulo, cuadrado y triangulo y la segunda consulta es que si el no existe ningún valor numérico en la casilla el macro me da error, existe la posibilidad de evitar que el macro al no contar con un valor omita la falta, por ejemplo en caso de tener la casilla B7 sin valor la macro no haga nada.

Nuevamente muy agradecido por tu ayuda.

Te anexo la macro actualizada

Sub Macro2()
'
' Por.Dante Amor
' Insetar figura en H7 según el valor de B7
'
    On Error Resume Next
    ActiveSheet.DrawingObjects("Figura B7").Delete
    On Error GoTo 0
    wtop = Range("H7").Top + 7
    wleft = Range("H7").Left + 10
    Select Case LCase(Range("B7"))
        Case "circulo": figura = msoShapeOval
        Case "cuadrado": figura = msoShapeRound1Rectangle
        Case "triangulo": figura = msoShapeIsoscelesTriangle
        Case Else: Exit Sub
    End Select
    ActiveSheet.Shapes.AddShape(figura, wleft, wtop, 30, 30).Select
    Selection.Name = "Figura B7"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas