当If语句出现时,新记录命令在管理模式下工作但不是正常模式

时间:2018-04-26 20:10:27

标签: vba ms-access access-vba

我的智慧结束了。这似乎应该是世界上最直接的事情。我有一个窗体上的按钮,按下时应该开始一个新的记录。这是按钮中的代码

Private Sub NewLocProLink_Click()

    mbResult = MsgBox("Are you sure you would like to add a new provider to 
    location relationship?", vbYesNo, "New location to provider relationship")

    If mbResult = vbYes Then
        DoCmd.GoToRecord , "", acNewRec
    ElseIf mbResult = vbNo Then
        MsgBox ("No new record")
    End If

End Sub

此代码不起作用。当我点击"是"看起来似乎没有任何事情发生。但是,当我点击"否"我确实收到了我的测试MsgBox,上面写着"没有新记录"。所以我知道代码输入了我的If语句。

现在这是奇怪的部分。当我以管理模式访问数据库时(通过在我输入时按住shift键)并测试按钮,它可以工作。但是当我关闭数据库并返回而没有按住shift并按下按钮时,它不起作用。

如果我编辑按钮的代码只有命令转到新记录而没有这样的确认消息框:

Private Sub NewLocProLink_Click(
    DoCmd.GoToRecord , "", acNewRec
End Sub

然后它在两种模式下都能正常工作。不过,我真的想要一个确认框。仅供参考,我无法想到为什么这很重要,但按钮是在子窗体上。但是子窗体是我想要创建新记录的地方,因此这是按钮所属的位置。任何想法都将不胜感激。

另外一条信息,我不确定它为什么会产生影响,但也许有人知道它可能是我的所有表都使用ODBC连接来链接到SQL Server 2014中的表。

2 个答案:

答案 0 :(得分:1)

问题是焦点。如果弹出消息框,则消息框具有焦点。由于您没有指定要导航的表单,因此失败。

一个简单的解决方案是使用表单记录集来导航:

Private Sub NewLocProLink_Click()
    mbResult = MsgBox("Are you sure you would like to add a new provider to 
    location relationship?", vbYesNo, "New location to provider relationship")

    If mbResult = vbYes Then
        Me.Recordset.AddNew
    ElseIf mbResult = vbNo Then
        MsgBox ("No new record")
    End If
End Sub

答案 1 :(得分:0)

由于您尝试访问的记录位于子表单上,因此将该对象声明为DoCmd.GoToRecord的一部分," [对象名称]",acNewRec。

这可以解决您的问题。

编辑:

我应该澄清一下我的意思:

(假设您的表格为" Form1"子表格为" Form2")

Forms!Form1!Form2.SetFocus DoCmd.GoToRecord , "", acNewRec