• ベストアンサー

Access メインからサブのfunctionを呼ぶには?

メインフォームからサブフォームに書いてあるFunctionを呼び出すにはどうしたらよろしいでしょうか? Call [Form_subform].testfunction では、だめなんですか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

※作り フォーム1:親 フォーム2:子 フォーム1に「AAA」という名前でソースオブジェクト「フォーム2」を埋め込んであります ※手順1.フォーム2にPublicメソッドを用意 Public Function サブフォームメッセージ(ByVal p_strMSG As String) As VBA.VbMsgBoxResult   サブフォームメッセージ = MsgBox(p_strMSG, vbYesNoCancel) End Function ※手順2.フォーム1にボタンを用意 Private Sub コマンド1_Click()   Dim objFrm As Form_フォーム2   Set objFrm = Me.AAA.Form   Debug.Print objFrm.サブフォームメッセージ("あいうえお") End Sub

situmonnsya
質問者

補足

またまた、1050YENさんありがとうございます  Dim objFrm As Form_フォーム2  Set objFrm = Me.AAA.Form  Debug.Print objFrm.サブフォームメッセージ("あいうえお") の部分は、  Debug.Print Me.AAA.Form.サブフォームメッセージ("あいうえお") と、一行で書いても大丈夫ですよね。 Debug.Print はなんのオマジナイですか? 実行してるんだから、デバッグなんてなんかおかしな気分です。 _

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

>Debug.Print Me.AAA.Form.サブフォームメッセージ("あいうえお") そうですよー 一緒ですよー その方式はレイトバインディングもどきの使用方法です。 私のは、わかりやすくするために、サブフォームの型での変数を宣言したアーリーバインディング方式です。 どちらがよいのかは、単独での判断しかねます。 個人的基準としてですが、、、 ・埋め込むサブフォームがコロコロ変わるのであれば、レイトバインディング ・そうでなければアーリーバインディング をお勧めしたいです。 というのは、、、 アーリーバインディングは、もしサブフォーム名が変わったり、何らかの変更が発生したための不具合が、実行前にわかるという利点があります。ただし、汎用性に乏しいです。 レイトバインディングは、オブジェクト指向的要素を持ち、汎用性に長けています。ただし、そのコードを実行するまで、エラーが見つからないことがあるというところがあります。 ご自分で選択を・・・

situmonnsya
質問者

お礼

