如何在按下按钮注销时关闭所有打开的 forms/reports 等?

How to close all open forms/reports etc. when a button is pressed to log out?

我正在为作业制作数据库。

当您登录时,它会检查用户是否是管理员。管理员可以访问不同的表单。

我的注销按钮会打开登录表单,他们在登录之前无法执行任何其他操作。

如果管理员在注销时没有关闭他们的管理员特定表单,那么非管理员可以登录到他们的帐户,管理员未能关闭的表单仍将打开。

如何在按下按钮注销时关闭所有打开的 forms/reports 等?

由于我们在循环期间关闭表单,因此将它们从表单集合中移除,因此需要这种循环:

Public Sub Logout()

    Dim F As Access.Form
    Dim i As Long
    
    ' Loop all open forms, from last to first, to avoid problems due to closing forms
    ' (removing them from the Forms collection) in the loop
    For i = Forms.Count - 1 To 0 Step -1
        Set F = Forms(i)
        ' Close all forms except the login form
        If F.Name <> "frmLogin" Then
            DoCmd.Close acForm, F.Name
        End If
    Next i
    
End Sub

当然 Reports 系列也是如此。


一般来说,循环集合的一种更简单的方法是使用 For Each,但如果在循环过程中删除了集合成员,这将不起作用。
感谢 Blackbath 和 DecoMartins 指出这一点。

    Dim varF As Variant
    ' Loop all open forms
    For Each varF In Forms
        If varF.Name <> "frmLogin" Then
            ' Do something with varF
        End If
    Next varF