カテゴリー別アーカイブ: Access(アクセス)

ページによって印刷の設定を変更する①

レポートを印刷する場合、ページによっては表示したいもの、したくないものが
あると思います。

下の図は、1ページ目は請求額を表示して、2ページ以降は表示させない設定になっています。

デザインビューでみたとき、こんな感じです。

ばらします。

ページによって表示させる・させないをどこでコントロールするのかというと
ページヘッダーの印刷時です。

ここでイベントプロシージャを開いて、次のVBAコードを入力します。

ちなみにオブジェクトはこんな感じです。

Private Sub ページヘッダーセクション_Print(Cancel As Integer, PrintCount As Integer)
If [Page] >= 2 Then
Me!テキスト105.Visible = False
Me!テキスト183.Visible = True
End If
End Sub

ページが2ページ以上のときは、合計額を表示させるテキストボックスを非表示にし、
合計額を表示させるテキストボックスを隠すテキストボックスを表示にします。

これで印刷のかけると、一番上の図のようにページによって表示・非表示を切り替えます。

Accessは印刷させるもの・させないものをVBAでコントロールしなければなりません。
クエリよりもフォームよりも、レポートが圧倒的に難しいと感じます。
逆をいうとレポートを自由にコントロールできると、Accessの実力はかなりついたのでは
ないでしょうか。

===========================================
最近車で経営に役立つYouTube動画を聞いています。
聞いてるうちにCMをスキップするのが面倒になってきたので
サブスクに申し込みました。
お金はかかりますが、これほど快適だとは思いませんでした。

しかしYouTubeで結構学べますね。すごい世のなかになりました。

本日も最後までお読みいただきありがとうございます。

レポートの行数を指定するコードを読む②

レポートの行数を指定するときの、肝の部分を解説します。
まず前提として下の画像をご覧ください。

下の言い回しがよく出てきますが、オブジェクトの名前とテキストボックスが一致している
ことがわかると思います。

最初に行数を指定します。
If i Mod 18 = 0 Then
18が行数です。20行にしたいなら18を20としてください。
ここで、iが18で割り切れるときとそうでないときに大きな違いがあります。
18で割り切れるときは通常改ページをします。
でもデータの数が18個の場合、ちょうど1ページで収まります。
19の場合は次のページに1行表示されます。
それがこの違いです。
If i = j Then
 Me![日付].Visible = True
 Me![項目].Visible = True
 Me![使用量].Visible = True
 Me![料金].Visible = True
 Me![消費税].Visible = True
Me![税込金額].Visible = True

ElseIf i < j Then Me![bpage].Visible = True
Me![日付].Visible = True
Me![項目].Visible = True
Me![使用量].Visible = True
Me![料金].Visible = True
Me![消費税].Visible = True
Me![税込金額].Visible = True

i=jのときは改ページのコードがありません。
ij)のときはもう次のレコードがないのでFalseになります。
これが大まかな流れです。

次によく出てくる言い回しを解説します。

Me![日付].Visible = True
Me![項目].Visible = True
Me![使用量].Visible = True
Me![料金].Visible = True
Me![消費税].Visible = True
Me![税込金額].Visible = True

レポートにテキストボックスがあるのにVBAコードにない、となるとエラーになります。

ここで
Me![日付].Visible = True
これを詳しく読み解くと
日付のテキストボックスの表示を見える状態にします。

Me![日付].Visible = False
この場合はVisbleがFalseなので見えない状態になります。

ではどういう場合にTrueになって、どういう場合にFalseになるのか?
というと、一番大きな違いは、
表示するレコードがあるかどうか?ということです。
当然レコードがあれば、表示はTrueになるし、なければFalseになります。

表示するレコードがあるかどうかの判定は
iがjより小さい場合はTrueになります。
iはループする回数で、jは表示するレコードの数です。
i=jならVisibleはFalse
となります。

非常に分かりにくいですが、ずっと見ているとなんとなく言わんとしていることが
分かってくると思います。頭の中でiを回しながら、いまどんな状態なのか、イメージ
してみてください。
============================================
10年間整体に通うことなく走り続けた体は、かなりバキバキに固くなっていました。
いま週2で整体に通って体をほぐしてもらっています。やはり体の手入れは大事だなと
思う今日この頃です。

本日も最後までお読みいただきありがとうございます。

レポートの行数を指定するコードを読む

Accessでレポートを印刷する場合、何も指定しないと尻切れトンボの請求書
が出てきます。

Excelなら行を挿入して簡単に手直しができるのですが、
Accessの場合はこれをプログラミングで制御しなければいけません。

Accessの難しさは個人的にはここに集約されると思います。。
続きを読む

レコードを選択して集計する

Accessを使っているとテーブルにどんどんレコードが追加されていきます。

Accessに入力したデータで集計もしくは新たな資料を作る場合、何もしなければ
クエリやVBAの指示は全レコードに及び、ほんの一部の処理が全レコードに及びます。
特に重たい処理(DLookup関数やDsum関数)を使うときは如実に遅くなります。
続きを読む

源泉徴収税額の計算方法が変わりました

給与計算をする上で、源泉徴収税額表が変わりました。

源泉徴収税額表(国税庁のHP)

大きな変更は、高額の給与の計算が細かくなったことでしょうか。
これをクエリで組むと、なかなかのクエリになりました。

このデータベースは大人数の給与計算を想定していないので、多少重くなっても
問題ないかなと思います。
続きを読む

軽減税率とそれ以外の売上の表記について①

軽減税率への対応②でクエリで消費税を集計し、DLookupで参照する流れを解説
しましたが、この方法は分かりやすいのですが、フォームを開いたときの動作が
遅いという欠点があります。それを解消する方法を解説します。

今回の解説は、
著書 経理業務のための Accessマクロで作るデータベース入門のサンプルデータを元に解説します。

納品書に、
・軽減税率の売上と消費税
・軽減税率適用外の売上と消費税
を集計するフィールドを作ります。
こんな感じです。

続きを読む

宛名ラベルの印刷② 宛名位置の指定

宛名ラベルを印刷すると、かなりの高い確率で余りが出てしまいます。
特に20枚印刷で21枚となると、1枚の宛名ラベルに宛名シートが1枚必要になってしまいます。
それで余ったシートが使えなくなるのはあまりにももったいないので、
続きから印刷できるよう、印刷位置を指定して印刷出来るようにします。

最初にこのような住所録を作ります。ラベル印刷にチェックがついている人だけ
ラベルが印刷されます。

続きを読む