Microsoft Access 掲示板

他のフォームを開いて閉じる時にエラー

7 コメント
views

いつもお世話になっています。
今回はフォーム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 だけのボタンを配置して実行するとメッセージは出ません。

理由がわからないです。コードの問題でしょうか?

  

beginner
作成: 2025/01/08 (水) 13:05:47
通報 ...
1

まずは、
フォームBの閉じるボタンのコードにブレークポイントを設定してステップ実行したときにどのコードでエラーが発生するか確認してみてください。

2
beginner 2025/01/09 (木) 12:43:53 61dd6@35596

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
大変初歩的な事ですみません。

3

下記をご参考に。

【ExcelVBA入門】VBAでデバッグするための方法とは? | 侍エンジニアブログ

  If proSubCk = False Then  '受注IDあり時のサブフォームの件数0
の行にブレークポイントを設定して、閉じるボタンをクリックして実行して止まったらステップイン(F8)で1行ずつすすめることができます。

4
beginner 2025/01/10 (金) 10:28:39 61dd6@35596

hatenaさん ありがとうございます。
ブレークポイントは前々から気になってたのですが今回やっと使い方が分かりました(まだまださわりだけですが)。
閉じるボタンのIf・・・にポイント設定してF8で進めるとプロシージャ部に移りF8で進めると”オートメーション エラーです。(Error 440)” となりました。これは何を意味しているのでしょうか?

5
beginner 2025/01/10 (金) 12:22:30 61dd6@35596

その後ですが、何かが破損しているのかなと思い新たなファイルを作成し全オブジェクトをインポートしましたら、その新ファイルはこの挙動は出なくなりました。原因は不明ですが。

6

そのエラーがでるときはたいていファイルの破損が原因ですね。
まずは、最適化、修復を実行してそれでも解決しない場合、
新規ファイルにインポートでたいていはなおります。
ただ、それでも治らない場合もありますので、
定期的、かつ複数世代のバックアップをを取っておくのは必須ですね。

7
beginner 2025/01/10 (金) 16:33:39 61dd6@35596

hatenaさん ありがとうございます。
ACCESSはまめなバックアップが必用ですね、気をつけます。
お世話になりました。