Microsoft Access Club Access超初心者対象Forum Access初級者対象Forum Access VBA Tips Forum DAO、ADO、SQL Forum

     

リストへもどる

投稿記事の一括表示

タイトル前月フォームの値を 今月フォームに表示させたいです。
記事No42777
投稿日: 2017/03/15(Wed) 15:28
投稿者あじせん
解決済: ON
OS:windows7
Access Version:2010

前月のフィールド参照方法に、半年粘りましたが自力ではお手上げです。。。
どなたか教えて下さい。


今月の「前回請求額」のフィールドに、前月の「今回請求額」を表示させたいです。


受注フォーム
月度 会社名 前回請求額 入金額 繰越額 今回請求額 (このうち、入金額と繰越額は、テキストボックス)

受注明細フォーム(サブフォーム)
出荷日 品名 数量 単価 小計 入金額



受注フォームに入れた式

「入金額」には、
=Nz([Forms]![受注フォーム].[受注明細フォーム]![入金],0) ←ここでの[入金]は、サブフォームの入金額の合計

「繰越額」には、
=Nz([前回請求額],0)-Nz([入金額],0)

「今回請求額」には、
=Nz([前回請求額],0)-Nz([入金額],0)+Nz([繰越額],0)



「前回請求額」には、下記の式を入れましたができませんでした。


Private Sub 前回請求額_AfterUpdate()

前回請求額 = DLookup("今回請求額", "受注テーブル", "会社名 =" & Me![会社名] _
& " AND 月度 =#" & DMax("月度", "受注テーブル", "会社名 =" & Me![会社名] _
& " AND 月度<#" & Me![月度] & "#") & "#")

End Sub


そもそもこの方法では無理なのでしょうか?

よろしくお願いしますm(_ _)m

タイトルRe: 前月フォームの値を 今月フォームに表示させたいです。
記事No42778
投稿日: 2017/03/16(Thu) 15:08
投稿者hatena
解決済: ON
> 受注フォームに入れた式
>
> 「入金額」には、
> =Nz([Forms]![受注フォーム].[受注明細フォーム]![入金],0) ←ここでの[入金]は、サブフォームの入金額の合計
>
> 「繰越額」には、
> =Nz([前回請求額],0)-Nz([入金額],0)
>
> 「今回請求額」には、
> =Nz([前回請求額],0)-Nz([入金額],0)+Nz([繰越額],0)

ここまでは、テキストボックスのコントロールソースに設定したのですよね。

> 「前回請求額」には、下記の式を入れましたができませんでした。
>
>
> Private Sub 前回請求額_AfterUpdate()
>
> 前回請求額 = DLookup("今回請求額", "受注テーブル", "会社名 =" & Me![会社名] _
> & " AND 月度 =#" & DMax("月度", "受注テーブル", "会社名 =" & Me![会社名] _
> & " AND 月度<#" & Me![月度] & "#") & "#")
>
> End Sub

なぜ、ここで突然VBAにしたのでしょうか。
AfterUpdate は更新しないと発生しないので、ユーザーが入力しなと動作しません。
参照する値なのにユーザーが入力するというのもおかしな話ですよね。

コントロールソースに、下記の式でどうですか。

=DSum("入金額", "受注明細テーブル", "会社名 =" & [会社名] & " AND 出荷日 <#" & [月度] & "#")



テーブル名、フィールド名、データ型など詳細が不明なのでそのへんは適当です。

考え方としては、サブフォームのレコードソースのテーブルから、当月以前の金額合計を求めればいいということです。

タイトルRe^2: 前月フォームの値を 今月フォームに表示させたいです。
記事No42779
投稿日: 2017/03/16(Thu) 15:53
投稿者あじせん
解決済: ON
hatenaさん、ご返信本当にありがとうございます。

> なぜ、ここで突然VBAにしたのでしょうか。
> AfterUpdate は更新しないと発生しないので、ユーザーが入力しなと動作しません。
> 参照する値なのにユーザーが入力するというのもおかしな話ですよね。


複雑な式はVBAに入れなければ、と勝手に思い込んでいました。
たしかに、AfterUpdateに入力すること自体、間違いでした。



> コントロールソースに、下記の式でどうですか。
>
> =DSum("入金額", "受注明細テーブル", "会社名 =" & [会社名] & " AND 出荷日 <#" & [月度] & "#")


入力してみましたが、#エラーの点滅が続きます。

ちなみに、受注フォームは、

受注ID  会社名   月度
1     A社   2017年1月
2     A社   2017年2月
3     A社   2017年3月
4     B社   2017年1月
5     B社   2017年2月
6     C社   2017年2月・・・

という風に、会社毎の受注があるひと月に、ひとフォームといった具合です。

また、月度のフィールドには、2017/1/1 のように、毎月の1日を入力しており、
それが、2017年1月度の請求書になるようにしています。

この仕組みでいいのでしょうか。


> 考え方としては、サブフォームのレコードソースのテーブルから、当月以前の金額合計を求めればいいということです。

当月以前、との考え方、理解しました。

