<Access Form OpenArg引数でセット位置を渡す>
(検索フォームで選択した番号を使用する その2) どうも、三流プログラマーのKen3です。 今回は、 フォーム間のデータのやり取りで、 前回の続きで、開いた別フォームからデータを受け取りたい、 そんな感じの処理を書きたいと思います。 サンプルファイルは、 http://www.ken3.org/vba/lzh/vba090.lzh にdb090.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 では、 顧客画面の該当レコードへデータを移動する。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 方法、
Private Sub btn選択_Click()
Dim LNG顧客番号 As Long
'番号選択のチェック
If IsNull(Me![lst顧客番号]) Then '何も選択されていないか?チェック
MsgBox "顧客番号を選択してください"
Exit Sub '関数を抜ける
End If
'番号をローカル変数に保存する
LNG顧客番号 = Me![lst顧客番号]
Debug.Print LNG顧客番号 'テバックで表示
'フォームを閉じる
DoCmd.Close
'レコードを移動する
DoCmd.GoToControl "顧客番号" '顧客番号フィールドにコントロールを移動
DoCmd.FindRecord LNG顧客番号 '選択された番号のレコードに移動
'
End Sub |
Private Sub btn選択_Click()
'番号選択のチェック
If IsNull(Me![lst顧客番号]) Then '何も選択されていないか?チェック
MsgBox "顧客番号を選択してください"
Exit Sub '関数を抜ける
End If
'番号を親フォームに保存する
Forms!顧客画面!顧客番号 = Me!lst顧客番号
'↑↑↑
'ここを印刷画面に変えて
Forms!顧客データ印刷!顧客番号 = Me!lst顧客番号
'フォームを閉じる
DoCmd.Close
End Sub |
↑作成した画面
違うのは、
選択されたデータのセット位置(フォームと項目)なので、
顧客番号検索フォームに
選択された番号をセットするフォーム名と項目名を渡します。
フォームに渡す?
~~~~~~~~~~~~~~~~
なにそれ?
えっと、
DoCmd.OpenForm
に何かいいパラメータ無いかなぁ、、と探っていたら、
一番最後に、OpenArg引数なんて引数があるじゃないですか・・・
↑パラメータヒントの画面
さっそく、ヘルプで調べてみると、
Forms!社員.OpenArgs
me.OpenArgs
など、
フォームオブジェクト.OpenArgs
で、フォームを開くときに指定した引数を参照できる。
でも、1つしか渡せないのかぁ、/(スラッシュ)で区切って渡し、
分解してもらうか。
下記の2つの検索ボタンが押されたら、
Private Sub btn開始番号検索_Click()
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "顧客番号検索画面"
DoCmd.OpenForm stDocName, , , stLinkCriteria, , , "顧客データ印刷/txtSTART"
End Sub |
Private Sub btn終了番号検索_Click()
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "顧客番号検索画面"
DoCmd.OpenForm stDocName, , , stLinkCriteria, , , "顧客データ印刷/txtEND"
End Sub |
Private Sub btnキャンセル_Click()
'フォームを閉じる
DoCmd.Close
End Sub |
Private Sub btn選択_Click()
'番号選択のチェック
If IsNull(Me![lst顧客番号]) Then '何も選択されていないか?チェック
MsgBox "顧客番号を選択してください"
Exit Sub '関数を抜ける
End If
'変換場所の判断
Dim n As Integer '/の位置判断
Dim strSETFORM As String 'フォーム名
Dim strSETCONTROL As String 'セットするコントロール名
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顧客番号]
Else '下記、普通は通らないエラー処理
MsgBox "パラメータエラー、プログラム管理者にお伝えください"
End If
'フォームを閉じる
DoCmd.Close
End Sub |
Private Sub lst顧客番号_DblClick(Cancel As Integer)
'リストボックスをダブルクリックしたら
Call btn選択_Click 'と、選択ボタンの処理を呼ぶ
End Sub |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
|
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]