見出し画像

7.[PG3]Accessで、データ入力フォーム作成とメール送信してみよう その1

今回から新章です!
Microsoft OfficeのAccessというツールを使う話だと聞いています!

ExcelとAccessの違い

さて、どの程度ひさきさんはAccessについて知っていますか?

師匠

えっとですね、
まずエクセルみたいな感じでデータを扱うテーブルって言うのがあります!
フォームで編集して、レポートで印刷する、って認識です。

おー、すごい。だいたいそんな感じですね。

師匠

Excelは、入力/編集する場所と、データの場所が同一シート上にあるんです。そして、シート上で関数を使って、データの隣のセルに計算結果を出力することもできます。印刷もシート上のレイアウトがそのまま印刷できますね。

Accessは、入力/編集はフォームで行い、データはテーブルに格納します。印刷はレポートです。データごとにシートが分かれるExcelに対して、行為毎に機能がわかれているのがAccessです。

師匠

ふむふむ。でも実は、Excelばっかりつかって、Accessっていまいち使いどころが謎なんですよね・・・。

それぞれ、得意なところ、不得意なところがあります。

Excelは、シート上でほとんどのことができるので、直感的にわかりやすいのが特徴です。小規模な情報をまとめるときや、比較的軽い情報の取り扱いする分には、Excelが楽です。

ただしデータ量が増えると、
・表示が遅くなる、
・データが多すぎて目が滑り、間違えて更新/削除などをしてしまう、
・一人で処理しきれなくなると複数人で作業したいが、Excelは複数人作業に向いていない、
などの問題がでてきて、そこでAccessの出番になります。

師匠

なるほど

Accessは便利に使いこなせば、かなり有益なツールなのですが、Excelと比べると、入力場所とデータの場所が違うため、直観性が少し悪いです。

これはAccessが悪いわけではなく、Excelが直観性に優れすぎている為に起こる現象です。ただExcelもデータ量やシート数が増えたときには、その直感性もなくなってきます。

Excelで10個や20個のシートにあるデータを、数式を使って、むりやり引っ張ってきて、結合したシートを参照するなどでは、作った人間は良いですけど、引き継いだ人間はその解読が大変で、こうなると直感性の優位がなくなります。

Acessはツール特性の部分で、①入力、②データ、③印刷と分割しています。複雑な計算結果を追うのは、Accessでも大変だったりしますが、おおもとのデータを探す際には、ExcelよりはAccessのほうが早く辿り着けるはずです。

師匠

あー、なるほど。一人で作業したり、少ないデータを使う分にはExcelで十分だし、直感性があるから便利なのかぁ。たしかに大容量のデータを使ってないし、複数人でデータメンテナンスとかしてないからAccessを使うタイミングがなかったんですね。納得です。

Excelの特徴まとめ

入力/編集、データ、印刷情報などが、シート上で扱え、直感的にわかりやすい。
データが増え、シートが多くなり、複雑な数式や関数がでてくると直感的でなくなり使いにくくなる。

Accessの特徴まとめ

入力/編集はフォーム、データはテーブル、印刷はレポートと、機能毎に使うオブジェクトが明示的にわけられている。
データが莫大に増えた時でも、保守性が高く、1つのAccessを複数人で同時に開いて作業ができる。

お題1

では、ちょっとお手並み拝見したいので、以下のフォームを作成してもらいましょうか。フォームを作る過程で、テーブルも作成して下さい。本来は別々にきっちり仕様書を作ったほうが良いんですけど、Accessの制作依頼はこんな感じで行われることが多いので、慣れもかねて。

入力規制などは厳しく制限する必要はないです。
フォームは単票でも帳票でも構いません。
私はテンプレート機能を使ったことがないですが、
もし使えそうなものがあれば使っても良いです。

師匠

データ項目は以下の通り。
 ID・オートナンバー型
 MailTo・送信先メールアドレス・50文字・文字型
 MailFrom・送信元メールアドレス・50文字・文字型
 MailCC・CCメールアドレス・50文字・文字型
 MailTitle・件名・50文字・文字型
 MailBody・本文・500文字・文字型
 UserName・名前・50文字・文字型
 SendDateTime・メール送信日時・日付時刻型

お題2

お題1ができたらメール送信用フォームを作成しましょう。
お題1はAccessの機能だけで足りますので、VBAを書かなくても大丈夫だと思いますが、お題2の「メール送信」ボタンを押した後は、VBAで処理を実装しましょう。

師匠

・メール送信用フォームを作成
・「メール送信」ボタンを設置
・SendDateTimeがないレコードを取得し、メールを送信する。
・メール送信時に件名と本文には{名前}を記載があれば、名前を代入する。
・メールを送ったレコードにはSendDateTimeに送信した日時を入力する。
・完了時に「〇件のメール送信しました」とメッセージ表示する。
・可能であれば、内容に不手際があるレコードは飛ばして、メール送信を実施する。

ただし、今回はメール送信部分は私が実装します。メール送信というものは、失敗すると大火傷を負うかねません。メール送信中に無限ループして大量のメールを送信してしまうと、大変なことになってしまいます。

ひさきさんは、メール送信部分をMailSend関数(function)として書いてもらい、実際のメール送信部分は書かなくても大丈夫です。この説明でわからないところがある場合は、実際にお題2をやってるときに質問をして下さい。

※メール送信の際に、認証的なプロトコルは今回はあんまり意識しません。
(こういうことができますというVBAのプログラミング研修なので)

師匠

わかりました!ちょっとまだMailSend関数ってところ、なんとなくしか理解してないですが、やっていきます!

・・・その2に続く!

この記事が気に入ったらサポートをしてみませんか?