お世話になります。
ご存知のかた、ご教授お願いします。
アクセス2013 を使用しています。
メイン画面から、検索画面を呼び出し、検索画面で
対象のデータを選択後、メイン画面の表示を更新したい。
現在サブフォームで Forms!フォーム名.関数名 で、
呼び出し元フォームの値を更新しています。
これを変数で可変にしたいのですが(イメージは下)
aaa = "受注画面"
bbb = "商品表示"
(受注画面のpublic sub に商品表示があります)
forms(aaa).商品表示 だと実施できますが、
forms!aaa.bbb
当然?のようにできません。
何か方法はありませんか?
商品コードを検索するような検索画面は、多くの画面で
使用することがあると思います。
そのつど、呼び出し元フォームごとに、検索画面を作っていたら
フォーム数が非常に多くなりますよね?
その回避の仕方が知りたいのです。
私は、上記の方法しか思いつきませんでしたが、ほかにもあれば
ご教授よろしくお願いします。
No.7ベストアンサー
- 回答日時:
追加補足です。
呼び出し元で
DoCmd.OpenForm stDocname, , , , , , Me.Name & ".プロシージャ名"
注:プロシージャ名の前にドットがあります
検索フォームで
Pos = InStr(Me.OpenArgs, ".")
Set MyFrm = Forms(Left(Me.OpenArgs, Pos - 1))
ProcName = Right(Me.OpenArgs, Len(Me.OpenArgs) - Pos)
CallByName MyFrm, ProcName, VbMethod
これで呼び出した側のプロシージャを呼び出せます。
kmetuさま
ご丁寧な回答をありがとうございます。
まさに、これを求めていました。本当に感謝いたします。
今日は、すっきり寝れそうです。
CallByName 初めてしりました。
ありがとうございました!
No.8
- 回答日時:
メイン:売上履歴
サブ_:売上明細 サブフォーム
検索_:商品検索
Private Sub コマンド_フォームを閉じる_Click()
Dim mNmae As String
Dim sName As String
Dim cName As String
mName = "売上履歴"
sName = "売上明細 サブフォーム"
cNmae = "商品名"
Forms(mName).Controls(sName).Controls(cNmae).Value = "AAAA"
DoCmd.Close
End Sub
これで書き込みましたよ。
もちろん、OpenArgs()で値は引き渡します。
>広域変数は便利だが利用は控えめに。
>それは、コードを判りにくくする。
(カーニハン&リッチー)
ですから、No2さんの最初の回答が宜しいかと・・・。
本当にご丁寧にありがとうございます。
public変数 を使うのはいやだったのですが、
やり方がわからなくて・・・
引数渡しがいいですね。
おふた方のおかげさまで、無事1つは解決したのですが、
新たな問題が発生しました。
再度、質問させていただくことにします。
本当にありがとうございました。
No.6
- 回答日時:
> Me.nameの受け渡しと同時にMe.nameに作った、public sub 関数名() を
> 変数等々にいれ、渡し、実行する方法はありませんか?
呼び出し側のプロシージャで値変更するのではなく、新たに呼び出される側に値変更プロシージャを作るという考え方です。変更したいコントロール名の受け渡し方は追加補足したのでそちらを参考にしてください。
f_a_007さん、kmetuさん
ご丁寧な回答をありがとうございます。
私の質問の仕方がまずかったのかも知れませんので、今一度・・・
元フォームには、その画面上の情報を表示するための関数があります。
その関数は簡単には、
public sub 画面表示()
sqlの組み立て
sql = "select * from data where 商品コード = '" & txt商品コード.value & "'"
sqlの実行
set rc = cn.execute(sql)
データの表示
txt商品名.value = rc("商品名")
txt価格.value = rc("価格")
end sub
といった感じです。
ですので、呼び出された側から、この関数を呼び出したいのです。
呼び出された側のフォームから、元フォームのテキストボックスには
値を入れることができますが、この関数を実行することができず、
悩んでおります。
あと、f_a_007さまのとおり、いろいろやってみましたが、結果は、エラーです。
プロパティの使い方が不正だとか、オブジェクトがありませんだとか・・・
forms(me.parent.openargs).controls(画面表示関数名を格納したpublic変数)
call forms(me.parent.openargs).controls(画面表示関数名を格納したpublic変数)
call forms(me.parent.openargs).画面表示関数名を格納したpublic変数
forms!me.parent.openargs.画面表示関数名を格納したpublic変数
ほか・・・
やっぱり無理なのでしょうか・・・
No.5
- 回答日時:
追加補足です
DoCmd.OpenForm stDocname, , , , , , Me.Name & "!得意先ID"
とかにしておくと変更したいコントロールを呼び出し元で指定しておけます。
検索画面フォームのプロシージャでは
Forms(Me.OpenArgs) = Me![ID]
で済ませられます。
No.4
- 回答日時:
補足:失礼!広域変数でも全く同じこと。
ですから、私もNo2さんも質問者も、やろうとしていることは同じ。ただ、forms!aaa.bbb
の書き方。そこは、先のリンクを参照されて下さい。
forms(aaa).controls(bbb)
なんて書け、OKな筈です。「ほとんど正しい」と言った理由です。
No.3
- 回答日時:
>検索フォームに呼び出し元のフォーム名と更新するコントロール名とを渡せば汎用化できます。
No2さんは、ここを具体的に示されています。
ですから、両者は、同じ主旨。
一つ違うと言えば、コントロール名も渡す点です。
No.2
- 回答日時:
呼び出し元のプロシージャを使うのではなくて、呼び出し元のフォーム名を引数として検索画面に渡して検索画面のプロシージャで処理するのはいかがでしょう
OpenFormメソッドのOpenArgs引数でフォーム名を渡す
DoCmd.OpenForm "検索画面フォーム", , , , , , Me.Name
検索画面フォームのプロシージャで、変数Me.OpenArgs(呼び出したフォームの名前が入っている)を利用して呼び出し元フォームのコントロールの値を変更してください。
Forms(Me.OpenArgs)![得意先ID] = Me![ID]
みたいな感じです。
早速ありがとうございます。
得意先IDの部分も可変にしたいのですが・・・
Me.nameの受け渡しと同時にMe.nameに作った、public sub 関数名() を
変数等々にいれ、渡し、実行する方法はありませんか?
それとも、画面表示の関数は、どの画面も同じ関数名にしてしまったほうが
早いのでしょうか?
No.1
- 回答日時:
検索フォームに呼び出し元のフォーム名と更新するコントロール名とを渡せば汎用化できます。それを基に呼び出し元を更新するコードは、ほとんど正しいと言えます。コントロールを指定されると完璧かと思いますよ。
早速、ありがとうございます。
public sub 関数名() も、controls になるのですか?
No2の方のご回答のような呼び出し方はしておらず、
nameForms = "フォーム名"
nameControls = "関数名"
DoCmd.OpenForm "検索画面"
nameFormsとnameControsは、標準モジュールでpublic宣言しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
家の中でのこだわりスペースはどこですか?
自分の家で快適に過ごすために工夫しているスペースはありますか? 例)ベランダでお茶を飲むためのカフェテーブル ゲーミングに特化したこだわりのPCスペース
-
これ何て呼びますか
あなたのお住いの地域で、これ、何て呼びますか?
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
この人頭いいなと思ったエピソード
一緒にいたときに「この人頭いいな」と思ったエピソードを教えてください
-
ハマっている「お菓子」を教えて!
この世には、おいしいお菓子がありすぎて……。 次何を食べたらいいか迷っています。 みなさんが今、ハマっている「お菓子」を教えてください!
-
他のフォームから別のフォームのサブルーチンを呼び出す
Visual Basic(VBA)
-
【ACCESS】フォーム名/コントロール名を文字列型変数で指定するには
Access(アクセス)
-
VBA プロシージャの名前の取得
その他(Microsoft Office)
-
-
4
Accessで文字列の長さによって、フィールドの幅を自動で合わせる方法
Excel(エクセル)
-
5
テキストボックスの入力チェック(ACCESS VBA)
その他(プログラミング・Web制作)
-
6
他のモジュールのプロシージャの呼び出したい。
Visual Basic(VBA)
-
7
コントロールの存在確認
Visual Basic(VBA)
-
8
プロシージャ名の取得
Visual Basic(VBA)
-
9
TextBoxコントロールを引数として渡すには?
その他(教育・科学・学問)
-
10
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
11
AccessVBA サブフォームとスクロールについて
Access(アクセス)
-
12
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
13
もしフォームヘッダーにコントロールがあるのなら
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
フォームを画面のど真ん中に表...
-
VBAでユーザーフォームを再表示...
-
Form_Load と Form_Activate の...
-
Microsoft Formsの「個人情報や...
-
EXCEL VBA ユーザーフォームの...
-
ユーザーフォームのテキストボ...
-
VBA ユーザーフォームを速く開...
-
モーダルフォームとモードレス...
-
Excel VBA ユーザーフォーム 複...
-
クリックイベントなのに、2回ク...
-
(Excel+VBA)ユーザーフォームの...
-
ACCESSのフォーム、開くんです...
-
ユーザーフォームのコピー?
-
EXCEL ユーザーフォームのタイ...
-
VBA(エクセル)のユーザー...
-
アクセス2013 フォームが...
-
VB.netでフォームのクローン
-
Access VBA コントロールの参照...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
ExcelVBAのユーザーフォームの...
-
クリックイベントなのに、2回ク...
-
エクセルVBAのフォームを最...
-
ユーザーフォームのテキストボ...
-
VBAでユーザーフォームを再表示...
-
Form_Load と Form_Activate の...
-
Microsoft Formsの「個人情報や...
-
モーダルフォームとモードレス...
-
Hideについて(.NET)
-
ACCESSのフォーム、開くんです...
-
フォームウィンドウを最前面に...
-
VBA(エクセル)のユーザー...
-
ユーザーフォーム上に現在日時...
-
Excelにて、ユーザーフォームで...
-
コントロールの存在確認
-
'ユーザーフォーム右上隅の[×...
-
MSGBOXのフォント大きさ変更
-
フォームのテキストボックスな...
-
Accessで、一つのフォーム画面...
おすすめ情報