2009/02/18
Access 実践入門 第77号
-------------------------------------------
Access 実践入門 第77号 (2009.2.18)
-------------------------------------------
こんにちは、Access実践入門の佐藤です。
2月というのに、先週は、暖かかったですね〜
もう春が来たかと思ったら、また寒くなりました。
皆様、体調管理にお気を付けください。
春は、近いですよっ
【1】費用入力1
【2】費用入力2
【3】次回予告
【4】編集後記
---------------------------------------------------------------------
【1】費用入力1
---------------------------------------------------------------------
今回のバージョンでは、費用の一覧表入力を追加しています。
費用を単票フォームで、1レコード入力して登録するのは
とても面倒です。
まとめて、入力したいという要望は、必ず出ます。
費用一覧入力の手順は、次のようになります。
1.作業データを入れる作業テーブル作成
2.作業テーブルを削除するクエリ
3.一覧データを入力するフォーム
4.作業データを本データに追加するクエリ
以上のオブジェクトを作成して処理します。
直接「ta帳簿」のテーブルに入力すると、処理が面倒です。
作業テーブルのデータを編集させて、入力が完成した時点で、
「ta帳簿」に追加します。
入力している途中で、全部キャンセルする場合でも、
作業データを入力するフォームを閉じるだけで、できます
1の作業テーブルは、
「to帳簿作業」です。
このテーブルの内容は「ta帳簿」と同じです。
コピーして作ります。
2の削除クエリは
「quto帳簿作業削除」です。
全レコードを削除するクエリです。
毎回、この処理を最初に実行します。
3の入力フォームは、
「fo費用一覧入力」です。
帳票入力のフォームです。
この帳票入力フォームのレコードソースとして
「qu費用一覧入力」を作ります
4の追加クエリは、
「qu費用一覧入力追加」です。
【2】費用入力2
---------------------------------------------------------------------
それでは、作成手順です。
「to帳簿作業」は
「ta帳簿」をコピー、貼り付けで作ればすぐできます。
「quto帳簿作業削除」は
いつも使う、全レコード削除の削除クエリです。
抽出条件無しの、削除クエリを作ります。
「fo費用一覧入力」のデザインを見てください。
まず、レコードソース「qu費用一覧入力」を作ります。
これは、「ta科目費用」と「to帳簿作業」をつないだものです
フォームは、入力順に各項目を並べています。
科目は、コンボボックスにしています。
順番に項目を見ていきます
●日付
「フォーカス喪失時」に次のように書いています。
If IsNull([処理日]) Then
Exit Sub
End If
If Len([処理日]) <> 11 Then
MsgBox "年は4桁、月は2桁、日は2桁の入力です。", , ""
DoCmd.CancelEvent
Exit Sub
End If
If IsDate([処理日]) = 0 Then
MsgBox "この日付の入力は間違っています。", , ""
DoCmd.CancelEvent
Exit Sub
End If
If DateValue([処理日]) <= DLookup("[締切日付]", "ta基本情報",
"[通し番号]=1") Then
MsgBox "締切日より以前の日付で入力できません。"
DoCmd.CancelEvent
DoCmd.GoToControl "処理日"
Exit Sub
End If
[処理日付] = DateValue([処理日])
空白の時は、通過させます。
これは、入力を終わって日付入力にカーソルがある時に、
登録ボタンをクリックする場合、空白の時に通過できないと、
ボタンをクリックできません。
何か入力された時のみ、チェックするためです。
日付が入力された場合、日付が正しいかどうか、
締め切り更新日より以前でないか
チェックしています。
●費用科目、費用科目名
科目番号をコンボボックスで、選択します。
費用科目名は、レコードソースに入れてあるので、自動表示です。
費用科目名を、使用可能を「いいえ」、編集ロックを「はい」にします。
●費用額
数値入力です。
特になにもしません。
●摘要
漢字入力です。
特になにもしません。
●削除ボタン
入力行を削除させます。
このボタンは、入力で止まる必要がないので、
タブストップを「いいえ」です
「フォーカス取得時」に次のように書いています。
SendKeys "{ESC}", True
ESCキーを送っています。
これは、入力途中の場合、
たとえば、日付だけ入力していて、その行の削除ボタンがクリックされた場合、
この処理無しで、「qu費用一覧削除」を実行するとエラーがでます。
「クリック時」に次のように書いています。
DoCmd.OpenQuery "qu費用一覧削除"
DoCmd.Requery
この削除クエリは、登録済みの「to帳簿作業」の削除ボタンが
クリックされた行のID番号を抽出条件にした削除クエリです。
フォーム全体の「更新前処理」に次のように書いています。
If IsNull([処理日]) Then
MsgBox "日付を入力して下さい。"
DoCmd.CancelEvent
DoCmd.GoToControl "処理日"
Exit Sub
End If
[処理日付] = DateValue([処理日])
If IsNull([費用科目番号]) Then
MsgBox ("費用科目を入力して下さい ")
DoCmd.CancelEvent
DoCmd.GoToControl "費用科目番号"
Exit Sub
End If
If IsNull([費用額]) Or [費用額] = 0 Then
MsgBox ("費用額を入力して下さい ")
DoCmd.CancelEvent
DoCmd.GoToControl "費用額"
Exit Sub
End If
[収入科目番号] = "99"
ここで、必須入力項目のチェックをしています。
不十分であれば、イベントをキャンセルして、その項目に戻します。
チェックしてOKであれば、
隠している、「処理日付」と「収入科目番号に」値を代入します。
キャンセルボタンの「クリック時」に次のように書いています。
SendKeys "{ESC}", True
DoCmd.Close
ESCキーを送っています。
これは、入力途中の行があった場合、フォームを閉じる時にエラーが出るのを
防ぐためです。
キャンセルは、何もしないで、フォームを閉じれば、
作業フォームですから、本データの「ta帳簿」には何も影響ありません
最後に「登録ボタン」での処理です。
「フォーカス取得時」に次のように書いています。
If IsNull([処理日]) And IsNull([費用科目番号]) And (IsNull([費用額])
Or [費用額] = 0) And IsNull([摘要]) Then
Else
If IsNull([処理日]) Then
DoCmd.CancelEvent
DoCmd.GoToControl "処理日"
Exit Sub
End If
[処理日付] = DateValue([処理日])
If IsNull([費用科目番号]) Then
DoCmd.CancelEvent
DoCmd.GoToControl "費用科目番号"
Exit Sub
End If
If IsNull([費用額]) Or [費用額] = 0 Then
DoCmd.CancelEvent
DoCmd.GoToControl "費用額"
Exit Sub
End If
[収入科目番号] = "99"
これは、今カーソルがある行の、すべての項目が空白だったら
何もしません。
そうでない場合は、項目のチェックをしています。
更新前処理にしているから、必要ない?
そうではありません。
登録ボタンがクリックされた時のイベント発生の順番は
登録ボタン「フォーカス取得」
登録ボタン「クリック」
登録ボタン「クリック時」には次のように書いています。
DoCmd.OpenQuery "qu費用一覧入力追加"
DoCmd.Close
DoCmd.Requery
データが途中入力の場合には、
この中の、DoCmd.Close の前に更新前処理が動きます。
更新前処理に書いてある、データ不十分の時のキャンセルイベントは
この段階では機能しません。
そこで、項目のチェックを
登録ボタンの「フォーカス取得時」に書いています。
ややこしいですが、いろんな入力テストをしていると解ります。
その都度、追加、修正していけばいいと思います。
いろいろ試してみてください。
無事登録ボタンの「クリック時」にたどりつけば、
追加クエリで、データを「ta帳簿」に追加後。
フォームを閉じて、
リクエリーで、最新データが最初のフォームに反映することになります。
【3】次回予告
---------------------------------------------------------------------
次回は、費用別明細印刷 です。
【4】編集後記
---------------------------------------------------------------------
前回、解らない事は、検索エンジンを上手に使って調べましょう
と言いましたが、
「Access ○○ ○○」
で検索するといいです。
どんな細かい事でも、見つかります。
便利な世の中になりました。
しかし最近は、学生がレポートを書くのにネットで調べて
コピーすることが、問題になっていますね〜
レポートの提出も、ワードで、メール添付となると
簡単に出来てしまいます。
そういう私も、子供に漢字を聞かれても解らない・・・
読めても書けない・・・
全部パソコンが書いてくれるから・・・
---------------------------------------------------------------------
みなさんは、アフィリエイトってご存じでしょうか?
ブログやサイトから、広告収入等を得る手法ですが、
佐藤も、以前から少しずつやってるのです。
なかなか、面白いんですよ
興味のある方は、こちらをご覧下さい。
アフィリエイトの勧め : http://www.msactry.com/aff/
=====================================================================
【Access実践入門】
ホームページ : http://www.msactry.com/
メルマガ用サンプルプログラム
: http://www.msactry.com/mag2/201/index.htm
参考書「Access実践入門」のダウンロード(PDFファイル)
: http://www.msactry.com/down00/downrepo.htm
=====================================================================
【オフィス関連の教材紹介】
http://www.msactry.com/kyex/index.htm
=====================================================================
【発行システム】『まぐまぐ!』 http://www.mag2.com/
配信中止はこちらから http://www.mag2.com/m/0000229312.html
=====================================================================



