Access 2010 VBA:为啥这个表单打开和关闭序列不起作用?

Posted

技术标签:

【中文标题】Access 2010 VBA:为啥这个表单打开和关闭序列不起作用?【英文标题】:Access 2010 VBA: Why doesn't this sequence of form openings and closings work?Access 2010 VBA:为什么这个表单打开和关闭序列不起作用? 【发布时间】:2014-06-30 13:54:44 【问题描述】:

我有一个带有命令按钮的表单“Form1”,单击该按钮时会隐藏自身,然后打开另一个表单“Form2”,如下所示:

Private Sub Command1_Click()
    Me.Visible = False
    DoCmd.OpenForm "Form2"
End Sub

Form2 的 Form_Open 子例程包含错误检查。如果发现错误,我希望Form2显示错误,关闭Form1,然后关闭自己:

Private Sub Form_Open(Cancel As Integer)
    AnError = 'check for an error
    If Not AnError Then
        'things are OK
     Else
        Response = MsgBox("There was an error in Form2.", 0, "Form2 error message")
        DoCmd.Close acForm, "Form1"
        DoCmd.Close
    End If
End Sub

我在这个方案上尝试了许多变体来打开和关闭表单,但都以不同的方式失败。除了在显示错误消息后实际关闭 Form2 之外,这个特定的似乎可以做所有事情。

我再次对 Access 2010 VBA 处理表单打开和关闭的方式感到困惑。 MSDN 上的参考信息非常糟糕。感谢您的帮助。

【问题讨论】:

您的代码看起来很合理。您是否验证过代码不仅到达 DoCmd.Close 并且没有在该行抛出错误? 【参考方案1】:

你很接近。 - 此代码也将关闭 Form2:

Private Sub Form_Open(Cancel As Integer)
'AnError = 'check for an error
    If Not True Then
        'things are OK
    Else
        Response = MsgBox("There was an error in Form2.", 0, "Form2 error message")
        DoCmd.Close acForm, "Form1"
        DoCmd.Close acForm, Me.Name 'Me.Name is used for illustration purposes, you can  also use "Form2" 
    End If
End Sub

【讨论】:

【参考方案2】:

我一直看到这是通过 UnLoad 关键字完成的

试试这个,

If Not AnError Then
        'things are OK
     Else
        Response = MsgBox("There was an error in Form2.", 0, "Form2 error message")
        Unload Form1
        'Unload Me
        'OR since you can cancel this form loading
        Cancel = True
    End If

【讨论】:

【参考方案3】:

尝试更改为 Me 对象:

Private Sub Form_Open(Cancel As Integer)
    AnError = 'check for an error
    If Not AnError Then
        'things are OK
     Else
        Response = MsgBox("There was an error in Form2.", 0, "Form2 error message")
        DoCmd.Close acForm, "Form1"
        Me.Close
        ' or possibly Unload Me
    End If
End Sub

【讨论】:

以上是关于Access 2010 VBA:为啥这个表单打开和关闭序列不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

使用 VBA 在 Access 2010 中的表单上显示记录集

VBA IDE Access 2010。尝试打开即时窗口时找不到文件

从 Access 2010 VBA 打开 Excel 2010 文件

vba access 2010更新过滤子表单

Access表单中如何处理点击功能

从 VBA 调用表单