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。尝试打开即时窗口时找不到文件