Como repetir varias veces el pulsar un botón de un formulario

Estoy haciendo un Access para hacer unos sorteos y lo que quiero es que al hacer click en el botón de un formulario me pida un número y que fueran viéndose los agraciados como si pulsaras varias veces el botón, pero con el código que tengo tarda un poco pero no se va viendo tantas veces como el número que ingreso que es lo que realmente quiero. (No sé si me explico resumiendo sería como hacer varias veces click en el botón pero de forma automática).

Private Sub Comando2_Click()
Dim numero As Long, contador As Long, resultado As Long
numero = InputBox("introduce un nº por favor")
contador = numero - 1
resultado = numero
While contador > 1
resultado = 1 * contador
contador = contador - 1
Me.sorteo.Value = Int(([Participantes] * Rnd()) + 1)
Me.PREMIADO = DLookup("NOMBRE", "PARTICIPANTES", "ID=" & Me.sorteo)
Wend
MsgBox "¡¡¡¡¡ENHORABUENA!!!!! " & Me.PREMIADO & " ERES @L GANADOR@ DO SORTEO"

1 respuesta

Respuesta
2

Si he entendido bien tu problema, si pones la línea del Msgbox antes del Wend ya te avisa con cada agraciado...

Como bien dices si pongo el Msgbox dentro del Wend me va pasando uno a uno cada ganador. Pero no es lo que pretendo, ese MsgBox lo puse para ver si funcionaba el código solamente. Yo lo que pretendo es que si pulso el botón se fuera ejecutando el código por ejemplo 10 veces y fueran pasando varios participantes hasta parar en uno como ganador. No sé si se puede poner por ejemplo un retardo de tiempo entre la aparición de uno y de otro (1 segundo o así).

A ver si esto es lo que buscas:

Private Sub Comando2_Click()
Dim numero As Long, contador As Long, resultado As Long
Dim miTime as Date
numero = InputBox("introduce un nº por favor")
contador = numero - 1
While contador > 1
resultado = 1 * contador
contador = contador - 1
Me.sorteo.Value = Int(([Participantes] * Rnd()) + 1)
Me.PREMIADO = DLookup("NOMBRE", "PARTICIPANTES", "ID=" & Me.sorteo)
'Aquí haces una pausa de 2 seg
miTime = DateAdd("s", 2, Now) 'El 2 significa que le añado 2 segundos
Do Until miTime < Now
Loop
Wend
MsgBox "¡¡¡¡¡ENHORABUENA!!!!! " & Me.PREMIADO & " ERES @L GANADOR@ DO SORTEO"

Solo te he añadido la declaración de la variable y una forma de hacer una pausa en la ejecución del bucle. Ojo que no he comprobado que dicho bucle funcione, porque entiendo que ya lo has hecho tú.

Lo que sí, si no pones un Randomize al principio del código, siempre te saldrán los mismos premiados...

El bucle funciona ... pero no como quiero. Yo por así decir cada vez que entra en el bucle tendría que pasar al siguiente registro cada dos segundos y no me pasa, va directo al último  por ejemplo: si meto 10 en el inputbox a los 20 segundos aparece el ganador. (tarda sobre unos dos segundos por cada número que meta en el inputbox).

Y en el código que tienes, ¿dónde le indicas a Access que tiene que pasar a un nuevo registro?... Porque si no se lo indicas, por "obra y gracia del espíritu santo" no lo va a hacer... jejeje...

Como poco te falta la linea para pasar a un registro ... ¿nuevo?, o bien antes del Wend si ya empiezas el bucle en un registro nuevo, o justo después del While, si empiezas en un registro existente... La instrucción podría ser DoCmd. GoToRecord,, acNewRec

Y obviamente te tarda dos segundos por cada número, porque eso es lo que se le indica en la "pausa"

Sí, ya sé que de alguna forma le tengo que poner que pase de registro, pero no sé donde. Es un formulario en blanco que sólo tiene un botón y dos controles: el botón es el que tiene el código y los controles son PREMIADO y SORTEO que los rellena el botón con los campos ID y NOMBRE de la tabla PARTICIPANTES.

Aquí ya te dije donde ponerlo:

Como poco te falta la linea para pasar a un registro ... ¿nuevo?, o bien antes del Wend si ya empiezas el bucle en un registro nuevo, o justo después del While, si empiezas en un registro existente... La instrucción podría ser DoCmd. GoToRecord,, acNewRec

Ya probara en los dos sitios y nada, se va directo al último registro después del tiempo programado.

No sé lo que has probado, pero funcionar, funciona: http://www.filebig.net/files/j7fyyiZexX 

En el ejemplo he modificado alguna línea para que funcione con lo que he preparado, ya que no sé de dónde vienen algunas cosas en tu código.

Por otro lado, deberías revisar bien tu código, porque hay líneas que "aparentemente" no sirven para nada, y hay otras que no están bien para lo que quieres

¡Gracias! Está muy bien el Access que me creaste y os agradezco  enormemente en general todo el tiempo que perdéis los expertos con nosotros los aprendices, pero no es exacto lo que necesito. Creo que lo mío aún es más simple lo que pasa es que me expreso muy mal. Lo que quiero es que se vaya moviendo aleatoriamente por los registros, en tu tabla es PARTICIPANTES y que se vayan mostrando en pantalla en el formulario y cuando pare,  que este sea el ganador, digamos que es para darle emoción … no necesito que los ponga en otra tabla como ganadores. Perdona por tanto lío.

Sinceramente, no sé dónde tienes el problema: si no quieres que se guarden en una tabla, pues haz el formulario independiente (sin hacerlo sobre una tabla) y listo. En ese caso, no necesitas poner una instrucción para ir a un nuevo registro.

http://www.filebig.net/files/4JmyhyaXtJ 

Este casi me funciona me busca los números pero no el nombre del premiado:

Private Sub Comando2_Click()
Dim numero As Long, contador As Long, resultado As Long
Dim miTime As Date
numero = InputBox("introduce un nº por favor")
contador = numero - 1
While contador >= 0
resultado = 1 * contador
contador = contador - 1
Me.sorteo.Value = Int(([Participantes] * Rnd()) + 1)
Me.PREMIADO = DLookup("NOMBRE", "PARTICIPANTES", "ID=" & Me.sorteo)
'Aquí haces una pausa de 2 seg
miTime = DateAdd("s", 2, Now) 'El 2 significa que le añado 2 segundos
Do Until miTime < Now
Loop
'    DoCmd.GoToRecord , , acNewRec
DoCmd.FindRecord Me.sorteo.Value, , True, , True
DoCmd.FindRecord Me.PREMIADO, , True, , True
Wend
MsgBox "¡¡¡¡¡ENHORABUENA!!!!! " & Me.PREMIADO & " ERES @L GANADOR@ DO SORTEO"
End Sub

Pues tendrás que ver si esta línea es la correcta para buscarlo:

Me.PREMIADO = DLookup("NOMBRE", "PARTICIPANTES", "ID=" & Me.sorteo)

Y si lo es, fíjate bien en el código de mi ejemplo, porque si en él funciona, en el tuyo también.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas