No.2ベストアンサー
- 回答日時:
親フォームからサブフォーム、或いは逆でも、イベントの取得は可能です。
但し、手続き(?)が複雑なことなどから、意図した動作をさせるには、
かなり苦労するかもしれません(汗)
ともあれ、とりあえず簡単なサンプルを提示してみます。
・子フォームのレコード移動時イベントを、親フォームで取得
・親フォームのコマンドボタンのクリック時イベントを、子フォームで取得
【構成】
・親フォームに設置したコンボボックスの名前: 起動
・コントロールとしてのサブフォームの名: SF1
※レコード移動時イベントを発生させる関係上、子側のレコードソースには
適当なテーブル/クエリを指定して下さい。
【コード】
<親側>
'フォームのモジュールレベル(全てのSub/Functionよりも前の領域)で、
'イベントを取得したいオブジェクトを参照する変数を宣言
'★「WithEvents」により、イベント取得が可能になります★
Private WithEvents Frm As Form
'開く時イベント
Private Sub Form_Open(Cancel As Integer)
'変数に子フォームを設定
Set Frm = Me!SF1.Form
End Sub
'閉じる時イベント
Private Sub Form_Close()
'念のため、明示的に変数を解放
Set Frm = Nothing
End Sub
'サブフォームのレコード移動時イベントを受けて行う処理
'★「Sub」の後は「Form_」でなく「Frm」(=変数名)なので注意★
Private Sub Frm_Current()
MsgBox "子側でレコード移動がありました"
End Sub
'自身に設置したコマンドボタンのクリック時
Private Sub 起動_Click()
MsgBox "親側でボタンクリック"
End Sub
<子側>
'親と同様にモジュールレベルで変数を宣言
Private WithEvents Btn As CommandButton
'開く時
Private Sub Form_Open(Cancel As Integer)
Set Btn = Me.Parent!起動
End Sub
'閉じる時
Private Sub Form_Close()
Set Btn = Nothing
End Sub
'レコード移動時
Private Sub Form_Current()
MsgBox "子側でレコード移動"
End Sub
'親側のコマンドボタンのクリックを受けて行う処理
Private Sub Btn_Click()
MsgBox "親側でボタンがクリックされました"
End Sub
・・・以上です。
これで、子側のレコード移動で、親/子の双方のMsgBoxが表示
されることを確認したら、これをベースに、実際に行いたい処理コードを
追加していってみてください。
なお、「Private Sub Btn_Click()」などは、全て手入力する必要が
あります(「Sub 」の後は、「変数名」+「_」(アンダーバー)+「イベント名」)。
また、マウスボタンクリック時のように、引数を持つイベントの場合は、
それらも同様に記述しないと、コンパイルエラーになるのでご注意下さい。
◆参考(別手法)◆
禁じ手的ではありますが(汗)、「親側から子側のイベント取得」とは逆に、
「子側から親側の各イベント時の処理の呼び出し」も可能です。
例えば、子側のレコード移動時に、親側の『起動』ボタンのクリック時
の処理を実行するには、以下のようにします:
<親側>
同ボタンのクリック時イベントの「Private」を「Public」に変更
<子側>
以下のような構文で、同ボタンのクリック時の処理を子側のレコード
移動時に呼び出せます:
Private Sub Form_Current()
Call Me.Parent.起動_Click
End Sub
※親側からの呼び出しは以下のようにします:
(子側のレコード移動時イベントの処理を実行する場合)
SF1.Form.Form_Current
または
Me.SF1.Form.Form_Current
ご返事ありがとうございます。
とてもわかりやすいご回答ありがとうございます。このサンプルを元に自分でも色々試してみようと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Visual Basic(VBA) VB.net フォーム 親子 1 2022/07/04 19:00
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) accessについて(超初心者です) 1 2023/02/11 11:18
- 楽器・演奏 ★この考え方 どう思われますかぁ? 5 2023/06/08 16:44
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) Accessでセレクタをダブルクリックで別フォームで詳細表示 3 2022/12/20 10:36
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Access サブフォームでの選択行の取得
その他(データベース)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
サブフォームでのダブルクリックイベント
Access(アクセス)
-
-
4
Access でレコードセレクタが押されたときのイベントは?
その他(プログラミング・Web制作)
-
5
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
6
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
7
Access レコード移動時イベントでサブフォーム
Access(アクセス)
-
8
どこにもフォーカスを当てたくない
Access(アクセス)
-
9
ACCESSのサブフォームからメインフォームへの移動
Access(アクセス)
-
10
親フォームからサブフォームのレコードソースを設定
Access(アクセス)
-
11
Accessのサブフォームから値を参照する方法について
その他(データベース)
-
12
ADOを使ったDBアクセス後のメモリ解放
その他(データベース)
-
13
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
14
Accessを開きなおすとテキストボックスの値がエラー#Name?になる
その他(データベース)
-
15
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
16
サブフォームの行ごとにコンボボックスの表示項目を変更する方法が知りたいです
Visual Basic(VBA)
-
17
Accessの画面更新を一時的に停止する方法。
その他(データベース)
-
18
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
19
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
20
メインフォームからサブフォームの背景色を変えたい。
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA リストボックスをダブルク...
-
VBAにてメッセージボックスを最...
-
リストボックスの選択解除
-
メインフォームからサブフォー...
-
accessで2つ以上のフォームを起...
-
アクセス フォームが存在する...
-
VB.net(VB)で、フォームにExcel...
-
ExcelVBAでフォーム内でブック...
-
Googleフォーム・複数人の申し...
-
VBプログラムの終了
-
VB.NET 親フォームから子フォー...
-
サブフォームのイベント取得
-
C# 別なフォームへ値を渡す (...
-
子フォームから親フォームのオ...
-
アクセスでフォームで入力 複...
-
Accessでフォームから別フォー...
-
ExcelVBAでユーザーフォーム内...
-
サブフォームの新規レコードに...
-
さくらサーバーにcgiフォームを...
-
PDFフォーム内で日付計算したい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAにてメッセージボックスを最...
-
VB.net(VB)で、フォームにExcel...
-
Accessでフォームから別フォー...
-
リストボックスの選択解除
-
Googleフォーム・複数人の申し...
-
ユーザーフォーム上にアイコン...
-
アクセスVBA フォームのス...
-
VBプログラムの終了
-
アクセス フォームが存在する...
-
サブフォームの新規レコードに...
-
サブフォームの行ごとにコンボ...
-
PDFフォームに本日の日付を自動...
-
accessで2つ以上のフォームを起...
-
メッセージボックスの背景色
-
PDFフォーム内で日付計算したい...
-
VBA リストボックスをダブルク...
-
Access 無操作の場合、自動で閉...
-
ディスプレイ解像度より大きな...
-
フォーム上の全てのコントロー...
-
ToolStripStatusLabelを固定し...
おすすめ情報