De Excel no tengo ni puñetera idea, pero por si te puede ayudar( en Access). Tengo una tabla Alumnos que tendría los datos de los alumnos
, otra tabla llamada Preguntas y otra llamada Test donde va a recoger las preguntas que" se hagan"
Si tengo un formulario con subformulario, donde te dejo a la vista los cuadros de texto Idpregunta y Correcta( que estarían ocultos) y los registros del subformulario para que veas como al pulsar Preguntas al azar, ponga otra pregunta aleatoriamente.
La respuesta correcta es la B. Si por ejemplo pulso el cuadro a la derecha de la respuesta A
y al aceptar
Me pone en los cuadros de texto del formulario las preguntas respondidas por cada alumno, los aciertos y los fallos, que se guardan en la tabla, en el registro de ese alumno. También en la tabla Test por si hiciera más de uno.
Si pulsara el botón Preguntas al azar
Se va a una pregunta aleatoria( puedes verlo en los botones de desplazamiento). Vuelvo a pulsarlo
Y como tienes el número de preguntas, aciertos y fallos puedes hacer los gráficos que quieras.
El código del evento Al hacer clic del botón Preguntas al azar es
Private Sub Comando15_Click()
Dim numRegs As Long
numRegs = Me.Recordset.RecordCount
Randomize
DoCmd.GoToRecord , , acGoTo, Int(numRegs * Rnd + 1)
End Sub
Y el del evento Al recibir el enfoque del cuadro de texto, llamado ResA, que está a la derecha de la respuesta A es
Private Sub ResA_GotFocus()
DoCmd.SetWarnings False
If IsNull([ResA]) Or ResA = "" Then
ResA = "A"
If ResA = Correcta Then
DoCmd.RunSQL "insert into test(IdAlumno,Idpregunta,respuesta,acertada)values('" & Me.Parent!IdAlumno & "',idpregunta,""A"",""Si"")"
MsgBox "Enhorabuena, ha acertado", vbOKOnly + vbExclamation, "De carambola, pero ha acertado"
Me.Parent!NumPreguntas = Nz(Me.Parent!NumPreguntas) + 1
Me.Parent!Aciertos = Nz(Me.Parent!Aciertos) + 1
Else
DoCmd.RunSQL "insert into test(IdAlumno,Idpregunta,respuesta,acertada)values('" & Me.Parent!IdAlumno & "',idpregunta,""A"",""No"")"
MsgBox "Va a ser que no", vbOKOnly + vbExclamation, "Otra vez será"
Me.Parent!NumPreguntas = Nz(Me.Parent!NumPreguntas) + 1
Me.Parent!Fallos = Nz(Me.Parent!Fallos) + 1
End If
End If
End Sub
este código se podría acortar.