ここ最近連投になり誠に申し分けありません。
メイン/サブフォームで主に新規レコード入力にサブフォームにレコードが1件もないのを防ぐ為に下記コードをプロシージャにして閉じる時やメインのレコード移動時にCallで呼び出して処理させています。(中途半端な入力防止・受注IDはオートナンバー)
Public Function proSubCk() As Boolean
'プロシージャ(pro_SubCk)の作成★受注IDあり時のサブフォームレコードなしのチェック
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
これは機能しているのですが、フォームを新規レコードで開き未入力状態でデザインビューにしようとすると
実行時エラー'2455' (指定した式に、Form/Reportプロパティに対する正しくない参照が含まれます)のメッセージが出ます。
メッセージボックスの「デバッグ」ではなく「終了」にするとデザインビューになります。特に動作上問題なさそうなので気にしてなかったのですが(WIN7の古いPC)、やや新しいPC(WIN10)では「終了」にしてもデザインビューにはなりません。
コード内容がよくないのでしょうか?
上記のCallしている部分のイベントプロシージャ(閉じる時、レコード移動時)も提示してもらえますか。
このときにデバッグボタンを押すとどのコードが反転表示されますか。
hatenaさん ありがとうございます。
記載間違えました。Callでなく 下記コードで閉じるボタンやメインの移動ボタンに処理させています。
デバッグでは If Not IsNull(Me.[受注ID]) And Me!F受注Sub.Form.RecordsetClone.RecordCount = 0 Then 部が黄色塗りつぶしになります。
因みにこのフォームだけでなく色々なメイン/サブフォームに同様の処理させてますが、同じ現象になってます。
「閉じる時」イベントではなく「閉じるボタン」の「クリック時」にそのコードを設定しているということですか。
hatenaさん Form_Unloadイベント時とボタンクリック時の両方に記述してます。
Form_Unloadイベント時ですね。
当方でサンプルを作成して確認したら同様のエラーがでました。
フォームビューからデザインビューに切り替えるとForm_Unloadイベントが発生しますが、通常の閉じる動作と異なる動きをするようです。なんとかならないかちょっといろいろ試してみましたが、難しいですね。
エラー処理を入れればそのエラーを無視するようにはできますが、そのためだけに余分なコードを追加するのも本末転倒のような気がします。
運用時にはフォームビューからデザインビューに切り替えられないようにしておかないとトラブルの元なるのでそのような設定にすべきですし、開発時はフォームビューから直接デザインビューに切り替えないようにすれば済む話だと思います。
hatenaさん ありがとうございます。コード自体に問題はなさそうなので安心しました(私の知識不足で間違ったままだと、よくないと思ったので)。因みに”フォームビューからデザインビューに切り替えられないように” はどうやって可能になるのでしょうか?
いろいろ方法はありますが、
簡単かつ実なのはACCDEファイルに変換してユーザーにはACCDEファイルを配布する方法ですね。
ACCDEファイルはデータペーストして使用はできるがデザインビューやVBAは表示できないファイル形式です。
ACCDBファイルで解決して、完成したらACCDEファイルを作成してそれをユーザーに配布するという運用になります。
他にはオプションの「現在のデータベース」の設定でナビゲーションバー、メニュー、ショートカットメニューを非表示にしておく方法ですね。
これはメニューが表示されないので、メニューフォームとか独自のメニュー、ショートカットメニューを作成しておく必要があります。
デザインを修正する場合はShiftキーを押しながら開くと、オプション設定は無視して開きますので修正することができます。
hatenaさん ありがとうございます。
色々勉強します。
いつも大変お世話になってます。