- ベストアンサー
アクセス2003の表形式サブレポートで契約種別がNullの場合に#エラーが表示される問題について
- アクセス2003の表形式サブレポートのレポートフッターに非連結のテキストボックスを作成し、そのコントロールソースに「=Sum(IIf([契約種別]='1',[分配粗利],IIf([契約種別]='',0)))」と入力しています。契約種別が「1」の場合は正しく結果が表示されますが、契約種別がNullの場合には#エラーが表示されます。
- 契約種別がNullの場合に#エラーが表示される問題について、アクセス2003の表形式サブレポートでレポートフッターに非連結のテキストボックスを作成し、コントロールソースに「=Sum(IIf([契約種別]='1',[分配粗利],IIf([契約種別]='',0)))」と入力しています。契約種別が「1」の場合は正しい結果が表示されますが、契約種別がNullの場合には#エラーが表示されます。
- アクセス2003の表形式サブレポートのレポートフッターに非連結のテキストボックスを作成し、コントロールソースに「=Sum(IIf([契約種別]='1',[分配粗利],IIf([契約種別]='',0)))」と入力しています。契約種別が「1」の場合は結果が正しく表示されますが、契約種別がNullの場合には#エラーが表示されます。契約種別がNullの場合には0と表示したい場合はどのようにすればよいでしょうか。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
Option Compare Database Dim 分配粗利合計 As Currency Dim 分配粗利総計 As Currency Private Sub Report_Open(Cancel As Integer) End Sub Private Sub グループフッター1_Format(Cancel As Integer, FormatCount As Integer) Me.ラベル20.Caption = 分配粗利合計 End Sub Private Sub グループヘッダー0_Format(Cancel As Integer, FormatCount As Integer) 分配粗利合計 = 0 End Sub Private Sub レポートフッター_Format(Cancel As Integer, FormatCount As Integer) Me.ラベル16.Caption = 分配粗利総計 End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) On Error Resume Next 分配粗利合計 = 分配粗利合計 + Nz([分配粗利]) 分配粗利総計 = 分配粗利総計 + Nz([分配粗利]) End Sub 図を参照してください。 各グループフッターとレポートフッターに合計値を表示しています。 [詳細]部で集計してラベルキャプションを書き換えています。 ですから、#エラーは発生しません。 もちろん、[詳細]部のエラートラップは必要ですよ。 なお、[契約種別]が空のグループは通常は発生しないように仕掛けます。
その他の回答 (5)
- chayamati
- ベストアンサー率41% (260/624)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
補足:最後に! [契約種別]に[分配粗利]とだけを配置したレポートを作ってみて下さい。 普通に作ったら、完全なノーデータの時以外はエラーがでないと思います。 このテストを通じて現状の問題が判明すると思います。 なお、完全なノーデータの時は、「表示するデータはありません」を告示。 レポートは閉じるのが一般的なやり方。 でも、今回は、そうではなくて別のケースの様子。 それは、[契約種別]に[分配粗利]とだけを配置したレポートで明るみに。
お礼
返事が遅くなり申し訳ありません。 おっしゃるように[契約種別]と[分配粗利]だけを配置したレポートを作ってみました。 [契約種別]="1"の時はデータは表示されます。 [契約種別]に入力がないとき(契約がないとき)は、データは表示されません。 その場合は、レポートフッターのテキストボックスの =Sum(IIf([契約種別]="1",[分配粗利],IIf([契約種別]="",0))) は#エラーになります。 何度もすみません。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
>[詳細]部で集計してもノーデータの場合はやはりエラーになります。 それは、織り込み済みです。そして、それはエラートラップで回避できると思いますよ。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
補足:式そのものを書かない手もありますが・・・。 Option Compare Database Dim 分配粗利合計 As Currency Private Sub レポートフッター_Format(Cancel As Integer, FormatCount As Integer) Me.ラベル16.Caption = 分配粗利合計 End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) On Error Resume Next 分配粗利合計 = 分配粗利合計 + IIf([契約種別] = "1", [分配粗利], 0) End Sub レポートの[詳細]部で集計してレポートフッターで表示。 このようにすれば、非参照ですからエラーはでません。 が、そもそもノーデータの場合にも合計欄が表示される仕掛け自体が問題では? そんな気がします。
補足
>レポートの[詳細]部で集計してレポートフッターで表示。 >このようにすれば、非参照ですからエラーはでません。 [詳細]部で集計してもノーデータの場合はやはりエラーになります。 >が、そもそもノーデータの場合にも合計欄が表示される仕掛>け自体が問題では? そうなのですね。 [契約種別]でグループ設定をしています。 各グループごとに[分配粗利]の合計を出したかったのです。 アドバイスありがとうございます。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
もう少し、具体的に!図を添付しています。 >表形式レポートに何も表示されていないからだと思うのですが・・・。 もちろん、ノーデータの場合はエラーが発生します。 その場合、式が参照不能だからです。 Private Sub Report_NoData(Cancel As Integer) Me.レポートフッター.Controls(0).Visible = False End Sub 対策としては、非表示にするか、あるいは式をクリアするか・・・。
お礼
>もちろん、ノーデータの場合はエラーが発生します。 >その場合、式が参照不能だからです。 そうなのですね。 このエラーが回避できない限りは難しいのですね。。 >Private Sub Report_NoData(Cancel As Integer) > Me.レポートフッター.Controls(0).Visible = False >End Sub を入れても#エラーのままです。 アドバイスありがとうございます。
お礼
試行錯誤して何とか思っているように出来ました。 丁寧にご指導いただきありがとうございました。