hiroton
2025/04/14 (月) 14:09:42
c632e@f966d
DoCmdは「ACCESS」の機能を呼び出します
「ACCESS」は、自身がどんなフォームがあるだとか、そこにどんなコントロールがあるだとか認識できます。なので、クエリ実行時(DoCmd.RunSQL)にForms![F_改修履歴に追加設定]![tx受付日付代入用]が何者か判断できます
CurrentDb.Executeは「DAO」の機能を呼び出します
「DAO」はACCESSの構文を解釈する機能はないので、Forms![F_改修履歴に追加設定]![tx受付日付代入用]を一つの、そのような名称のパラメータ(変数)として解釈しようとします。結果、そのようなパラメータを用意していないDAOを実行しようとして、パラメータが少なすぎますとエラーを返してきています
CurrentDb.Executeを使うのであれば、DAOで実行する前に、VBAで値の変換を済ませておく(strSQLの中にフィールド指定の構文を入れない)必要があります
strSQL = _
" INSERT INTO T_登録中継用_改修履歴" & _
" (製造履歴ID, 受付日付, 改修内容, 完了日付, MEMO)" & _
" SELECT" & _
" 製造履歴ID" & _
", #" & Forms![F_改修履歴に追加設定]![tx受付日付代入用] & "#" & _
", '" & Forms![F_改修履歴に追加設定]![tx改修内容代入用] & "'" & _
", #" & Forms![F_改修履歴に追加設定]![tx完了日付代入用] & "#" & _
", '" & Forms![F_改修履歴に追加設定]![tx_memo代入用] & "'" & _
" FROM T_製造履歴" & _
" WHERE check=True;"
参考
パラメータクエリを含むSQLをVBAから実行する(hatena chipsさん)
英語でのエラーだと、たとえば
"Run-time error '3061'. Too few parameters. Expected 1."
のようになるようです。ネイティブならすんなり意味が分かるんでしょうか。日本語にするなら
”実行時エラー'3061'
パラメータが少なすぎます。パラメータが1つ必要です。”
隠れた文字が表現されているといいと思いますし、意訳して「パラメータが1つ不足しています」とかなるとわかりやすいんじゃないかと
通報 ...