Cerrar Formulario después de un tiempo de inactividad

Necesito cerrar un formulario automáticamente después de 10 segundos si no se ingresa datos en el textbox.

Respuesta
1

Para cerrar automáticamente un formulario en Excel después de 10 segundos de inactividad (si no se ingresan datos en un TextBox), puedes utilizar un temporizador. A continuación te dejo una solución usando VBA (Visual Basic for Applications).

1. Configura el formulario:

Asegúrate de tener un UserForm con al menos un TextBox (por ejemplo, TextBox1).

2. Añade un módulo de temporizador al UserForm:

En el editor de VBA, selecciona el UserForm y añade el siguiente código:

Private Sub UserForm_Initialize()
' Inicia el temporizador cuando el formulario se muestra
StartTimer
End Sub

Private Sub TextBox1_Change()
' Reinicia el temporizador cada vez que el usuario ingresa datos
ResetTimer
End Sub

Private Sub UserForm_Terminate()
' Detiene el temporizador cuando el formulario se cierra
StopTimer
End Sub

3. Crea el temporizador en un módulo aparte:

En el editor de VBA, inserta un nuevo módulo y pega el siguiente código:

Dim TimerActive As Boolean
Dim TimerInterval As Double
Dim TimerTime As Double

' Inicia el temporizador
Sub StartTimer()
TimerInterval = 10 ' Intervalo de 10 segundos
TimerTime = Now + TimeValue("00:00:" & TimerInterval)
TimerActive = True
Application.OnTime TimerTime, "CheckInactivity", , True
End Sub

' Detiene el temporizador
Sub StopTimer()
On Error Resume Next
Application.OnTime TimerTime, "CheckInactivity", , False
TimerActive = False
End Sub

' Reinicia el temporizador
Sub ResetTimer()
If TimerActive Then StopTimer
StartTimer
End Sub

' Verifica la inactividad
Sub CheckInactivity()
If TimerActive Then
' Si ha pasado el tiempo sin actividad, cierra el formulario
Unload UserForm1
End If
End Sub

Explicación:

StartTimer: Inicia un temporizador que cuenta 10 segundos.

StopTimer: Detiene el temporizador.

ResetTimer: Reinicia el temporizador cada vez que se detecta actividad en el TextBox.

CheckInactivity: Si no hay actividad después de 10 segundos, el formulario se cierra automáticamente.

Este código supervisará la inactividad en el formulario, y si no se realiza ninguna acción en el TextBox durante 10 segundos, el formulario se cerrará.

1 respuesta más de otro experto

Respuesta
1

Suponiendo que el textbox se llame TextA ¿Has probado con

Private Sub Form_Current()
Me.TimerInterval = 10000
End Sub
Private Sub Form_Timer()
If IsNull([TextA]) Then
DoCmd.Close acForm, "formulario1"
End If
End Sub

Gracias por responder, el código no funciona, quizá por que el formulario que tengo es en Excel. Disculpa la molestia.

El Excel no es lo mío, de hecho no tengo ni idea, pero me parece que tienes que crear una macro para cada una de las instrucciones ( una para el current y otra para el Timer, y en el código de la macro poner la instrucción.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas