我最近接管了一个非常旧的 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
. 我不相信我可以在其他地方设置断点。不确定为什么会跳到错误,主窗体上的其他按钮以相同的方式编码(在主窗体上)。我尝试在第一块代码中设置一些断点(一旦假设弹出表单的代码),但断点从未被捕获。我猜断点永远不应该到达,因为如果我在那个表单上点击一个按钮,那是执行的脚本,对吗?