カテゴリー別アーカイブ: AccessVBA

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

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

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

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

続きを読む

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

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

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

住所録をコピーして、ラベル印刷のフィールドを削除し、テーブルの名前を
「印刷データ」に変更します。ここのレコードが印刷対象です。

このような印刷データをレコードソースにして、次のような簡単な
レポートを作ります。作り方は宛名ラベルの印刷で確認してください。

次に簡単なフォームを準備します。

このコマンドボタンのイベントタブ・クリック時に次のVBAコードを入力します。
Private Sub コマンド2_Click()
Dim cnn As ADODB.Connection
Dim rs As ADODB.Recordset

Dim cnn1 As ADODB.Connection
Dim rs1 As ADODB.Recordset

Set cnn = CurrentProject.Connection
Set rs = New ADODB.Recordset

Set cnn1 = CurrentProject.Connection
Set rs1 = New ADODB.Recordset
Dim a As Integer

rs.Open “印刷データ”, cnn, adOpenKeyset, adLockOptimistic
rs1.Open “住所録”, cnn1, adOpenKeyset, adLockOptimistic

On Error Resume Next
rs.MoveFirst

Do Until rs.EOF

rs.Delete
On Error GoTo 0
rs.MoveNext
Loop
On Error GoTo 0

For a = 1 To Me!テキスト0 – 1
rs.AddNew
rs!会社名 = Null
rs.Update
Next a

Do Until rs1.EOF
If rs1!ラベル印刷 = -1 Then
rs.AddNew
rs!会社名 = rs1!会社名
rs!氏名 = rs1!氏名
rs!〒 = rs1!〒
rs!住所 = rs1!住所
rs!敬称 = rs1!敬称
rs.Update
End If
rs1.MoveNext
Loop

rs.Close
Set rs = Nothing
cnn.Close
Set cnn = Nothing

rs1.Close
Set rs1 = Nothing
cnn1.Close
Set cnn1 = Nothing
DoCmd.OpenReport “ラベル印刷印刷位置指定”, acViewPreview
End Sub

最初にレコードが重複しないように、印刷データのすべてのレコードを削除します。
次にフォームのテキストボックスに入力した「数値-1」の空白のレコードを先に作り、
そのあとに印刷するレコードを追加します。

実行後の印刷データのレコードです。

空白のレコードの分だけ、スタート位置をずらせます。

プレビュー画面です。

空白のレコードを利用することで、宛名シールを無駄なく使うことができます。
サンプルファイルはこちらから。

最近はずっとマクロを使っていましたが、VBAも便利ですね。
細かいことろに手が届くのがVBAのいいところです。

==============================
個人的な話ですが、若い時から白髪が目立ち、今まで染めていたのですが、
43にもなるし、もういいかなと思って染めるのをやめました。
人からどう見られているのか気になって、なかなか踏ん切りがつかなかった
のですが、もう気にするような年でもないので、自然体でこれからは
過ごします。

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

VBAのコードをまとめて変更する

VBAでプログラムを組んでいるときに、変数を間違えていたり、テーブル名を間違えたり等々、
プログラムを一括して変更したい場合が多々あります。

そんなときは、まとめて変更したいプログラムをコピーしてWordに貼り付けます。
貼り付けたら、ホームタブの「置換」をクリックします。

続きを読む

納品書の消費税を明細にレコードとして保存する①

納品書を作成する場合、サブフォームの納品明細に納めた商品と単価と数量を入れて
いくと税抜きの納品金額が計算されます。

その納品金額に消費税率をかけて消費税を計算します。
ただ消費税を納品書に表示するだけなら、テキストボックスに
=納品金額*0.08
で計算し、納品金額に消費税を足せば税込みの金額が計算できます。

続きを読む

改ページしたときにページ数を表示する

ページ数を印刷物右上に表示させる方法です。

1ページ目

2ページ目

このように表示させます。

最初にデザインビューでレポートヘッダーとページヘッダーにページ数と見積書NOを表示できるように
設定します。

このまま印刷の処理をかけると、1ページ目にレポートヘッダーとページヘッダーの二つの
ページ数が表示されてしまうので、これでは使い物になりません。

考え方は、ページ数が1のときはページヘッダーのページ数を非表示にし、2ページ目以降に表示にする
ように設定します。

ページヘッダーのプロパティを開き、イベントタブの印刷時に次のコードを入力します。

Private Sub ページヘッダーセクション_Print(Cancel As Integer, PrintCount As Integer)
If [Page] = 1 Then
Me!ラベル110.Visible = False
Me!見積NO.Visible = False
Me!テキスト34.Visible = False
End If

If [Page] >= 2 Then
Me!テキスト105.Visible = False
Me!ラベル110.Visible = True
Me!見積NO.Visible = True
Me!テキスト34.Visible = True
End If

End Sub

これで印刷をかけると上のように、1ページ目はレポートヘッダーのページ数が、2ページ目以降はページヘッダーの
ページ数が表示されるようになります。

レポートの設定にはVBAが欠かせません。

=========================================
最近お酒にだいぶ飲まれるようになってきた感じがします。。
今まで家でもほぼ毎日少量ですが晩酌していましたが、今日からもう
家ではお酒は飲まないようにしようと決意しました。

とりあえず今日は飲みませんでした。

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

クエリとVBAのコードを編集する

先日、源泉所得税で86万円を超える場合の説明をしました。
そのとき掲載したクエリがとにかく長く、同じフィールドを幾つも使っています。

例えばこれをコピペで使おうとした場合、自分で設定しているフィールド名と違うとクエリが上手く
動いてくれません。

そんな時は、コピーの基となるクエリをコピーして、Wordに一旦貼り付けます。

続きを読む