一覧表示から、レコードを選択して、その選択したレコードのデータを別の非連結フォームに表示させる方法になります。
その後は、非連結フォームに表示された内容を修正したりの次作業になるのですが、その手前の処理で、簡単そうでちょっと悩んだので備忘録にしておきます。
帳票フォームからキーを引っ張ってくる方法
もっとも手っ取り早いのが、帳票フォームは閉じないで、非連結のフォームをポップアップで開いてから、データを呼び出す方法かと思います。
ちょっと見栄え的には悪いですが、後ろの帳票フォームから、noというフィールド値を引っ張ってきてVBAにて、非連結フォームに呼び出しています。
Private Sub Form_Load() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim SQL As String On Error GoTo ErrRtn Set cn = CurrentProject.Connection rs.CursorLocation = adUseClient rs.Open "Vew_product_stock", cn, adOpenKeyset, adLockOptimistic rs.Filter = "no = " & Forms![stock_product]![no] ' Debug.Print edit_no With Me !edit_handling = rs!handling !edit_no = rs!no !edit_code = rs!code !edit_jan_sku_code = rs!jan_sku_code !edit_name = rs!name !edit_supplier = rs!supplier !edit_stock = rs!stock !edit_schedule_arrival = rs!schedule_arrival !edit_ideal_stock = rs!ideal_stock !edit_waiting_shipping = rs!waiting_shipping End With rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing ExitErrRtn: Exit Sub ErrRtn: MsgBox "エラー: " & Err.description rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
他にも方法はあるかと思いますが、フォームの開閉タイミングでデータが引き継がれないエラーなどもあります。
この方法ならば、帳票フォームから値が引っ張って来れないということがありません。
フォーム間で変数として引き渡す方法
帳票フォームが開いていようがいまいが関係ない方法で、フォーム間で変数として渡す方法があります。
ココがポイント
モジュール内で変数を定義
すればいいだけです。
もしかしたら、こっちの方が簡単?かもしれませんが好みでしょうかね。
そして、帳票フォームから選択したレコードを非連結フォームを開くときに下記の様に、フォーム間変数に設定します。
Private Sub Form_Load() Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim SQL As String On Error GoTo ErrRtn Set cn = CurrentProject.Connection rs.CursorLocation = adUseClient rs.Open "Vew_product_stock", cn, adOpenKeyset, adLockOptimistic rs.Filter = "no = " & trans_stock_no 'ここにフーム間変数を設定 ' Debug.Print edit_no With Me !edit_handling = rs!handling !edit_no = rs!no !edit_code = rs!code !edit_jan_sku_code = rs!jan_sku_code !edit_name = rs!name !edit_supplier = rs!supplier !edit_stock = rs!stock !edit_schedule_arrival = rs!schedule_arrival !edit_ideal_stock = rs!ideal_stock !edit_waiting_shipping = rs!waiting_shipping End With rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing ExitErrRtn: Exit Sub ErrRtn: MsgBox "エラー: " & Err.description rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing End Sub
結局は、どっちの方法でも簡単にできましたが、あとは好みの問題でしょうかね。