<Access ダイアログフォームって?何? acDialogとPublic変数を使用>
(検索フォームで選択した番号を使用する その3) どうも、三流プログラマーのKen3です。 今回は、 フォーム間のデータのやり取りで、 グローバルにデータを置いて置き処理してみます。 ※前回の続きで、開いた別フォームからデータを受け取りたい、 そんな感じの処理を書きたいと思います。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba091.lzh にdb091.mdb(Access2000版)が保存されています。 何かの参考となれば、幸いです。/* * 1.今回のキッカケ */
掲示板に下記の質問をもらいました。(三週連続、載せ過ぎだけど) --------------- In message "[BBS :142] Accessでのパラメータ引渡し方法", Yoshi さん wrote... >投稿時間:2003/06/18(Wed) 17:25 > >おなまえ:Yoshi >タイトル:Accessでのパラメータ引渡し方法 >URL : >コメント: > >こんにちは。はじめて書き込みます。 >現在「顧客画面」と「顧客番号検索画面」というものがあります。 >「顧客画面」は、KEYである顧客番号とその他情報を登録、修正、削 >除する画面です。 >「顧客番号検索画面」は、「顧客画面」の顧客番号の検索機能です >。 >つまり、「顧客画面」で登録されている顧客情報を変更する場合 >現在データベースに登録されている顧客番号を一覧(顧客番号検索画 >面)表示させ選択された顧客番号を「顧客画面」に戻すといった方法 >を教えてください。 >すいません、わかりずらいと思うので簡単な図を書きます。 > >1顧客画面 ← 顧客情報の一部の修正を行いたいためこの画面を >開く > >2顧客番号横の検索ボタンを押下 ← 顧客番号がすぐにわからな >いため検索画面を開く > >3顧客番号検索画面が開く ← リストボックスで作成した一覧を >表示 > >4リストボックスの対象行を選択 > >5顧客画面 ← 選択された顧客番号を表示させる --------------- そんな質問に対して、 [No.89 Access 検索フォームで選択した番号を使用する その1] http://www.ken3.org/backno/backno_vba18.html#89 では、 呼び出した検索画面から、呼び出し元画面の 'レコードを移動する DoCmd.GoToControl "顧客番号" '顧客番号フィールドにコントロールを移動 DoCmd.FindRecord LNG顧客番号 '選択された番号のレコードに移動 と、コントロール移動とレコード移動でかわし(逃げて) あまり意味の無い回答でした。 次の(前回の) [No.90 Access Form OpenArg引数でセット位置を渡す] http://www.ken3.org/backno/backno_vba19.html#90 では、 コントロールにアクセスする方法は、 Me.Controls!新規データ Me.Controls![新規データ] Me.Controls("新規データ") なんて、名前を指定する方法があるので、 OpenArg引数でフォーム名とコントロール名を検索フォームに渡し、 stDocName = "顧客番号検索画面" DoCmd.OpenForm stDocName, , , stLinkCriteria, , , "顧客データ印刷/txtSTART" DoCmd.OpenForm stDocName, , , stLinkCriteria, , , "顧客データ印刷/txtEND" (↑OpenArgパラメータを発見) 検索画面側で、 n = InStr(Me.OpenArgs, "/") If n <> 0 Then 'スラッシュの位置によって処理する strSETFORM = Left(Me.OpenArgs, n - 1) '左から/の前まで strSETCONTROL = Mid(Me.OpenArgs, n + 1) '/の次から最後まで '顧客番号を指定フォームのコントロールにセット Forms(strSETFORM).Controls(strSETCONTROL) = Me![lst顧客番号] と、 引数を分解、 Forms(フォーム名).Controls(コントロール名) へデータを代入してます。/* * 2.掲示板やMLでもよくある話? */
ふう、前回の駆け足説明が終わったところで、 掲示板やMLでもよくある話? 読者の声を代弁(笑) 下記は作り話なので、今回の質問者からクレームもらっていないので、 誤解しないでくださいね。 ※質問者の立場と回答者の作り話ですよ(本気にしないでね) 前回の方法は、呼ばれたフォーム側で処理をする方法で、 私がやりたいのは、フォームから値を受け取りたいんです。 ※そんな参照方法で逃げる別の案は聞きたくないし、 OpenArgで渡し、Forms(strSETFORM).Controls(strSETCONTROL)へ代入 は、知ってるし、できなかったらやろうと思ってました。 *なんて書いたらケンカになるなマズ(注意してね) Input Box関数みたいに、ダイアログフォームから値を受け取りたいんです。 そんな方法を知りたくて質問したんです。
Private Sub 検索ボタン_Click() Dim MyValue as String 'オリジナルのINPUTBOXもどき(ダイアログフォーム)から顧客番号が帰ってきて MyValue = INPUT_顧客番号検索() If MyValue = "" Then 'キャンセル処理を記述 Else 'ここに検索実行や値を使用したを記述します '・ '・ End If End Sub |
Private Sub btn開始番号検索_Click() Me!txtSTART = INPUT_顧客番号検索画面() End Sub |
Private Sub btn終了番号検索_Click() Me!txtEND = INPUT_顧客番号検索画面() End Sub |
Function INPUT_顧客番号検索() As Long Dim stDocName As String Dim stLinkCriteria As String stDocName = "顧客番号検索画面" 'acDialog指定でフォームを開く DoCmd.OpenForm stDocName, , , stLinkCriteria, , acDialog INPUT_顧客番号検索 = 選択番号 '共通変数を代入しただけ End Function |
Private Sub btnキャンセル_Click() '共通変数に選択データをセットする 選択番号 = 0 'ここではキャンセル時の0をセットする 'フォームを閉じる DoCmd.Close End Sub |
Private Sub btn選択_Click() '番号選択のチェック If IsNull(Me![lst顧客番号]) Then '何も選択されていないか?チェック MsgBox "顧客番号を選択してください" Exit Sub '関数を抜ける End If '共通変数に選択データをセットする 選択番号 = Me![lst顧客番号] 'リストボックスの値をセットする 'フォームを閉じる DoCmd.Close End Sub |
Private Sub btn開始番号検索_Click() Dim lngNO As Long lngNO = INPUT_顧客番号検索 '共通の検索ダイアログ If lngNO <> 0 Then 'キャンセル0以外なら Me!txtSTART = lngNO '検索された番号をセット End If End Sub |
Private Sub btn終了番号検索_Click() Dim lngNO As Long lngNO = INPUT_顧客番号検索 '共通の検索ダイアログ If lngNO <> 0 Then 'キャンセル0以外なら Me!txtEND = lngNO '検索された番号をセット End If End Sub |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]