Saludos amigos del foro, me he estancado en una instruccion de codigo que quiero que funcione.
en la primera hoja debo tener el resultado. En la hoja2 tendria muchas filas de datos de preguntas. Lo que quiero lograr es que en la hoja1 particularmente en la zona gris del archivo que subo se puedan ver las preguntas en la forma en que alli estan dispuestas las mismas que sean traidas de las filas de la hoja2 cada vez que se hace un click. He intentado con spinbutton o con commandbutton. Me gustaria que se recorran las las filas de preguntas solo hasta un limite indicado en la celda G2 (cantidad de preguntas) y el inicio seria lo indicado en la celda G5 (Inicio)
Agradezco anticipadamente su gentil colaboracion.
Adjunto | Tamaño |
---|---|
quiz_mostrar_siguiente_preguntas_al_hacer_click.xlsm | 44.03 KB |
Como tienes las preguntas numeradas 1,2,3,4,... se trataría de localizar la pregunta con ese número que te sirve de identificador y traer sus valores a la hoja 1.
Yo utilizaría BUSCARV para localizar la pregunta que interese. Puedes hacerlo poniendo las fórmulas en las celdas, o puedes hacerlo mediante código Application.Worksheerfunction.VLookUp(...)
Otra opción es localizar la fila de la pregunta siguiente y copiar los valores, para eso te puede servir la función COINCIDIR (MATCH)
Por ejemplo, algo como esto:
Sub MuestraPregunta(Npregunta)
Dim filaconlapregunta As Long
filaconlapregunta = Application.WorksheetFunction.Match(Npregunta, Hoja2.Range("B:B"), 0) 'localizo la fila en la Hoja 2 donde está la pregunta que me interesa
'Hoja1.Cells(10, 3) = Npregunta 'anoto el número de pregunta en la Hoja1 para saber cuál estoy mostrando (y saber cuál será la siguiente)
Hoja1.Cells(10, 5) = Hoja2.Cells(filaconlapregunta, 5)
Hoja1.Cells(11, 5) = Hoja2.Cells(filaconlapregunta, 6)
Hoja1.Cells(13, 5) = Hoja2.Cells(filaconlapregunta, 7)
Hoja1.Cells(14, 5) = Hoja2.Cells(filaconlapregunta, 8)
Hoja1.Cells(15, 5) = Hoja2.Cells(filaconlapregunta, 9)
Hoja1.Cells(16, 5) = Hoja2.Cells(filaconlapregunta, 10)
Hoja1.Cells(13, 6) = Hoja2.Cells(filaconlapregunta, 11)
End Sub
Una vez tengas este procedimiento que carga una pregunta cualquiera, se trataría de llamarlo las veces que necesites
Por ejemplo con un procedimiento que compruebe el inicio y el número de preguntas a realizar que defines en la Hoja1, y que vaya anotando la cuenta en alguna celda para saber cuántas preguntas has realizado ya.
------
Ya sé Excel, pero necesito más.
Saludos, la verdad no comprendo como debe ir en definitiva trate de hacer lo que indicas pero no me resulta, trate de usar el spinbutton para avanzar hacia adelante y haceia atras, tampoco funciona. Entonces solo lo deje con la techa Next que esta en la hoja pero tampoco funciona al fin he estado probando asi:
Sub MuestraPregunta(Npregunta)
Dim Npregunta As Integer
Dim filaconlapregunta As Long
Set Npregunta = Hoja1.Range("B10") 'Lo puse en B10, pues en C10 tengo el titulo de las celdas
Application.Worksheerfunction.VLookUp(Hoja1.Range("B10"), Hoja2.Range("B5:L36"),5)
filaconlapregunta = Application.WorksheetFunction.Match(Npregunta, Hoja2.Range("B:B"), 0)
Hoja1.Cells(10, 2) = Npregunta
Hoja1.Cells(10, 5) = Hoja2.Cells(filaconlapregunta, 5)
Hoja1.Cells(11, 5) = Hoja2.Cells(filaconlapregunta, 6)
Hoja1.Cells(13, 5) = Hoja2.Cells(filaconlapregunta, 7)
Hoja1.Cells(14, 5) = Hoja2.Cells(filaconlapregunta, 8)
Hoja1.Cells(15, 5) = Hoja2.Cells(filaconlapregunta, 9)
Hoja1.Cells(16, 5) = Hoja2.Cells(filaconlapregunta, 10)
Hoja1.Cells(13, 6) = Hoja2.Cells(filaconlapregunta, 11)
Para aprender hay que preguntar
La función de ejemplo que te he puesto lee el contenido de una pregunta, una pregunta que identificas con su número, que es lo que le pasas como argumento al procedimiento.
Si quieres mostrar la siguiente pregunta al pulsar un spin button, tienes que hacer qeu cuando se pulse ese spinbutton llame a la función que carga la pregunta.
por ejemplo, en tus eventos del Spin Button podrías hacer algo así:
Private Sub SpinButton1_SpinDown()
Hoja1.Range("E8") = Hoja1.Range("E8") - 1
MuestraPregunta (Hoja1.Range("E8").Value)
End Sub
Private Sub SpinButton1_SpinUp()
Hoja1.Range("E8") = Hoja1.Range("E8") + 1
MuestraPregunta (Hoja1.Range("E8").Value)
End Sub
------
Ya sé Excel, pero necesito más.
Gracias Maestro Pacomejia, con lo ultimo he podido resolver este tema y muchos otros tambien,
ese modo de codigficar la variable (una instruccion) y luego el rango no lo habia conocido , muchas gracias por tus enseñanzas
Este tema se ha resuelto
Para aprender hay que preguntar