はい、わかりました。 う~~ん、自分だけで作るんでレイトバインディングの方がわかりやすそう! ありがとうございました。 また、よろしくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 【ACCESS2003】サブフォーム名を変数に入れたい

    ACCESS2003で開発しています。 ひとつのフォーム(Form1)にサブフォームを10個(SubForm01からSubForm10まで)配置しており、そのフォーム内のボタンで1つのサブフォームを切り替え表示するようにしています。 サブフォーム部分だけがページ遷移しているように見えるような感じのことしたいので、こんな面倒なことをやっています。 各サブフォームの処理は全く一緒なのですが、サブフォームが10個もある為に同じ処理をForm1に10まとまり書かないといけないので、サブフォームの名前を変数にできないかなと考えていますがやり方がわかりません。 下記ソースで色々試してみたのですが、だめでした。 具体的にはサブフォーム(SubForm01~SubForm10まで)のテキストボックス(txtBox1~txtBox30)に順に値を入れたいということです。 教えてください。 Dim strPageCnt As String 'サブフォームの番号 '(処理省略)ここでstrPageCntに01から10までのいずれかの値を放り込んでいます。 For i = 1 To rs.RecordCount 'レコードセット最大値までループ '↓ここでサブフォーム名を変数に入れる    strSubForm = frmLOT31010_SubForm & strPageCnt '↓この方法もだめ    Forms!Form1!strSubForm!txtBox(i).Value = rs("NO").Value    '↓この方法もだめ    Forms!Form1!SubForm("strPageCnt")!txtBox(i).Value = rs("NO").Value '↓これもだめ    Forms!Form1!SubForm(strPageCnt)!txtBox(i).Enable = False    '↓これもだめ Forms!Form1!SubForm(strPageCnt)!txtBox(i + 1).SetFocus next どのようにすればサブフォームの名前を変数に入れて、なおかつサブフォーム名を可変にし(ここで言うところのサブフォームの最後の数値を変えて)サブフォームが扱えるようになりますか? 教えてください。よろしくお願いいたします。

  • access サブフォーム間の連動について

    Access2013について メイン親単票フォーム上に連動する二つのサブフォームを配置させました。 内一つは帳票、もう一つは単票にし、帳票からレコードを選択するとデータ詳細が単票側が連動するまで至りましたが、ここでサブフォーム帳票を並べ替えや抽出を実行すると、サブフォーム間の連動が出来なくなり、解決に困っております。 解決方法をご存知の方、お力添え願います。 親フォームに VBA Private Sub Form_Open(Cancel As Integer) Set Me.SubForm2.Form.Recordset = Me.SubForm1.Form.Recordset End Sub 抽出方法としては帳票サブフォーム上からとメインフォーム上からの実行までを試しておりますが、いずれも抽出後にサブフォーム間の連動が出来なくなってしまう状況です。 お力添え、宜しくお願いいたします。

  • ACCESS VBAサブフォーム(DATA SHEET)の値の取得方法

    いつもお世話になっております。 ACCESS VBAでメインフォームに貼りついているサブフォームの値をとりたいのですが、うまくいっていません。 現状は module1でaをPublicで宣言 サブフォーム中のFORM_CURRENT()中で me.field1.setfocus a = me.field1.value として取得しています。 (実装ではメインのほうのボタンAを押したときに サブフォーム、FORM_CURRENT()で取得しておいた値を 別の変数に入れようとしています。) サブフォームのみで実行するとうまくいくようですが、 メインフォームに貼り付けるとうまくいかないようです。 (メインフォームに貼り付けて、サブフォームのFORM_CURRENTにブレイクを 貼って止めようとするが止まらない) そこでメインフォームボタンAクリックイベントで dim a1 as integer Forms![mainform]![subform].form.[field1].setfocus a1 = Forms![mainform]![subform].form.[field1].value として値をとろうと思ったのですが メインフォームからサブフォームにフォーカスをうつせない? らしく、サポートされていませんの旨のメッセージがでてしまいます。 やりたいこととしては、メインフォームに貼りついたサブフォームの 選択レコードのフィールド値を、メインフォームのボタンを押したときに 取得する。ということなのですが、うまくいっていません。 別の方法でもいいので、実現方法をご存知の方、よろしくお願いします。 ちなみにACCESSは2000を使用、ADOはサポートされていますがDAOは 非サポートのようです。

  • ACCESS メインFからサブFの値を参照

    サブフォームで集計した値をメインフォームで演算値として使用したいのですができません。 サブフォームのフォームヘッダに集計値を入れるテキストボックスを配置し、メインフォームにサブフォームの集計値を参照するテキストボックスを配置しています。 ほんとうはイベントの実行で直接サブフォームの集計値を使った演算を行いたいのですが出来ないのでメインフォームにテキストボックスを作成しました。 サブフォームの集計値は表示しますが、その値を演算値として使用できないのです。試しにMsgboxでメインフォームのテキストボックスの値を表示させると何も表示しません。 なぜメインフォームのテキストボックスにサブフォームの値は表示できるのにその値を使用できないのでしょうか? 具体的には次の通りです。 <サブフォームに配置したテキストボックス>  名前        :テキスト16  コントロールソース:SUM([枚数〕)  書式        :数値 <メインフォームに配置したテキストボックス>  名前        :テキスト130  コントロールソース:[Foms]![メインフォーム名]![サブフォーム名].Form!テキスト16  書式        :数値 <イベント>   MSGBOX テキスト130       ※何も表示されません!

  • Access メインフォーム サブフォームにて

    お世話になります。 Accessにて メインフォームにコマンドボタンを置いて、クリックするとサブフォームのレコードが 次に行くようにしたいのですが、 コマンドボタン クリック Forms![メインフォーム]![サブフォーム名].Form!フィールド名.SetFocus DoCmd.GoToRecord , , acNext メインフォームとサブフォームのレコードが次に行ってしまいます。 サブフォームだけ次のレコードに行くには、どのようにすれば良いのでしょうか。 分かる方教えて下さい。 宜しくお願いします。

  • Access メインフォームのリフレッシュについて

    Access2003 にて、下記の手順で処理するプログラムを作成しています。 メインフォーム(埋め込みサブフォーム ※データシートビュー 一覧表) →埋め込みサブフォームの対象のレコードセレクタをダブルクリック。 →別フォームを起動し、データ入力更新。別フォームを閉じる。 →メインフォームのリフレッシュ し別フォームで変更した内容を反映させたい。 メインフォームのリフレッシュを行いたいのですが、うまくいきません。 ■試してみたこと メインフォーム、サブフォーム、別フォームとあり、 1. 別フォームのデータ更新が終了したあと、 別フォームを閉じる直前にForms![メインフォーム名].requery をしてみた メインフォームは別フォームを開く前の状態と、変化なし 2. 別フォームのデータ更新が終了したあと、別フォームを閉じ サブフォーム内ロジックで、Forms![メインフォーム名].requery をしてみた メインフォームは別フォームを開く前の状態と、変化なし 3. 別フォームのデータ更新が終了したあと、別フォームを閉じ サブフォーム内ロジックで、Me.requery をしてみた メインフォームは別フォームを開く前の状態と、変化なし ----- いずれもメインフォームには変化はありませんでした。 出来れば、メインフォームにはForm_Loadした時と同じように 処理を走らせたい(メインフォームを閉じることなくフォームロードから処理を再開させたい) と考えています。 サブフォームを含め、メインフォームごとリフレッシュするような処理はないでしょうか。 ご存知のかた宜しくお願いいたします。

  • メインフォームとサブフォームについて

    こんにちは。 VBを勉強中の初心者です。 今メインとして使っているフォームをForm1とします。 サブとして使っているフォームをFrom2とします。 プログラムの実行時にForm1がでてくるのですが、 Form1を起動せず、Form2を起動したいです。 (メインフォームとサブフォームを入れ替えたいです) この場合はどうすればいいでしょうか? よろしくお願いします。

  • Sum関数の使い方

    Access2013 vba メインフォームのサブフォームコントロールの中にあるサブフォームA(帳票)のフィールド「金額」の合計値をメインフォームで表示したいのですが、その関数の式を以下のようにして入れましたが、何も表示されません。 「=Sum(Nz([SubForm01].[Form]![発注合計金額],0))」 どこが間違っているか教えて頂けないでしょうか・・・ よろしくお願いします。

  • Accessメインサブフォームにて・・・

    Accessのサブフォームで、入力するためのフォームと、 実際にメインフォームの中で表示させる時のサブフォームの表示を 変えたいのですが・・・。 (1)ボタンをクリックして、入力するためのサブフォームを表示させる。  これは帳票形式で、テキストボックスの罫線が表示されているよう  にします。 (2)入力し終わったら、メインフォームに戻る。  こちらで表示されるサブフォームは、テキストボックスの罫線が表示  されていないようにする。 上記のようなことはできるでしょうか?よろしくお願いします。  

  • アクセスのメインフォームのみRequeryしたい

    アクセスでフォームを作製しています。 シンプルに「メインフォームの中にサブフォームがある」形で作製し各フォームにはクエリをレコードソースとして指定しています。検索したいデータのコードを入力してそのデータを表示させる・・・という一般的なフォームなのですが、メインフォームのみRequeryさせたいのですができますか? [Forms].[メインフォーム].requery とするとサブフォームまで再計算されてしまいますが、ここでサブフォームは再計算させないで、メインフォームだけ再計算させたいのです。宜しくお願いします。