2

我最近接管了一个非常旧的 Access 数据库。该数据库有大量编写的宏,用户可以利用这些宏来帮助他们导航和输入数据。因此,尽管这些宏是用 Access 97 编写的,但放弃代码并不是第一步。

我已经设法通过用新的函数调用删除不推荐使用的函数调用来使大部分代码工作,但是有几种形式仍然不能正常工作。如果我能弄清楚如何解决一个问题,我相信我可以解决其他问题。

主宏有一个带有几个按钮的菜单。每当我单击一个按钮时,我都会收到“OpenForm 操作已取消”错误。该按钮的代码如下:

Option Compare Database   'Use database order for string comparisons

Private Sub Form_Open(Cancel As Integer)
    If IsLoaded("ServiceCircuit") Then
        Me![PropBtn].Visible = True
    Else
        Me![PropBtn].Visible = False
    End If

End Sub

Private Sub Form_Unload(Cancel As Integer)
    If IsLoaded("ServiceCircuit") Then
        Forms![ServiceCircuit].Visible = True
        Forms![ServiceCircuit]![CircuitPrefix].Requery
        Forms![ServiceCircuit]![CircuitPrefix] = Forms![Circuit]![CircuitPrefix]
        Forms![ServiceCircuit]![CircuitBase].Requery
        Forms![ServiceCircuit]![CircuitBase] = Forms![Circuit]![CircuitBase]
        'Forms!ServiceCircuit.Refresh
        Exit Sub
    Else
        If IsLoaded("DedicatedService") Then
            Forms![DedicatedService].Visible = True
            Forms!DedicatedService.Refresh
            Exit Sub
        End If

        If IsLoaded("Property") Then
            Forms![Property].Visible = True
            Forms!Property.Refresh
            Exit Sub
        End If
    End If
End Sub

Private Sub GRC_GotFocus()
    Me![GRC].Requery

End Sub

Private Sub PropBtn_Click()
    DoCmd.Close

    If IsLoaded("ServiceCircuit") Then
        Forms![ServiceCircuit].Visible = True
        DoCmd.Close
        'Forms![ServiceCircuit]![CircuitPrefix].Requery
        'Forms![ServiceCircuit]![CircuitPrefix] = Forms![Circuit]![CircuitPrefix]
        'Forms![ServiceCircuit]![CircuitBase].Requery
        'Forms![ServiceCircuit]![CircuitBase] = Forms![Circuit]![CircuitBase]
        'Forms!ServiceCircuit.Refresh
        Exit Sub
    Else
        If IsLoaded("DedicatedService") Then
            Forms![DedicatedService].Visible = True
            DoCmd.Close
            'Forms!DedicatedService.Refresh
            Exit Sub
        End If

        If IsLoaded("Property") Then
            Forms![Property].Visible = True
            Forms!Property.Refresh
            Exit Sub
        End If
    End If

End Sub

Private Sub Tariff_NotInList(NewData As String, Response As Integer)
    dumbvar = AddRecFromCombo(NewData, "Tariff")

    '  Continue without displaying default error message.
    Response = DATA_ERRCONTINUE

End Sub

我对 VB 非常陌生,并且一直在摸索成功,但我对如何解决这个问题或问题可能是什么感到困惑。

更新:

我在主菜单窗体中设置了一个断点。实际按钮的代码是:

Private Sub CircuitBtn_Click()
On Error GoTo Err_CircuitBtn_Click

    Dim DocName As String
    Dim LinkCriteria As String

    DocName = "Circuit"
    DoCmd.OpenForm DocName, , , LinkCriteria

Exit_CircuitBtn_Click:
    Exit Sub

Err_CircuitBtn_Click:
    MsgBox Err.description
    Resume Exit_CircuitBtn_Click

单步执行DoCmd.OpenForm DocName, , , LinkCriteria代码运行,然后跳转到Err_CircuitBtn_Click. 我不相信我可以在其他地方设置断点。不确定为什么会跳到错误,主窗体上的其他按钮以相同的方式编码(在主窗体上)。我尝试在第一块代码中设置一些断点(一旦假设弹出表单的代码),但断点从未被捕获。我猜断点永远不应该到达,因为如果我在那个表单上点击一个按钮,那是执行的脚本,对吗?

4

4 回答 4

1

“OpenForm 操作已取消”是当表单(“电路”)未正确打开时出现的错误。

该代码是由向导生成的,“Docname”和“LinkCriteria”都是多余的。通过输入在即时窗口中尝试

`DoCmd.OpenForm "Circuit"`
于 2013-01-03T10:23:37.317 回答
1

刚刚遇到同样的问题并设法解决它。

问题是我最初是[B]通过复制另一个表单来创建表单的[A]。出于这个原因,[B]与.recordsourcerecordsource[A]

我已经重命名了表单查询[A and B] recordsource。我对[A](需要记录源的)进行了更新,但没有意识到[B]也需要更新。

修复(对我而言)是删除recordsourcefrom,[B]因为不需要绑定表单。也就是说,对其他人的修复可能是更正recordsource他们在开发过程中可能已更改的属性值或其他属性值。

于 2014-12-31T16:09:46.333 回答
0

我刚刚在访问 365 时遇到了这个问题。我将数据库设置为安装在我的客户位置。这包括删除链接表,以便它们可以在其网络上的客户端位置重新链接。

在测试 accde 文件时,它说 OpenForm 操作已取消。挠了挠头后,我回到了制作acde的文件。我遇到了同样的问题。我以为这可能是我的定制丝带,但不是。

然后我反编译了该文件的 VBA,希望我能得到答案,不。然后我一起消除了功能区并尝试直接打开表单。它说记录源不存在。我当时想,“哦,是的,我正看着它。”

然后我尝试打开记录源(在这种情况下为查询),它说找不到表。

哦,当然。我删除了所有指向数据表的链接。

于 2020-10-15T16:55:17.917 回答
-1

I guess you don't need the answer anymore (It's been a while since you asked it), but I write a solution for others:

On Error GoTo ErrorHandler

' Insert code that might generate an error here

DoCmd.OpenQuery "query_name"

Exit Sub

ErrorHandler:

' Insert code to handle the error here

MsgBox "The query did not run"

Resume Next

于 2014-12-01T15:10:15.303 回答