Programar un botón en access para que se active en un rango de tiempo

No se nada de VB, agradezco su ayuda.

Tengo un botón que se llama Programación. Al dar click en el abre el formulario programa, lo tengo programado con macros según la imagen.

Como podría programar ese botón para que se active de lunes a viernes desde las 8am hasta las 5.pm.

Si alguien quisiera entrar a programar a la madrugada o un fin de semana pues no podrá porque el botón se debe activar en el horario descrito.

Se puede con macros o si debe ser con código como enlazo todo para que se bloquee en el horario especificado y que haga lo que ya esta programado en la macro.?

1 respuesta

Respuesta
1

Lo tienes que hacer con código, porque no hay macros para eso, pero es bastante sencillo:

1º/ Abre el formulario que contiene tu botón en vista diseño y saca las propiedades del formulario. 2º/ Vete a la pestaña eventos y localiza "Al cronómetro"

3º/ A la derecha te aparecerá un botóncito con tres puntos, lo pulsas y seleccionas "Generador de código" o algo parecido en la ventana emergente.

4º/ Eso te llevará al editor de VBA,  entre las líneas Private Sub Form_Timer y End Sub. Pues entre esas dos lineas escribes este código:

If Weekday=1 Or Weekday=7 Then
    Me.Programacion.Enabled=False
else
    If Time > #8:00:00 AM# And Time < #5:00:00 PM# Then
        Me.Programacion.Enabled = True
    Else
        Me.Programacion.Enabled = False
    End If
End If

(suponiendo que tu botón se llame efectivamente Programacion, cosa que puedes ver en sus propiedades-<Otras->Nombre)

5º/ En la misma pestaña Eventos del formulairo, localiza "Intervalo de cronómetro" y ponle: 60000. Esos 60000 equivalen a 60 segundos (o 1 minuto), e indicará cada cuanto tiempo se ejecuta el código anterior para activar o desactivar el botón. Puedes ponerle otro intervalo, si quieres que se ejecute con más asiduidad, pero yo, como mucho lo ejecutaría cada 30 segundos (pondrías 30000)

6º/ Por último, para que al cargar el formulario haga la misma comprobación, en el evento "Al cargar" del formulario, pon este código:

Form_Timer

Y listo

Gracias, probé el código pero me salio un error. Dice error de compilación, el argumento no es opcional y se sitúa en amarillo sobre weekday.

El código en total del formulario lo tengo así: añadí el form_timer en al cargar el formulario y el código que me dio arriba.

Pero me salio el error mencionado.

Private Sub Form_Load()
Me.usuarioactivo = UCase(LOGEDUSER)
Form_Timer
End Sub
Private Sub Form_Timer()
If Weekday = 1 Or Weekday = 7 Then
    Me.Comando1.Enabled = False
Else
    If Time > #8:00:00 AM# And Time < #5:00:00 PM# Then
        Me.Comando1.Enabled = True
    Else
        Me.Comando1.Enabled = False
    End If
End If
DoCmd.Quit
End Sub
Private Sub SALIR_Click()
Application.Quit
End Sub

Una duda en el campo al cronometro lo tenia en 240000, es decir que se cierre el formulario despues de 4 min. me pasaba que se les olvidaba cerrar la base y se bloqueaba.

Como cambiaria en este caso al querer que continue con esa condicion que se cierre a los 4 minutos, ¿y qué el boton permanezca activo en el horario descrito?, fuera de ese horario que este inactivo.

Adjunto el codigo total que tengo en ese formulario, agradezco su orientacion respecto al error.

Disculpa, que por escribirte el código "al vuelo", se me pasó un pequeño detalle, ponerle la fecha a la función Weekday().

La línea que te da el error sería así:

If Weekday(Date) = 1 Or Weekday(Date) = 7 Then

En cuanto a lo otro, prueba así:

En el encabezado del formulario debajo de las lineas Opction... que tengas y antes de cualquier Private Sub..., pon

Dim tiempo As Date

En los eventos "al cargar", "al Activar registro", "al mover el mouse", "al bajar una tecla" y en todos aquellos que consideres que pueden servir para detectar que tu usuario "hace algo", pones, como primera linea del código:

Tiempo=Time

En el evento Timer, cambia la linea "DoCmd.Quit" por estas otras:

If Abs(DateDiff("n",Time,Tiempo))>4 Then 
    DoCmd.Quit
End If

Si el datediff te da error, ponle "nn" en vez de "n".

Y como intervalo de cronómetro, ponle un minuto o menos.

A ver si te sirve, porque no lo he probado

Que pena, espero haber entendido sus instrucciones, el código completo de ese formulario esta así.

Al hacerlo toda la base se bloqueo. No pude ni ingresar con el usuario.

¿

Habré hecho algo mal? O entendí mal sus indicaciones, esto de VB se me da poco.

En el menu principal hay 4 botones, solo el botón llamado agenda deseo que quede con horario restringido, el resto de botones y base que funcione normal, solo el de "agenda" deberá tener horario de lunes a viernes de 8 a 5 pm. si esta fuera de ese horario quede desactivado.

Agradezco su orientación creo que hice mal algo o mucho. Perdón.

opction
Dim tiempo As Date
Private Sub Comando1_Click()
DoCmd.OpenForm "PROGRAMA", , , , acFormAdd, acDialog
End Sub
End Sub
Private Sub Comando1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
tiempo = Time
End Sub
Private Sub Form_Load()
Me.usuarioactivo = UCase(LOGEDUSER)
End Sub
Private Sub Form_Timer()
If Weekday(Date) = 1 Or Weekday(Date) = 7 Then
    Me.Comando1.Enabled = False
Else
    If Time > #8:00:00 AM# And Time < #5:00:00 PM# Then
        Me.Comando1.Enabled = True
    Else
        Me.Comando1.Enabled = False
    End If
End If
If Abs(DateDiff("n", Time, tiempo)) > 4 Then
DoCmd.Quit
End If
End Sub
Private Sub SALIR_Click()
Application.Quit
End Sub

Pues desconozco lo que has hecho, pero acabo de hacer la prueba, simulando lo que sé de tu BD (salvo la parte del login) y a mi me funciona...

Te dejo la bd sobre la que hice la prueba: http://www.filebig.net/files/bfKWjqS5B9 

Verás que al abrir la BD te carga ya el formulario Menu automáticamente, y te habilita o no el botón en función de la hora del sistema.

Si no haces nada, ni mover el ratón ni pulsar teclas ni nada de nada... a los 4 minutos se cierra la aplicación.

Excelente ahora si funciono. De mi parte había hecho mucho mal. Ya quedo super. Mil gracias por compartir su conocimiento con esta extraña

Encantado de ayudar, y de ver que lo has solucionado.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas