AccessVBA フォームBから、フォームAのサブフォームのレコードソースを動的に変更する

AccessVBA開発

2つのフォームが存在

左:A)新商品登録画面
右:B)新SKU追加

流れ:A)の「SKU登録」ボタンを押下すると、B)のウィンドウが開く
B)の「新SKU追加」ボタンを押下すると、A)の右側のサブフォームの内容が更新される

登録方法 (フォーム側とコーディング)

A)のフォームのプロパティ

B)のフォームのプロパティ

B)のフォームの「新SKU追加」ボタンを押下するイベントのコーディング

先に、A)の右側のサブフォームにクエリを作成した物をデータとして登録しておく

SQLが、

/*SELECT 
tb1.SKU AS SKU
, tb1.商品管理番号 AS 商品管理番号
, tb1.[バリエーション] AS バリエーション
, tb1.商品名詳細 AS 商品名詳細
, tb1.[レンズカラー] AS レンズカラー
, tb1.[レンズスペック] AS レンズスペック
, tb2.[カラー名] AS カラー名
, tb3.[サイズ名] AS サイズ名
, tb4.度数_倍率 AS 度数_倍率
, tb1.備考
FROM 
((T_商品SKU AS tb1 LEFT JOIN M_カラーコード AS tb2 ON tb1.[カラーコード] = tb2.[カラーコード])
 LEFT JOIN M_サイズコード AS tb3 ON tb1.[サイズコード] = tb3.[サイズコード]) 
LEFT JOIN M_度数_倍率 AS tb4 ON tb1.度数コード = tb4.度数コード;
 */

 

条件:

①A)の右側のサブフォームのソースオブジェクトとして、「クエリ.Q_商品詳細SKU」が登録されている
②B)のフォームの「新SKU追加」ボタンを押下するイベントのコーディングに以下の、A)のサブフォームのソースを動的に変更するソースが含まれている。

‘明細フォームAのデータソース変更 (SQL)
strSQL = “”
strSQL = strSQL & “SELECT”
strSQL = strSQL & ” tb1.SKU AS SKU”
strSQL = strSQL & ” ,tb1.商品管理番号 AS 商品管理番号”
strSQL = strSQL & ” ,tb1.バリエーション AS バリエーション”
strSQL = strSQL & ” ,tb1.商品名詳細 AS 商品名詳細”
strSQL = strSQL & ” ,tb1.レンズカラー AS レンズカラー”
strSQL = strSQL & ” ,tb1.レンズスペック AS レンズスペック”
strSQL = strSQL & ” ,tb1.備考 AS 備考”
strSQL = strSQL & ” ,tb2.カラー名 AS カラー名”
strSQL = strSQL & ” ,tb3.サイズ名 AS サイズ名”
strSQL = strSQL & ” ,tb4.度数_倍率 AS 度数_倍率”
strSQL = strSQL & ” FROM (( T_商品SKU AS tb1 LEFT JOIN M_カラーコード AS tb2 ON tb1.カラーコード = tb2.カラーコード)”
strSQL = strSQL & ” LEFT JOIN M_サイズコード AS tb3 ON tb1.サイズコード = tb3.サイズコード)”
strSQL = strSQL & ” LEFT JOIN M_度数_倍率 AS tb4 ON tb1.度数コード = tb4.度数コード”
strSQL = strSQL & ” WHERE tb1.商品管理番号='” & Me.txt商品管理番号.Value & “‘”
strSQL = strSQL & ” ;”

Forms![fm_新商品登録]![SKU明細フォーム].Form.RecordSource = strSQL
Forms![fm_新商品登録]![SKU明細フォーム].Form.Requery

③A)の右側のサブフォームのイベントとして、以下のコードが設定されている
※B)側の動的変更だけではソースが変更されるだけで、A)側のサブフォームには反映されない。
よって、ソースの変更イベントを受けて、A)側でイベント発生させて、サブフォームに反映させる必要がある。

Private Sub SKU明細フォーム_Enter()
Me!明細フォーム.Requery
End Sub

タイトルとURLをコピーしました