¿Cómo hacer un formulario con botones Activex que tengan puntos por respuesta y dirigir a otras opciones?

Quiero hacer una encuesta con 3 opciones que valgan 1 punto, 2 puntos o 3 puntos acorde a la respuesta.
Además quiero que cuando le de click a No y le de click a "Siguiente Pregunta" se vaya a la Pregunta 3 y cuando le de la Opción Sí y le de al botón "Siguiente Pregunta" me aparezca la Pregunta 2 en el cuadrito de formulario.
He visto muchas formas para programarlo, desde poner las preguntas en una hoja de excel aparte o poner las preguntas en la misma codificación para redirigirlas en caso toma una respuesta u otra.

¿Alguna función o código base para poder empezar a programar ello?
Disculpen la pequeña complejidad de mi problema.

1 respuesta

Respuesta
1

Yo usaría otra hoja parecida a esta, donde vayan listadas todas las preguntas y los textos de los botones de opción

Al pulsar el botón "Siguiente pregunta" se presentará la pregunta que indique la casilla H4

Como ves en la celda H4 en cada línea puedes poner una fórmula diferente según el valor de los botone de opción.

En la columna valor pondrá 1,2 ó 3 según la opción marcada, y en puntuación puedes transformar ese dato en la puntuación que interese para la evaluación.

El código del Botón "Siguiente" sería algo así:

Private Sub CommandButton1_Click()

r = Hoja2.Cells(1, 3).Value
If OptionButton1.Value = 1 Then Hoja2.Cells(r, 6) = 1
If OptionButton2.Value = 1 Then Hoja2.Cells(r, 6) = 2
If OptionButton3.Value = 1 Then Hoja2.Cells(r, 6) = 3
Hoja2.Cells(1, 3) = Hoja2.Cells(r, 8)

'**** La hoja2 hace el resto

'***** Nueva pregunta ******
r = Hoja2.Cells(1, 3)
Userform1.text1 = Hoja2.Cells(r, 2)  ' **** Escribir la pregunta

OptionButton1.Value = 0 '  ***** desmarcar los botones de opcion '
OptionButton2.Value = 0
OptionButton3.Value = 0

OptionButton1.Caption = Hoja2.Cells(r, 3) ' ****** poner los textos de las opciones
OptionButton2.Caption = Hoja2.Cells(r, 4)
OptionButton3.Caption = Hoja2.Cells(r, 5)
' ******   si no hay texto para el tercer boton éste no se visualizará
If Hoja2.Cells(r, 5) Then OptionButton3.Visible = False

End Sub

Intenté hacer los códigos con los mismos parámetros pero no sale el texto en el formulario y al dar click en siguiente me sale error y me selecciona la parte de "Userform1.text1"

¿Para que se muestre las opciones en los botones y el label no se debería usar el Label1 = Hoja2.Cells(x, x) y para botones el OptionButton1.Caption = Hoja2.Cells(x, x)?

