• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AccessVBA@レポートフッタへの項目追加)

AccessVBA@レポートフッタへの項目追加

山田 太郎(@f_a_007)の回答

回答No.10

【補足】マジックナンバー追放問題について。 Private Sub グループフッター1_Format(Cancel As Integer, FormatCount As Integer)   Select Case Me.取引先     Case "取引先A"       Me.取引先A合計 = Me.取引先別取引額合計     Case "取引先B"       Me.取引先B合計 = Me.取引先別取引額合計     Case "取引先C"       Me.取引先C合計 = Me.取引先別取引額合計     Case Else   End Select End Sub >プログラムコード中に"取引先A"などを埋め込むと >プログラマはその後にコードの改変などの作業に追われる。 >よって、いわゆるマジックナンバーを埋め込むのは避けるべき。 このことは承知の上で、先のコードを提示しています。 【マジックナンバー追放にはコストがかかる】 1、Report.OpenArgs の利用はユーザーに歓迎されない。 OpenArgsプロパティを利用して"取引先名"等を指示できるが、これはユーザーに<指示や選択する>という面倒を強いることになり。 2、[得意先マスター].[フッター合計表示](Yes/No)列。 こういう仕掛けをすれば、ユーザーの負担は皆無。そして、同列の管理アプリケーションのレポートのフッター欄を最適化して保存すれば万全である。しかし、これには3、4日というプログラミング作業が必要。 3、マジックナンバーの人力修正が一番。 今回の案件は、2の作業をして達成すべきだろうか?そこまでシビアに考えなくて、チャッチャと毎月人力で修正しても良いのでは。 ちょっと、動的に対応の私見を補足しておきます。

hatsuzo
質問者

お礼

コメント有難うございます。 こういうソースへのコード埋め込みは確かに悩ましい問題ですね。 本来ならば、データの中に含まれる別コードをWhere条件にするなり、キーにするなりして対応するのがスマートなやり方でしょうね。 しかし、仰る通り、掛けられる工数と修正頻度のバランスを考えて今回はソース埋め込みにしています。 鶴の一声には勝てませんので、早く解決するしかないですしね。

