jueves, 13 de diciembre de 2018

VBA: Las formas a modo de evaluación

Hoy trabajaremos con los objetos Shapes para dar una posible solución a un lector que preguntaba:
[...]estoy haciendo un pequeño juego de preguntas para mi hijo pequeño, y a la hora de responder afirmativamente a una cuestión desearía que saliera un signo o dibujo con un smile verde sonriente y en caso negativo que saliera un smile rojo triste. No soy capaz de vincular esas imágenes con la respuesta, sólo consigo que me ponga correcto o incorrecto[...]


Lo primero consiste en añadir unas imágenes o formas en mi caso con el aspecto deseado...
Para nuestro ejemplo dispondremos de cuatro preguntas a responder, por lo que añadimos cuatro muñecos verdes y cuatro rojos superpuestos dos a dos por cada pregunta...
A estas formas las he llamado:
'bien1' 'mal1'
'bien2' 'mal2'
'bien3' 'mal3'
'bien4' 'mal4'

VBA: Las formas a modo de evaluación



Por otra parte, para controlar que las respuestas dadas en las celdas C17,C20,C23,C26 son correctas, las cruzamos con las respuestas correctas de control en G17,G20,G23,G26, cosa que comprobamos en H17,H20,H23,H26 con una simple prueba lógica:
=C17=G17

VBA: Las formas a modo de evaluación



Tenemos todo lo necesario:
1-las ocho formas
2-las preguntas planteadas
3-y su corrección

solo nos falta controlar las formas (rojo o verde) según corresponda, lo que haremos con un evento 'Worksheet_Change' de hoja.


Así pues, insertamos el siguiente evento 'Worksheet_Change' en la ventana de código de la hoja:

Private Sub Worksheet_Change(ByVal Target As Range)
'comenzamos controlando qué celdas están supervisadas
If Not Intersect(Target, Range("C17,C20,C23,C26")) Is Nothing Then
    'asociamos número de filas a preguntas
    Select Case Target.Row
        Case Is = 17: pregunta = 1
        Case Is = 20: pregunta = 2
        Case Is = 23: pregunta = 3
        Case Is = 26: pregunta = 4
    End Select
    'comprobamos se ha rellenado con algo las celdas de respuesta
    'si se ha completado con algo se evalua
    If Target.Value <> "" Then
        'se verfica con la celda control de la col H
        'si es VERDADERO se ha acertado
        If Cells(Target.Row, "H") = True Then
            'y entonces sacamos el muñeco verde y ocultamos el rojo
            ActiveSheet.Shapes("bien" & pregunta).Visible = msoTrue
            ActiveSheet.Shapes("mal" & pregunta).Visible = msoFalse
        Else
            'en caso contrario sacamos el muñeco rojo y ocultamos el verde
            ActiveSheet.Shapes("bien" & pregunta).Visible = msoFalse
            ActiveSheet.Shapes("mal" & pregunta).Visible = msoTrue
        End If
    Else
        'si no se ha rellenado nada se ocultan ambas figuras
        ActiveSheet.Shapes("bien" & pregunta).Visible = msoFalse
        ActiveSheet.Shapes("mal" & pregunta).Visible = msoFalse
    End If
End If

End Sub



Y podemos probar el cuestionario y comprobar como funciona según lo esperado.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.