Ayudita pls :(

Claro!

Tienes qué dirigir la instrucción al objeto de la userform donde tengas la pregunta. Si has utilizado una label1 tendrá que poner. Userform1.label1=...

Los textos de las optionbutton estan en las columnas 3, 4 y 5. Tienesque hacer refencia a la fila de la pregunta en curso que se identifica con "r"

.Cells(r, 3) o. .cells(r,4), etc

Tienes razón se me coló un error, en el ejemplo te puse los optionbutton todos= .. cells(r, 6) evidentemente cada uno debe hacer referencia a la celda de la hoja 2 donde este el texto correspondiente. Siempre la fila sera r y la columna la que corresponda.

Perdona el error.

Otro detalle que se me ha pasado: si en la primera pregunta sólo quieres tener dos optionbutton, marca en propiedades del optionbutton3 visible= false.

Para que en sucesivas preguntas vuelva a visualizarse el OpB... 3, completa la última línea del código así:

If Hoja2.Cells(r, 5) Then OptionButton3.Visible = False Else OptionButton3.visible= true

Hola, aún tengo errores :(

Consulta,

  1. ¿Esta línea "If OptionButton1.Value = 1 Then Hoja2.Cells(r, 6) = 1 " no debería decirme que está depositando el valor 1 en la celda (1,6) en vez de la celda (4,6) como está en tu excel?
  2. Esta línea "UserForm1.Label1.Caption = Hoja2.Cells(r, 2) ' **** Escribir la pregunta" aún me sigue generando errores. Le adicioné Caption pero igual me sigue dando errores :(

Private Sub CommandButton1_Click()
r = Hoja2.Cells(1, 3).Value
If OptionButton1.Value = 1 Then Hoja2.Cells(r, 6) = 1 
If OptionButton2.Value = 1 Then Hoja2.Cells(r, 6) = 2
If OptionButton3.Value = 1 Then Hoja2.Cells(r, 6) = 3
Hoja2.Cells(1, 3).Value = Hoja2.Cells(r, 8).Value

'**** La hoja2 hace el resto

'***** Nueva pregunta ******
r = Hoja2.Cells(1, 3).Value
UserForm1.Label1.Caption = Hoja2.Cells(r, 2) ' **** Escribir la pregunta

OptionButton1.Value = 0 ' ***** desmarcar los botones de opcion '
OptionButton2.Value = 0
OptionButton3.Value = 0

OptionButton1.Caption = Hoja2.Cells(r, 3) ' ****** poner los textos de las opciones
OptionButton2.Caption = Hoja2.Cells(r, 4)
OptionButton3.Caption = Hoja2.Cells(r, 5)
' ****** si no hay texto para el tercer boton éste no se visualizará
If Hoja2.Cells(r, 5) Then OptionButton3.Visible = False

End Sub

Private Sub UserForm_Initialize()
Label1 = Hoja2.Cells(4, 2)
OptionButton1.Caption = Hoja2.Cells(4, 3)
OptionButton2.Caption = Hoja2.Cells(4, 4)
OptionButton3.Caption = Hoja2.Cells(4, 5)
End Sub

1.-No, lo que dice esa instrucción es que anote en la celda (r, 6) un valor que indica cual opcionbutton se ha marcado, por cierto he comprobado que hay que poner True en lugar del 1 que te había puesto antes. (Al final te vuelvo a pegar el código completo corregidos los errores que me ha dado al hacerlo correr)

2.-El error se puede deber a que la celda C1 (1,3) está vacía. Cuando rellenes la hoja2 hay que poner 1 en la celda (1,3). Y las celdas de la columna 6 debe estar vacía.

Otro error que he visto es que hay que asignar a r = hoja2. Cells(1,3) + 3, r es la línea en que está la pregunta, la pregunta 1 esta en la línea 4, la 2 en la 5, etc.

Yo he probado el código con las correcciones que te digo y me funciona. Te lo pego a continuación.

Falta por poner, una instrucción para indicar que es la ultima pregunta, y que no se vaya a una línea vacía.

Private Sub UserForm_Initialize()

Label1 = Hoja2.Cells(4, 2)
OptionButton1.Caption = Hoja2.Cells(4, 3)
OptionButton2.Caption = Hoja2.Cells(4, 4)
OptionButton3.Caption = Hoja2.Cells(4, 5)
If OptionButton3.Caption = "" Then OptionButton3.Visible = False Else OptionButton3.Visible =True

End Sub

Private Sub CommandButton1_Click()
r = Hoja2.Cells(1, 3).Value + 3
If OptionButton1.Value = True Then Hoja2.Cells(r, 6) = 1
If OptionButton2.Value = True Then Hoja2.Cells(r, 6) = 2
If OptionButton3.Value = True Then Hoja2.Cells(r, 6) = 3
If Hoja2.Cells(r, 6) = "" Then Exit Sub
Hoja2.Cells(1, 3) = Hoja2.Cells(r, 8)

'La hoja2 hace el resto

'Nueva pregunta ******
r = Hoja2.Cells(1, 3) + 3
UserForm1.Label1 = Hoja2.Cells(r, 2) 'Escribir la pregunta

OptionButton1.Value = 0 'desmarcar los botones de opcion '
OptionButton2.Value = 0
OptionButton3.Value = 0

OptionButton1.Caption = Hoja2.Cells(r, 3) 'poner los textos de las opciones
OptionButton2.Caption = Hoja2.Cells(r, 4)
OptionButton3.Caption = Hoja2.Cells(r, 5)
' si no hay texto para el tercer boton éste no se visualizará
If OptionButton3.Caption = "" Then OptionButton3.Visible = False Else OptionButton3.Visible = True

End Sub

Espero que ahora te funcione, de todas formas quedan detalles que tendrás que ir adaptando a tus necesidades concretas, lo importante es que comprendas lo que pretende hacer cada instrucción.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas