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á.