Ms access 在一定空闲时间后自动关闭窗体

Ms access 在一定空闲时间后自动关闭窗体,ms-access,timer,vba,ms-access-2010,Ms Access,Timer,Vba,Ms Access 2010,我的访问表单有点问题 我有两张表格: 菜单形式 输入表格 输入表单闲置一分钟后,我想关闭它并返回菜单表单 这是我的代码,不起作用 Public ExpireTime As Date 'expiration time-date value Sub ResetExpiration() If ExpireTime <> 0 And ExpireTime > Now Then Application.OnTime Exp

我的访问表单有点问题

我有两张表格:

  • 菜单形式
  • 输入表格
输入表单闲置一分钟后,我想关闭它并返回菜单表单

这是我的代码,不起作用

Public ExpireTime    As Date  'expiration time-date value

Sub ResetExpiration()             

    If ExpireTime <> 0 And ExpireTime > Now Then
        Application.OnTime ExpireTime, "FormExpire", schedule:=False
    End If

    ExpireTime = Now + 1 / 1440#    

    Application.OnTime ExpireTime, "FormExpire", schedule:=True

End Sub

您需要将
form.Timer
设置为60000(即1分钟),然后使用on
OnTimer
事件检查某些属性是否已更改。下面我很快写了一些东西给你一个想法,但它既不完整也没有经过测试

Option Compare Database
Option Explicit

Dim isIdle As Boolean


Private Sub Form_LostFocus()
    'you can use this event also
End Sub


Private Sub Form_Timer()
    Dim ctlName As String, wasDirty As Boolean
    If ctlName = vbNullString Then ctlName = Me.ActiveControl.Name
    If Me.ActiveControl <> ctlName Then isIdle = False
    If wasDirty <> Me.Dirty Then isIdle = False
    'more checks....
    If isIdle Then DoCmd.Close acForm, Me.Name
End Sub
选项比较数据库
选项显式
Dim Isidel作为布尔值
私人子表_LostFocus()
'您也可以使用此事件
端接头
专用子窗体_计时器()
Dim ctlName为字符串,wasDirty为布尔值
如果ctlName=vbNullString,则ctlName=Me.ActiveControl.Name
如果Me.ActiveControl ctlName,则isIdle=False
如果是肮脏的我。肮脏的,那么isIdle=False
“更多的支票。。。。
如果是isIdle,则DoCmd.Close acForm,Me.Name
端接头

这里有几个潜在问题。 首先也是最重要的,这不是关闭表单的方式

这:

应该看起来更像这样:

Sub FormExpire()
    DoCmd.Close acform, Me.Name
    DoCmd.OpenForm "menu-form"
End Sub
您的第二个问题是,我不相信Access提供了
应用程序.Ontime
方法。说这是一个Excel函数,但我在。我个人很有兴趣看到你们们将你们们的方法运用到实际工作中

我不确定这有什么关系,但我想这就是你想要做的

Public ExpireTime    As Date  'expiration time-date value

Private Sub InputForm_Timer()             

    If ExpireTime <> 0 And ExpireTime > Now Then
        Call FormExpired
    Else
        ' reset timer
        ExpireTime = Now + 1 / 1440#             
    End If

End Sub
Public ExpireTime As Date'到期时间日期值
专用子输入形式_计时器()
如果ExpireTime 0和ExpireTime>Now则
电话已过期
其他的
'重置计时器
过期时间=现在+1/1440#
如果结束
端接头

如果不包括@iDevelop,我不确定这种方法是否有效。我只是想帮你弄清楚哪里出了问题

我意识到这个线程已经过时了,但我最近遇到了一个需要从计时器事件关闭表单的问题,并在这里找到了答案。我的情况稍有不同,因为我有几个表单要关闭,所以这里是我的解决方案

Private Sub Form_Timer()

Dim daysRemaining As Integer
Dim endDate As Date

endDate = "4/15/2021"

daysRemaining = DateDiff("d", Now, endDate)
 
MsgBox ("This is an evaluation version of the application. You have " & Str(daysRemaining) & " days of use remaining")
    
If daysRemaining < 1 Then
    Close_All
End If

End Sub

Private Sub Close_All()
    For Each myForm In CurrentProject.AllForms
        strFormName = myForm.name
        DoCmd.Close acForm, strFormName
    Next

End Sub
Private子表单_Timer()
Dim Days以整数形式保留
Dim endDate作为日期
endDate=“4/15/2021”
daysRemaining=DateDiff(“d”,现在,endDate)
MsgBox(“这是应用程序的评估版本。您有”&Str(daysRemaining)和“剩余使用天数”)
如果daysRemaining<1,则
闭嘴
如果结束
端接头
私人分包关闭_All()
对于CurrentProject.AllForms中的每个myForm
strFormName=myForm.name
DoCmd.Close acForm,strFormName
下一个
端接头
Public ExpireTime    As Date  'expiration time-date value

Private Sub InputForm_Timer()             

    If ExpireTime <> 0 And ExpireTime > Now Then
        Call FormExpired
    Else
        ' reset timer
        ExpireTime = Now + 1 / 1440#             
    End If

End Sub
Private Sub Form_Timer()

Dim daysRemaining As Integer
Dim endDate As Date

endDate = "4/15/2021"

daysRemaining = DateDiff("d", Now, endDate)
 
MsgBox ("This is an evaluation version of the application. You have " & Str(daysRemaining) & " days of use remaining")
    
If daysRemaining < 1 Then
    Close_All
End If

End Sub

Private Sub Close_All()
    For Each myForm In CurrentProject.AllForms
        strFormName = myForm.name
        DoCmd.Close acForm, strFormName
    Next

End Sub