この[cb発注先選択]部を Me.Filter にしたいのです。T納品書まだ分.納品書入り日) Is Nullの後にどうコードをつないだらいいのかが分からなくて。
Me.Filter
の中には
そのフォームには仕入先、入荷日、直送先等の抽出条件
ということで、[cb発注先選択]
以外の情報が含まれている可能性があります。この中(Me.Filter
)から[cb発注先選択]
だけの情報を抜き取りたいということであれば、それは普通やらないです。[cb発注先選択]
の情報はそのままMe!cb発注先選択
で参照できるので、わざわざMe.Filter
から抜き出したりしません
strSQL = _
" UPDATE T納品書まだ分 SET T納品書まだ分.チェック1 = Yes" & _
" WHERE (((T納品書まだ分.納品書入り日) Is Null) AND ((T納品書まだ分.発注先ID)=" & Me![cb発注先選択] & "));"
フィルターを何かの手法で直接操作して、その状態でフィルター文字列から何かの情報を取得したいというのは方向性が逆ですね。元となる個別の情報を個別に扱えるような設計を考えましょう
DoCmd.OpenQuery
動的にSQLを生成するなら、そのままSQLを実行するコマンドがあります
DoCmd.RunSQL メソッド (Access)
もっといえば、VBAで処理をするならDoCmd オブジェクト (Access)はあまり使う場面がありません。たいていは、より直接的に扱える手法が用意されています。クエリ、SQLの実行であればDatabase.Execute メソッド (DAO)が使いやすいと思います
使用例
strSQL = _
" UPDATE T納品書まだ分 SET チェック1 = Yes" & _
" WHERE 納品書入り日 Is Null AND 発注先ID=" & Me!cb発注先選択 & ";"
CurrentDb.Execute strSQL
最終的にはチェックYes分に納品書日付を一括代入するボタンもSQL(更新)で処理させたいです。
納品書日付に入力する値もフォームのテキストボックスで事前に入力しておけば、そのテキストボックスを参照してSQLの文字列に入れ込めばいいですね
If Not IsDate(Me!納品書日付) Then
MsgBox "納品書日付を入力してください"
Me!納品書日付.SetFocus
Exit Sub
End If
strSQL = _
" UPDATE T納品書まだ分 SET チェック1 = Yes, 納品書日付 = #" & Me!納品書日付入力テキストボックス & "#" & _
" WHERE 納品書入り日 Is Null AND 発注先ID=" & Me!cb発注先選択 & ";"
CurrentDb.Execute strSQL
改めてですが、フォームに読み込んだデータをフォーム上の作業で更新するならDAO処理のほうが楽ですね。それはそれとして、VBAでSQLを動的に扱うことはあるので、それ用のケーススタディということで