関連するQ&A

  • 最終ページのみページフッターを表示する

    環境は Office2019 Windows10です レポートでページフッターに合計が表示されるようにしています 複数ページになった時に最終ページのみページフッターを表示したいので 下記のコードを記入しましたが うまくいきません Private Sub ページヘッダー_Format(Cancel As Integer, FormatCount As Integer) If Page = Pages Then Me.ページフッター.Visible = True Else Me.ページフッター.Visible = False End If End Sub 最終ページのみページフッターを表示にはどのようにすればいいでしょうか 宜しくお願い致します

  • Access2003 レポートの合計の出し方

    お世話になっております。 Access2003のレポートで下記のようなコードで価格の合計を求めようとしています。 1ページですとこれで合計は表示されるのですが、レポートが2ページ以降になると最終ページの合計が表示されます。 最終ページの最後にすべての合計を出したいと思っています。 ご教授いただければ幸いです。よろしくお願いいたします。 Option Compare Database Dim a As Variant Private Sub ページヘッダーセクション_Format(Cancel As Integer, FormatCount As Integer) a = 0 End Sub Private Sub グループヘッダー3_Print(Cancel As Integer, PrintCount As Integer) a = a + Me.価格 End Sub Private Sub レポートフッター_Print(Cancel As Integer, PrintCount As Integer) Me.合計 = a End Sub

  • アクセスレポートのグループごとのページ付番について

     Accessレポートのグループごとにおける、ページ付番についてお聞きします。  私なりにインターネットで調べて、下記モジュールを記述しました。レポートの状況は、次のとおりです。 ①グループ化している項目は「全体管理番号」で、ページはページフッターに「GPページ数」名のテキストボックスに表示しています。 ②「Pages」を参照するテキストボックス(コントロールソース =[Pages])を「総ページ取得」名で、ページフッターに非表示配置しています。 ※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※ Option Compare Database Dim d As Object Dim brk As Variant ------------------------------------------------------------------------------- Private Sub Report_Open(Cancel As Integer) Set d = CreateObject("scripting.dictionary") End Sub ------------------------------------------------------------------------------- Private Sub ページフッターセクション_Format(Cancel As Integer, FormatCount As Integer) If Me.全体管理番号.Value <> brk Then Me.Page = 1 brk = Me.全体管理番号.Value End If If Me.Pages > 0 Then Me.GPページ数 = Me.Page & "/" & d(Me.全体管理番号.Value) & "ページ"  End If End Sub ------------------------------------------------------------------------------- Private Sub 全体管理番号_フッター_Format(Cancel As Integer, FormatCount As Integer) If Me.Pages = 0 Then    d(Me.全体管理番号.Value) = Me.Page End If End Sub -------------------------------------------------------------------------------  この内容で印刷プレビューをした結果、複数ページになる場合は正しく表示になるのですが、複数ページにならない1ページのみの場合はなぜか「1/5ページ」や「「1/3ページ」となり、「1/1ページ」となりません。  「1/1ページ」表示となるようにするには、どこを修正すれば良いかお教え願いたいと思います。 どうぞよろしくお願いいたします。

  • アクセスについてです(レポート)

    フォームからレポートを開く時に、 VBAでコントロールにコントロールソースを指定したいのですが どうやらエラーになってしまうようです。 フォームからではなく手動でレポートを開く場合は エラーにはなりません。 レポートのレコードソースは、T_testを指定していて、 その上にあるコントロールは非連結で指定したコントロールソースをvbaで入れたいです。 なので、レポートのLoadイベントで Private Sub Report_Load() Me.テキスト0.ControlSource = "8月" End Sub として、手動でレポートを開く分には問題ないのですが このコードのまま、フォームから Private Sub コマンド0_Click() DoCmd.OpenReport "レポート1", acViewPreview End Sub とすると、Me.テキスト0.ControlSource = "8月"で、 実行時エラー2191 印刷プレビュー時または印刷を開始した後は コントロールソースプロパティを設定できません。 のエラーが発生します。 フォームから Private Sub コマンド0_Click() DoCmd.OpenReport "レポート1", acViewDesign End Sub とすると、レポートのLoadイベントが発生しませんでした。 ご回答よろしくお願いします。

  • Access フォームから並び替えレポート

    お知恵をお貸しください。 Access2010 フォームでオプショングループを2種類用意しました。 規則グループ 昇順 降順 並び替えグループ ID ふりがな レポートに Private Sub Report_Open(Cancel As Integer) Select Case Forms!フォーム4!fra並べ替え Case 1 Me.OrderBy = "ID ASC" Me.OrderByOn = True Case 2 Me.OrderBy = "ふりがな ASC" Me.OrderByOn = True End Select End Sub 並び替えでは、昇順のみうまくレポートを行えますが。 規則で ID ふりがな を昇順 降順 に行えません。 なにを加えればよいのでしょうか。 よろしくお願いします。

  • Accessのレポートで開くと「読み取り専用なので…」と出る。

    今まで通常通り表示できていたレポートを、詳細のところを白/グレーのストライプにしようと思い、以下のコードを追加しました。 Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) Count = Count + 1 If Count Mod 2 = 1 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 12632256 End If End Sub すると 実行時エラー'2135' このプロパティは読み取り専用であるため、設定できません。 と出てしまいました。 どこがダメなのでしょうか?

  • Accessのレポートの総計の出力について

    毎回おせわになっております。 現在、Access2000で帳票の出力をおこなっているのですが、部局ごとに小計を出力し、その合計をレポートのフッターに出力したいのですが、どうしても合計がうまくいきません。 部局ごとのグループフッターセクションで以下のようにPGを書いております。 Private Sub グループフッター1_Format(Cancel As Integer, FormatCount As Integer) 'データの表示 Me!部局別小計 = Bukyoku_t '総計に追加 Total = Total + Bukyoku_t End Sub ここで、Bukyoku_tは詳細のFormatにてひとつの部局での各々の金額を足したものです。 実際にモジュール内で動きを確認したところ、最初の部局以外はグループセクションを2回実行しているとこがわかりました。たしかに、総計の金額も部局別小計をすべて足した値の約2倍が出力されました。 レポートのプロパティの設定がいけないのでしょうか? ご教授のほど、よろしくお願いいたします。

  • レポート 並べ替えが出来ない フィルタもできない

    この状況と似てるのですが http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1255147152 クロス集計クエリを作り、そのクエリを基にレポートを作成しました。 クエリ内では並べ替えはできます。 ですが、レポートを開く際にはクエリで設定した並べ替えができません。 なので、 Private Sub Report_Open(Cancel As Integer) With Me .OrderBy = "大分類_Index ASC" .OrderByOn = True End With End Sub このように、レポートを開く時に並べ替えを設定したのですが無視されます。 空白以外のみ表示させたいので、 Private Sub Report_Open(Cancel As Integer) Me.Filter = "IsNuLL(大分類)=False" Me.Report.FilterOn = True End Sub もしたのですが、これも無視されます。 クエリでは並べ替えが有効なのに、レポートにすると無視される理由と、 対策をご教授いただければ助かります。 当方アクセス2010です。 よろしくお願いします。

  • アクセス レポート バックカラーの変更方法

    現在レポートで1行ごとにバックカラーを変えて印刷しておりますが、それをチェックボックスにチェックがはいった行だけをカラーにするよう変更したいと考えておりますが、よくわかりません。現在のコードをコピーしました。お手数ですがご指導願います。 Option Compare Database Dim bline As Integer Private Sub Report_Open(Cancel As Integer) End Sub Private Sub ページヘッダー_Format(Cancel As Integer, FormatCount As Integer) bline = 0 End Sub Private Sub 詳細_Format(Cancel As Integer, FormatCount As Integer) bline = bline + 1 If bline Mod 2 Then Me.Section(0).BackColor = 16777215 Else Me.Section(0).BackColor = 12663225 End If End Sub

  • レポート ちらつきを回避したい

    レポートにデータがない時は Private Sub Report_NoData(Cancel As Integer) Cancel = True End Sub これで、レポートを開くことを回避できるのですが、 一瞬だけレポートが立ち上がり、一瞬で消えます。 この一瞬の動きを非表示にしたいのですが、可能でしょうか? 画面がちらついて見えてしまいます。 Private Sub Report_NoData(Cancel As Integer) DoCmd.Echo False Cancel = True DoCmd.Echo True End Sub エコーを入れてもちらつきを回避できませんでした。