我最近接手了一个非常古老的Access数据库。该数据库具有写入的TON宏,用户可以使用它来帮助他们导航和输入数据。因此,抛弃代码不是第1步,尽管这些宏是用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
。我不相信我可以在别处设置断点。不确定为什么会跳到错误,主窗体上的其他按钮以相同的方式编码(在主窗体上)。我尝试在第一块代码中设置一些断点(一旦假设弹出窗口的代码),但断点永远不会被捕获。我猜测永远不应该达到断点,因为如果我按下那个窗体上的一个按钮就会执行该脚本,对吗?
答案 0 :(得分:1)
“取消OpenForm操作”是表单(“电路”)无法正确打开时出现的错误。
该代码由向导生成,“Docname”和“LinkCriteria”都是多余的。通过输入
在即时窗口中尝试`DoCmd.OpenForm "Circuit"`
答案 1 :(得分:1)
刚刚遇到同样的问题并设法修复它。
问题在于我最初通过复制另一个表单[B]
来创建表单[A]
。出于这个原因,[B]
具有相同的recordsource
(即使它不需要recordsource
)[A]
。
我已经重命名了表单' [A and B]
recordsource
。我对[A]
(需要记录源的那个)进行了更新,但没有意识到[B]
也需要更新。
修复(对我而言)是从recordsource
删除[B]
,因为表单不需要绑定。也就是说,对其他人的修正可能是纠正他们在开发过程中可能已经改变的recordsource
或其他属性值。
答案 2 :(得分:0)
我只是在访问365上遇到了这个问题。我将数据库设置为要安装在我的客户位置。这包括删除链接表,以便可以在其网络上的客户端位置重新链接它们。
在测试accde文件时,它说OpenForm操作已取消。挠头之后,我回到了制作配件的文件。我有同样的问题。我以为这可能是我自定义的功能区,但是没有。
然后我反编译了该文件的VBA,希望得到答案,不。然后,我一起消除了功能区,并尝试直接打开表格。它说记录源不存在。我当时想,“哦,是的,我正在看它。”
然后我尝试打开记录源(在这种情况下为查询),并说找不到表。
当然。我删除了所有到数据表的链接。
答案 3 :(得分:-1)
我想你不再需要答案了(自从你问过它已经有一段时间了),但我为别人写了一个解决方案:
错误GoTo ErrorHandler
'插入可能在此处生成错误的代码
DoCmd.OpenQuery" query_name"
退出子
的ErrorHandler:
'插入代码来处理错误
MsgBox"查询没有运行"
继续下一步