• ベストアンサー

accessのレポートで…

レポート(テーブル1から作成)にあるフィールド1には「1・2・3…」という数字が入っています。 この1・2・3はテーブル2(ID・名前)とリンクしています。 フォーム上ではコンボボックスにして、テーブル2の名前も表示するようになっています。 (テーブルに値としては入っていません) これでレポートを作成した場合、テーブル2の名前を表示させたいのですが、テキストボックスで Iif([フィールド1] = "1","****",Iif(… というようにしてしまうと、せっかくリンクにしたのにデータが固定になってしまうのを避けたいんです。 フォームだとコンボボックスの更新後処理とレコードの移動にコードをかけば最新の情報を表示することができたんですが、レポートでもこのようなことはできるんでしょうか? (コードをかいて処理したいです) Access2000です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 レポートもコンボボックスにすればいいと思います。 (もちろん連結で) コンボボックスの各プロパティを、 [コントロールソース]:連結するフィールド [値集合ソース]:テーブルB [列数]:2(IDと名前) [連結列]:1(ID) として[列幅]プロパティで、 「0cm;3cm」 のように、1列目(ID)の幅を「0cm」にすれば、名前だけを表示出来ます。 これだと、特にコードを書く必要はありません。

w-inty
質問者

お礼

なるほど!! 「0;3」というのがポイントですね!! 無事に表示できました♪ ついでにもう一つ質問なんですが、[生年月日]というフィールドがあります。 これは入力がされていたり、されていなかったりするんですが、これを使いたいと思って、試しに if [生年月日] = "" then msgbox "ありません" else msgbox [生年月日] end if としたら、Nullが正しくない、というエラーが出てしまいました。 どこが違うのでしょうか? よろしくお願いします。

その他の回答 (2)

  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.3

No.1です。 お礼欄の件。 未入力は「Null」ということになります。 したがって、IsNull関数を使用しましょう。 If IsNull([生年月日]) Then   MsgBox "ありません" Else   MsgBox [生年月日] End If

w-inty
質問者

お礼

そうでした!AccessではIsNullでしたね。 無事できました。 ありがとうございました。

  • mshr1962
  • ベストアンサー率39% (7417/18945)
回答No.2

方法1.#1さんの言われる通り、コンボボックスを使用する。 方法2.元になるレコードソースでテーブルを連結させたクエリを使用する。 方法3.Dlookup関数で表示する。 =Dlookup("名前","テーブル2","[ID]='"&フィールド1&"'") の様にすれば表示できます。

w-inty
質問者

お礼

回答ありがとうございます。 今回は、#1の方のコンボボックスの方法でいこうと思います。 他にもいろいろなアイディアがあるんですね。 ありがとうございました。

関連するQ&A