アプリ版:「スタンプのみでお礼する」機能のリリースについて

AccessのVBAを久々に作らざるを得なくなったのですが、
方法が判らずに困っています。

Accessで月毎に列を持っているクエリー(テーブル)から、
各月の数字を印刷するレポートを作成するために、
レポートで参照する列名を固定にして、クエリーの計算式(参照先)をVBAで変更しよう
と考えてます。
例) 月別集計クエリーQ1(テーブルAとBをジョインして作成している)
列名 参照先
--------------
M1 A.M1
M2 A.M2
M3 A.M3
(略)
M12 A.M12
M (可変)11月の時A.M11
N (可変) 11月の時B.M11

これに対して、
コントロールソースQ1を使用しているレポートを開く時のイベントで
M及びNのコントロールソースを変更させようと思います。
"M11"の部分は実際には変数で値をセットします。

Dim db As DAO.Database
Dim qd As DAO.QueryDef
Dim fld As DAO.Field
Dim tb As DAO.QueryDef

Set db = CurrentDb()
Set qd = db.QueryDefs("A")
Set fld = qd.Fields("M11")
Me("M").ControlSource = fld.Name

というような方法で書くと、
「指定した式で参照されている'M'フィールドが見つかりません。」
と出ます。
Me.Controls("SS4JNSR").ControlSource = fld.Name
でも同じです。

レポートのコントロールソースがジョインしていないクエリーだと、
Set fld = tb.Fields("M11")
Me("M").ControlSource = fld.Name
だけで動作するのですが、結合列の場合の参照の仕方が判りません。

教えて頂けないでしょうか?

A 回答 (2件)

フォームが参照するクエリのフィールド名を固定しておくんですよ。



Set fld = qd.Fields("当月")のようにして。
それで月ごとに"フォームが参照するクエリ"を修正するんですよ。


11月だったら以下のようにしておいて
select A.M11 as 当月1, B.M11 as 当月2 from A inner join B on ・・・ 

12月になったら以下のようにクエリを修正する
select A.M12 as 当月1, B.M12 as 当月2 from A inner join B on ・・・ 

こうすればフォームが参照するのは常に"当月1"と"当月2"です。
    • good
    • 0
この回答へのお礼

丁寧にサンプルまで付けて頂きまして有難うございました。
御蔭さまでなんとか理解できました。

お礼日時:2012/12/28 16:43

もう一段、クエリを介在させてコントロールソースは固定。


つまりクエリ参照するクエリを修正していくとか。
    • good
    • 0
この回答へのお礼

コメント有難うございました。

もう1段クエリーを付けるということですね。
やってみましたが、同じエラーが出て参照できませんでした。

切羽詰まったので、力技でVBAでSQL文を生成してなんとか解決できました。

お礼日時:2012/12/07 19:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています