いつもお世話になっています。
今回はフォームAからフォームB(F受注Main)を開いてそれに配置してます「閉じる」ボタンをクリックした時に ”実行時エラー3079 レコードに検索キーが見つかりませんでした”のメッセージが出ます。無視してフォーム右上の×を押すと普通に閉じる時と変更してないのに変更しますかのメッセージが出る場合があります。
フォームAのフォームBを開くコマンドボタンには下記コードを記述してます。
Dim meisaiID As Variant, jtID As Variant
meisaiID = Me.[txSubの出荷品目ID]
jtID = Me.[tx受注ID]
DoCmd.OpenForm "F受注Main", acNormal, WhereCondition:="[受注ID]=" & jtID
DoCmd.Maximize
Forms!F受注Main!F受注Sub.SetFocus
Forms!F受注Main![F受注Sub].Form![受注明細ID].SetFocus
DoCmd.FindRecord meisaiID
★Bフォームはメイン/サブになっていましてサブの指定レコードにフォーカス移動させてます
フォームBの閉じるボタンには下記コード記述
If proSubCk = False Then '受注IDあり時のサブフォームの件数0
Exit Sub
End If
DoCmd.Close acForm, Me.Name
proSubCkはプロシージャで下記コード。
Public Function proSubCk() As Boolean
If Not IsNull(Me.[受注ID]) And Me!F受注Sub.Form.RecordsetClone.RecordCount = 0 Then
MsgBox "受注内容の入力がありません。" & vbNewLine & "入力途中では実行出来ません。"
Me.[受注日付].SetFocus
proSubCk = False '戻り値設定
Exit Function
End If
proSubCk = True '戻り値設定
End Function
★フォームBのメインに入力ありでサブが未入力防止の為にこうしてます
フォームBに試しで DoCmd.Close acForm, Me.Name だけのボタンを配置して実行するとメッセージは出ません。
理由がわからないです。コードの問題でしょうか?
まずは、
フォームBの閉じるボタンのコードにブレークポイントを設定してステップ実行したときにどのコードでエラーが発生するか確認してみてください。
hatenaさん ありがとうございます。
恥ずかしながらブレークポイントを設定してステップ実行のデバッグはしたことがないのです。
ブレークポイント付けてからはどう進めるといいでしょうか?
今回の場合 DoCmd.Close acForm, Me.Nameの前には下記プロシージャだけですのでどこにポイント付けたらいいでしょうか? ステップ実行はどう実行させたらいいでしょうか?
Public Function proSubCk() As Boolean
If Not IsNull(Me.[受注ID]) And Me!F受注Sub.Form.RecordsetClone.RecordCount = 0 Then
MsgBox "受注内容の入力がありません。" & vbNewLine & "入力途中では実行出来ません。"
Me.[受注日付].SetFocus
proSubCk = False '戻り値設定
Exit Function
End If
proSubCk = True '戻り値設定
End Function
大変初歩的な事ですみません。
下記をご参考に。
【ExcelVBA入門】VBAでデバッグするための方法とは? | 侍エンジニアブログ
If proSubCk = False Then '受注IDあり時のサブフォームの件数0
の行にブレークポイントを設定して、閉じるボタンをクリックして実行して止まったらステップイン(F8)で1行ずつすすめることができます。
hatenaさん ありがとうございます。
ブレークポイントは前々から気になってたのですが今回やっと使い方が分かりました(まだまださわりだけですが)。
閉じるボタンのIf・・・にポイント設定してF8で進めるとプロシージャ部に移りF8で進めると”オートメーション エラーです。(Error 440)” となりました。これは何を意味しているのでしょうか?
その後ですが、何かが破損しているのかなと思い新たなファイルを作成し全オブジェクトをインポートしましたら、その新ファイルはこの挙動は出なくなりました。原因は不明ですが。
そのエラーがでるときはたいていファイルの破損が原因ですね。
まずは、最適化、修復を実行してそれでも解決しない場合、
新規ファイルにインポートでたいていはなおります。
ただ、それでも治らない場合もありますので、
定期的、かつ複数世代のバックアップをを取っておくのは必須ですね。
hatenaさん ありがとうございます。
ACCESSはまめなバックアップが必用ですね、気をつけます。
お世話になりました。