我在访问表单上遇到了一些问题。
我有两种形式:
输入表单空闲一分钟后,我想关闭它并返回菜单表单。
这是我的代码,它不起作用。
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
我还在其中创建了一个宏。
Sub FormExpire()
Unload input-form
End Sub
答案 0 :(得分:1)
您需要将form.Timer
设置为60000(即1分钟),然后在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
答案 1 :(得分:0)
这里有几个潜在的问题。 首先,这不是你关闭表格的方式。
此:
Sub FormExpire()
Unload input-form
End Sub
应该看起来像这样:
Sub FormExpire()
DoCmd.Close acform, Me.Name
DoCmd.OpenForm "menu-form"
End Sub
您的第二个问题是我不相信Access可以使用Application.Ontime
方法。 MSDN说它是Excel函数,我在Access Documentation中找不到它。我个人有兴趣看到你让你的方法与Access form Timer Event一起使用。
我不确定这是否重要,但我认为这就是你要做的事情。
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
如果不包括@ iDevelop的answer,我不确定这种方法是否可行。我只是想帮助澄清你哪里出错了。
答案 2 :(得分:0)
我意识到这个线程已经过时了,但我最近遇到了需要从计时器事件中关闭表单的情况,并在这里找到了答案。我的情况略有不同,因为我有几个表单要关闭,所以这是我的解决方案。
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