最近、非常に古い Access データベースを引き継ぎました。このデータベースには、ユーザーがナビゲートしてデータを入力するのに役立つマクロがたくさん書かれています。したがって、これらのマクロが Access 97 で作成されたという事実にもかかわらず、コードを捨てることはステップ #1 ではありません....
非推奨の関数呼び出しを新しい関数呼び出しで削除することで、ほとんどのコードを機能させることができましたが、まだ正しく機能しない形式がいくつかあります。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に非常に慣れていないので、うまくいっていませんでしたが、これにどのように取り組むことができるか、または問題が何であるかについて困惑しています。
アップデート:
メイン メニュー フォームにブレークポイントを設定しました。実際のボタンのコードは次のとおりです。
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
ます。他の場所にブレークポイントを設定できるとは思いません。これがエラーにジャンプする理由がわからない場合、メイン フォームの他のボタンは同じようにコーディングされています (メイン フォーム上)。コードの最初のチャンク (ポップアップするフォームのコード) にいくつかのブレークポイントを設定しようとしましたが、ブレークポイントがキャッチされません。そのフォームのボタンを押した場合に実行されるスクリプトであるため、ブレークポイントに到達することは決してないと思いますよね?