【问题标题】:Opening one form from another form and closing original form from command click从另一个表单打开一个表单并从命令单击关闭原始表单
【发布时间】:2015-02-27 05:15:51
【问题描述】:

我创建了一个登录表单,当单击“打开数据库”按钮时会打开另一个表单。当单击按钮打开另一个表单时,我试图让原始表单“UserInformation”关闭。我正在尝试各种 VBA 代码,但似乎没有任何效果。我通过向导创建了按钮,然后将宏转换为 vba 代码。

Private Sub cmdOpenDatabase_Click()

If IsNull(Me.txtFirstName) Then
MsgBox ("Please enter First Name")
Me.txtFirstName.SetFocus
Cancel = True
Exit Sub
End If

If IsNull(Me.txtLastName) Then
MsgBox ("Please enter Last Name")
Me.txtLastName.SetFocus
Cancel = True
Exit Sub
End If

If IsNull(Me.txtEmployee) Then
MsgBox ("Please enter Employee ID")
Me.txtEmployee.SetFocus
Cancel = True
Exit Sub
End If

On Error GoTo cmdOpenDatabase_Click_Err

    DoCmd.OpenForm "Standards", acNormal, "", "", , acNormal

cmdOpenDatabase_Click_Exit:
    Exit Sub

cmdOpenDatabase_Click_Err:
    MsgBox Error$
    Resume cmdOpenDatabase_Click_Exit

End Sub

【问题讨论】:

    标签: forms ms-access vba


    【解决方案1】:

    在调用DoCmd.OpenForm 打开另一个表单后,调用DoCmd.Close 获取当前表单 (Me.Name)。注意 acNormal 不是 OpenForm WindowMode 选项支持的值;我猜你想要 acWindowNormal 代替。

    'DoCmd.OpenForm "Standards", acNormal, "", "", , acNormal
    DoCmd.OpenForm "Standards", acNormal, , , , acWindowNormal
    DoCmd.Close acForm, Me.Name
    

    还要考虑包含选项名称是否使您的代码更易于理解:

    DoCmd.OpenForm FormName:="Standards", View:=acNormal, WindowMode:=acWindowNormal
    DoCmd.Close ObjectType:=acForm, ObjectName:=Me.Name
    

    最后,Cancel = True 在命令按钮单击事件过程中没有完成任何事情。事实上,在表单模块的声明部分中使用Option ExplicitCancel 将在那里触发编译错误(“变量未定义”)。作为标准做法,您应该在所有代码模块中包含Option Explicit

    这是您的程序的替代版本...

    Private Sub cmdOpenDatabase_Click()
        Dim blnMissingData As Boolean
    
        If IsNull(Me.txtFirstName) Then
            MsgBox "Please enter First Name"
            Me.txtFirstName.SetFocus
            blnMissingData = True
        End If
    
        If IsNull(Me.txtLastName) Then
            MsgBox "Please enter Last Name"
            Me.txtLastName.SetFocus
            blnMissingData = True
        End If
    
        If IsNull(Me.txtEmployee) Then
            MsgBox "Please enter Employee ID"
            Me.txtEmployee.SetFocus
            blnMissingData = True
        End If
    
        On Error GoTo cmdOpenDatabase_Click_Err
    
        If Not blnMissingData Then
            DoCmd.OpenForm FormName:="Standards", View:=acNormal, WindowMode:=acWindowNormal
            DoCmd.Close ObjectType:=acForm, ObjectName:=Me.Name
        End If
    
    cmdOpenDatabase_Click_Exit:
            Exit Sub
    
    cmdOpenDatabase_Click_Err:
            MsgBox Error$
            Resume cmdOpenDatabase_Click_Exit
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-03
      • 1970-01-01
      • 2020-08-04
      • 2013-06-22
      相关资源
      最近更新 更多