ただ、今回は、前の月のみの金額を求めたいのですが、[月度]-1でいいいのでしょうか?
上記に書いた通り、2017/1/1のような入力をしています。

長々とすみません。
よろしくお願い致します。

タイトルRe^3: 前月フォームの値を 今月フォームに表示させたいです。
記事No42780
投稿日: 2017/03/17(Fri) 00:54
投稿者hatena
解決済: ON
> > =DSum("入金額", "受注明細テーブル", "会社名 =" & [会社名] & " AND 出荷日 <#" & [月度] & "#")
>
>
> 入力してみましたが、#エラーの点滅が続きます。

会社名はテキスト型ですね。

=DSum("入金額", "受注明細テーブル", "会社名='" & [会社名] & "' AND 出荷日 <#" & [月度] &

としたらどうでしょうか。

> 当月以前、との考え方、理解しました。
>
> ただ、今回は、前の月のみの金額を求めたいのですが、[月度]-1でいいいのでしょうか?
> 上記に書いた通り、2017/1/1のような入力をしています。

[月度]-1 だと1日前ということになります。
1か月前ということなので、
DateAdd("m", -1, [月度])
ですね。

ただ、受注フォームに、今回請求額 というテキストボックスはありますが、
そこには式が設定してあるのですよね。
レコードソースの受注テーブルには、今回請求額 というフィールドはないですよね。

受注テーブル、受注明細テーブル のフィールド名を列挙してもらえますか。

タイトルRe^4: 前月フォームの値を 今月フォームに表示させたいです。
記事No42781
投稿日: 2017/03/17(Fri) 12:27
投稿者あじせん
解決済: ON
早速ありがとうございます。


> 会社名はテキスト型ですね。
>
> =DSum("入金額", "受注明細テーブル", "会社名='" & [会社名] & "' AND 出荷日 <#" & [月度] &
>

すみません、会社名は、顧客参照ID(数値型)を参照して、コンボボックスを置いていました。なので、

=DSum("入金額","受注明細テーブル","会社名='" & [コンボ会社名] & "' AND 出荷日 <#" & [月度] & "#")

と入力しました。エラーの点滅はなくなりましたが、反映はされません。
ただ、「前回請求額」に反映させたいのは、前月の「今回請求額」です。
なので、やはりDlookupになりますか?


>
> ただ、受注フォームに、今回請求額 というテキストボックスはありますが、
> そこには式が設定してあるのですよね。
> レコードソースの受注テーブルには、今回請求額 というフィールドはないですよね。

今回請求額 はテキストボックスだったのですが、フィールドがあった方が良いのかと思い、
受注テーブルに 今回請求額というフィールドを作りました。

>
> 受注テーブル、受注明細テーブル のフィールド名を列挙してもらえますか。

受注テーブル
 受注ID/オートナンバー
 顧客参照ID/数値型(別に住所録テーブルがあり、その中に 顧客ID があります。)
 月度/日付
 前回請求額/数値型
 今回請求額/数値型 →=Nz([前回ご請求額],0)-Nz([テキスト入金額],0)+Nz([テキスト税込合計],0)


受注明細テーブル
 受注明細ID/オートナンバー
 受注参照ID/数値型
 見積明細参照ID/数値型(別に見積テーブルあり)
 受注商品参照ID/数値型(別に商品テーブルあり)
 出荷日/日付
 数量/数値型
 入金額/数値型

これを受注明細クエリとして、
 小計: [数量]*[売値] (売値は、見積テーブルにあり)
 消費税: Int([小計]*0.08)
 税込合計: Int([小計]+[消費税])

を付けたし、サブフォームにしています。



受注フォームに置いたテキストボックスは、以下3つです。

「テキスト入金額」 =Nz([Forms]![受注フォーム].[受注明細フォーム]![税込合計],0) 

★すみません、もともと受注明細テーブルに入金額という項目があるので、これがエラーの原因になる可能性があると思い、「テキスト入金額」、と名前を変更してみました。
 
 ↑[テキスト62]は、受注明細フォームフッターで、Sum[入金額]をしたもの。



「テキスト税込合計」=Nz([Forms]![受注フォーム].[受注明細フォーム]![テキスト54],0)

 ↑[テキスト54]は、受注明細フォームフッターで、Sum[税込合計]をしたもの。



「繰越額」=Nz([前回請求額],0)-Nz([テキスト入金額],0)




式を入れた「今回請求額」を、次月の「前回請求額」に反映させたいです。


教えて頂いたDateAddを参考に式を入力してみましたが、うまくいきませんでした。

=DLookUp("今回請求額","受注テーブル","会社名='" & [会社名] & "' AND 月度 = & DateAdd("m"",-1,[月度]))


よろしくお願い致します。

タイトルRe^5: 前月フォームの値を 今月フォームに表示させたいです。
記事No42782
投稿日: 2017/03/27(Mon) 15:51
投稿者あじせん
解決済: ON
色々試しましたが、結局うまくいかず、手動で入力しています。

そもそもテーブル設計も正しいのか分からないので、構造自体を見直しながら、勉強し直します。

お時間とらせました、ありがとうございました。

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No パスワード

ページの先頭へ 前ページへ戻る