我最近接管了一个非常旧的Access数据库。该数据库具有大量的宏,用户可以利用这些宏来帮助他们导航和输入数据。因此,尽管这些宏是用Access 97编写的,但放弃代码并不是第1步。...
我已经设法通过用新的函数删除不推荐使用的函数调用来使大多数代码正常工作,但是有两种形式仍然无法正常工作。如果我能解决一个问题,那么我肯定可以解决其他问题。
主宏具有一个带有多个按钮的菜单。每当我单击一个按钮时,都会出现“ 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还是很陌生,并且一直在设法解决成功问题,但是我对如何解决这个问题或问题可能会感到困惑。
UPDATE:
我在主菜单表单中设置了一个断点。实际按钮的代码为:
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
。我不相信我可以在其他地方设置断点。不确定为什么会跳转到错误,主窗体上的其他按钮以相同的方式编码(在主窗体上)。我尝试在代码的第一块中设置一些断点(一旦弹出该窗体的代码),但是断点从未被捕获。我猜应该永远都不会到达断点,因为如果我点击该表单上的按钮,那将执行脚本,对吗?
“ OpenForm操作被取消”是当表单(“电路”)无法正确打开时出现的错误。
该代码是由向导生成的,“ Docname”和“ LinkCriteria”都是多余的。通过输入
在立即窗口中尝试`DoCmd.OpenForm "Circuit"`
刚刚遇到了相同的问题并设法解决。
问题是,我最初是通过复制另一个表格[B]
来创建表格[A]
的。因此,[B]
与recordsource
具有相同的recordsource
(即使它不需要[A]
)。
我已将查询重命名为表单的[A and B]
recordsource
。我对[A]
(需要一个记录源的那个)进行了更新,但是没有意识到[B]
也需要一个更新。
(对于我来说,解决方法是从recordsource
中删除[B]
,因为不需要绑定表格)。也就是说,针对他人的解决方案可能是纠正他们在开发过程中可能已更改的recordsource
或其他属性值。
我认为表格处于模式模式。在这种情况下,也许它需要先关闭表单再尝试调用它。
我想您不再需要答案了(自您提出以来已经有一段时间了,但是我为其他人写了一个解决方案:
出现错误时转到ToErrorHandler
'在此处插入可能会产生错误的代码
DoCmd.OpenQuery“ query_name”
退出子
的ErrorHandler:
'在此处插入代码以处理错误
MsgBox“查询未运行”
继续下一个