Accessでフォームに入力された値を参照してクエリで一覧表にして、それを追加クエリに変更してデータをテーブルに書き込む、ということをよくします。
方法は、クエリでフィールドに次のように、「作成する表の項目名:[Forms]![フォーム名]![フォームの項目名]」のように記載することによって、フォームに入力された値が1行の行に纏まります。
次のようにデザインされたフォームを表示します。
先ほどのクエリを実行すると、次のようになることが期待できます。
ところが次のように、日時が文字化けとなり、番号は非表示に、住所だけは正常に出ているような状態になります。
どうやら、数値や日付に関しては、内部で文字コードに変換され、その文字が表示されているようなのです。
数値に関しては、Val関数を使い強制的に値を数値に変換するように、計算式を「番号: Val([Forms]![フォーム1]![番号])」に変更すれば読み出すことができますが、日付データに関しては、「日付: Val([Forms]![フォーム1]![日時])」だと、はじめの年の「2021」しか出ず、DateValue関数を使い日付データを抽出するのに「日付: DateValue([Forms]![フォーム1]![日時])」だと、年月日の「2021/5/12」しか出ずその表をExcelにコピーしても年月日までのデータになっており、また、TimeValue関数を使い時刻データを抽出するのに「日付: TimeValue([Forms]![フォーム1]![日時])」だと、1900年1月1日の時刻データになってしまいました。
そこで、クエリの設定できるところをいろいろ操作していく中で、答えを見つけました。
クエリデザイン中のデザインタブの中にパラメーターというところがあります。
クエリを実行したときに、指定した年のデータが欲しいときに抽出条件に「[年を指定してください]」と入力しておくと、クエリ実行時に年の入力画面を表示できますが、その抽出条件の値のタイプを指定しなくてもいいのですが、指定するのであればこのパラメータで指定します。
まずこのパラメータを開くとこのような画面になります。
ここで、パラメータにデータの型を一つずつ指定していけるのです。
パラメータには計算式を入力します。「作成する表の項目名:」は不要でその後を入れます。
こんな感じで指定してOKボタンを押しクエリを実行します。
そうするとちゃんと出ます。
VBAでもなんでもそうですが、突然現れるものについてはデータの型指定はした方がいいという例ですね。
さて、この現象ですが、私の知る限り、ちょっと前のバージョンでは出なかったと思います。なので、「作成する表の項目名:[Forms]![フォーム名]![フォームの項目名]」とすればフォームの値をクエリで参照できると書いているサイトも数多いです。
今のAccessはフォームにある非連結で作成したテキストボックスには型宣言が必要、ということ、パラメータの設定で型宣言ができるということを覚えておきましょう。
コメント