Home Access(アクセス)VBA

企業研修講師派遣のBESTグループ
出張パソコン教室ITスクール
webコンサルティングスクール
パソコンの家庭教師BEST

Q:Accessのプログラムの意味を解説してください。

それではフォームの動作を確認しながら、プログラムの意味を確認します。

【1】作成したAccessのファイルを起動します。

【2】画面が開きますので、オブジェクトの「フォーム」を選択します。

【3】「開く」をクリックし、フォームを実行します。

—3で動いているプログラム—

Option Compare Database ←データベース型で比較。
Option Explicit     ←宣言をしないと変数が使えないようにする。
Dim Res As Variant   ← Resという変数をバリアント型で宣言する。

*変数とは数値、文字、日付などを一時的に記憶しておくための場所です。変数はどんなデータが入るか、使う前に型を宣言する必要があります。バリアント型は何にでも使える便利な型です。変数名は自由に決められます。

ここであまり難しく考えずに、「AccessのVBAでは最初に書く必要がある」という程度でかまいません。

Private Sub Form_Load() ←フォームを読み込んだ時。
Me.AllowAdditions = False ←レコードの追加をできなくする。
Me.AllowDeletions = False ←レコードの削除をできなくする。
DoCmd.SetWarnings False ←Accessからのメッセージを非表示に。
End Sub ←プログラムの終わり。

*このプログラムは、フォームを開いた時点で、レコードの追加や削除はできなくしています。追加や削除はボタンから行うようにしたいためです。

【4】フォームが開いたら、「新規」をクリックします。

【5】最後の行に新規レコードが追加されました。

—4、5で動いているプログラム—

Private Sub 新規_Click() ←新規をクリックした時。
Me.AllowAdditions = True ←レコードの追加をできるようにする。
DoCmd.GoToRecord acDataForm, “***”, acNewRec ←新規レコードへ移動
Me.***.SetFocus ←***へフォーカスを移動する。
End Sub ←プログラムの終わり

【6】下の図のようにデータを入力します。

更新した瞬間に一番下の空白行が消えます。

—この時動いているプログラム—

Private Sub ***_AfterUpdate() ←***を更新した後。
Me.AllowAdditions = False ←レコードの追加をできなくする。
End Sub ←プログラムの終わり

Private Sub ***_AfterUpdate() ←***を更新した後。
Me.AllowAdditions = False ←レコードの追加をできなくする。
End Sub ←プログラムの終わり

つまり、***か***を更新した後は、新規ボタンをクリックしない限り、レコードの追加をできなくしています。

【7】今入力したレコードを選択し、「削除」をクリックします。

【8】削除確認のメッセージボックスが表示されます。

【9】「はい」をクリックすると、選択したレコードが削除されます。

*「いいえ」をクリックすると、何もせずに元のフォームに戻りますので、試してください。

—7、8、9で動いているプログラム—

Private Sub 削除_Click() ←削除をクリックした時。

メッセージボックスを表示する。
OKがクリックされた時は以下の処理を実行する。
If MsgBox(“削除します。よろしいですか?”, vbOKCancel, “確認”) = vbOK Then

Me.AllowDeletions = True ←削除できるようにする。

On Error GoTo err_削除_click ←エラーが起こった時はラベルへ飛ぶ

DoCmd.RunCommand acCmdDeleteRecord ←レコードを削除する。
Me.AllowDeletions = False ←レコードを削除できないようにする。

Else ←Cancelがクリックされた時は以下の処理を実行する。
←何も処理が書かれていないので、何もしない。
End If ←If条件式の終わり

Exit Sub ←プログラムを抜け出す。

err_削除_click: ←エラーが起こった時はここへ来る。
MsgBox Err.Description ←メッセージボックスでエラーの内容を表示する。

End Sub ←プログラムの終わり

*上記のプログラムは、エラーが起こってもシステムを止めないように、エラー処理を加えています。

【10】今度は「印刷」をクリックします。

【11】印刷確認のメッセージボックスが表示されます。

【12】「はい」をクリックすると、印刷プレビューが表示されます。

*「いいえ」をクリックすると、何もせずに元のフォームに戻りますので、試してください。

—10、11、12で動いているプログラム—

Private Sub 印刷_click() ←印刷をクリックした時。

変数Resに、メッセージボックスの値を代入する。
Res = MsgBox(“印刷してよろしいですか?”, vbYesNo, “印刷の確認”)

Resに「はい」が入っていた時は以下の処理を実行する。
If Res = vbYes Then
レポートをプレビューモードで表示する。
DoCmd.OpenReport “***”, acViewPreview
Else←「いいえ」がクリックされた時は以下の処理を実行する。
←何も処理が書かれていないので、何もしない。

End If ←If条件式の終わり

End Sub ←プログラムの終わり

*今回は変数Resに一度値を代入して、それからIf条件式でどのボタンがクリックされたか判断しています。「削除」ボタンの時のように変数を使わないプログラムの書き方もできます。

13.レポートを確認したら「×」をクリックし、レポートを閉じておきます。

いかがでしたか?動作を見ながらプログラムを確認すると、理解しやすいですね。

業務システムの基本となるのは、データの追加、削除、更新、印刷ですので、ここまで学んだことで基本は習得できています。(Accessは更新は自動で行われます。)

実務で使う時にはもうちょっと処理を加えたほうが良いです。例えば1件もレコードが無い時は印刷しないとか。

とりあえずAccessで業務システムを作るということが、どんなものか掴めたのではないでしょうか。
 

Q:Accessプログラムの動作確認について教えてください。

テーブル、レポート、フォーム、VBAが正しく動くか確認してみましょう。

プログラミングにエラーは付きものです。修正すればよいだけですので焦らずに。途中でエラーがでたらVBAを確認しましよう。エラーの大半はスペルミスや、フォームで部品の名前を間違えたために起こります。

———————————————————————-
1.Accessのファイルを起動します。

2.画面が開きますので、オブジェクトの「フォーム」を選択します。

3.「開く」をクリックし、フォームを実行します。

4.フォームが開いたら、「新規」をクリックします。

5.最後の行に新規レコードが追加されました。

6.データを入力します。

*入力する時、次のことを確認してください。
・商品名や単価を確定した瞬間に一番下の空白行が消える。つまり続けて新しいレコードは入力できない。

7.今入力したレコードを選択し、「削除」をクリックします。

8.削除確認のメッセージボックスが表示されます。

9.「はい」をクリックすると、選択したレコードが削除されます。

*「いいえ」をクリックすると、何もせずに元のフォームに戻りますので、試してください。

10.今度は「印刷」をクリックします。

11.印刷確認のメッセージボックスが表示されます。

12.「はい」をクリックすると、印刷プレビューが表示されます。

*「いいえ」をクリックすると、何もせずに元のフォームに戻りますので、試してください。

13.レポートを確認したら「×」をクリックし、レポートを閉じておきます。

上手く動きましたか?これで動作確認を終了します。次は動作とプログラムの関係を見ていきましょう。
 

Q:Accessのプログラミングについて、簡単に説明してください。

Accessはフォームやレポートで、VBA(Visual Basic for Application)を使ってプログラミングができます。これからフォームにプログラムを書く手順を説明します。

*今回の目標は、「プログラムを書いてみる。」ということです。
まずは動かしてみることに集中してください。

初めは動きを見てから、次にプログラムの意味を考えたほうが理解しやすいです。その逆だとかなり苦労します。

この段階では、プログラムが何を意味しているかわからなくてかまいません。そのためあえてプログラムの意味は省略しました。意味は次回にまとめて解説します。

———————————————————————-
1.Accessのファイルを起動します。

2.画面が開きますので、オブジェクトの「フォーム」を選択します。

3.ツールバーから「コード」をクリックします。

4.VBAの画面が開きました。この画面にプログラムを書いていきます。

5.まず図のように先頭に入力します。

6.次に左のコンボボックスから「Form」、右のコンボボックスから「Load」を選択します。

7.するとFormLoad(フォームを読み込んだ時)に動くプログラムを書く場所ができました。Accessのプログラミングでは、「○○を□□した時」というようにコンボボックスで選択します。

8.「Private Sub Form_Load()」から「End Sub」がプログラムの単位です。この2行は自動で表示されますので、その間に3行プログラムを書きます。

書いている途中で、入力を助けるリストが表示されますので選択します。見た目より書く量は少ないと感じるはずです。

9.同じ要領で2つのコンボボックスで場所を作り、以下のようにプログラムを完成させましょう。(英数字や記号は半角、その他は全角です)

Option Compare Database
Option Explicit
Dim Res As Variant

Private Sub Form_Load()

Me.AllowAdditions = False
Me.AllowDeletions = False
DoCmd.SetWarnings False

End Sub

Private Sub 印刷_click()

Res = MsgBox(“印刷してよろしいですか?”, vbYesNo, “印刷の確認”)

If Res = vbYes Then
DoCmd.OpenReport “R01商品マスター”, acViewPreview
Else

End If

End Sub

Private Sub 削除_Click()

If MsgBox(“削除します。よろしいですか?”, vbOKCancel, “確認”) = vbOK Then
Me.AllowDeletions = True

On Error GoTo err_削除_click

DoCmd.RunCommand acCmdDeleteRecord
Me.AllowDeletions = False
Else

End If

Exit Sub

err_削除_click:
MsgBox Err.Description

End Sub

Private Sub 商品名_AfterUpdate()
Me.AllowAdditions = False
End Sub

Private Sub 新規_Click()

Me.AllowAdditions = True
DoCmd.GoToRecord acDataForm, “F01商品マスター”, acNewRec
Me.商品名.SetFocus

End Sub

Private Sub 単価_AfterUpdate()
Me.AllowAdditions = False
End Sub

9.完成したらツールバーの「保存」をクリックして、VBAは閉じておきます。

———————————————————————-

どうですか?プログラムの意味はひとまず置いておいて、書くこと自体はそれほど難しくないですね。ここが大事です。

とりあえず書いてみる→動かしてみる→理解する

次回に動作を確認したあと、プログラムを解説します。
 

Q:アクセス2007VBAの命令に関するプログラミングについて教えてください。

フォームをメニューから呼び出したり、閉じたりボタンをクリックした時に、何をさせるかという命令をマクロを使って記述していきます。

仮定として、以下をを使ってみます。
クエリー:「qu区分削除」
フォーム:「fo区分」「fo区分削除選択」
マクロ:「ma区分」

まず、マクロの「ma区分」のデザインを見てください

マクロ名と条件の列がない場合は、上のメニューの「デザイン」の、マクロ名と条件をクリックしてください。
マクロは、多くの場合フォームから呼び出して実行します。
たとえば、「ma区分.削除選択を開く」というマクロを呼び出すと、アクションの所にかかれている、処理を上から順番に実行していきます。
一連の処理をいくつでも処理させることができます。

マクロには、たくさんの処理があります。今ここで全てを説明できませんし、全てを覚える必要もありません、サンプルプログラムでの使い方を真似して、コピーして使っているうちに慣れてきますし、サンプルで使っていないものも使えるようになるでしょう。

次に、フォーム「fo区分」のデザインを見てください

フォームの下にウィンドが1つありますが、フォームで使ういろんなコントロールの設定をするためのプロパティなので、常に開いておきます。
開いていない場合は、上のメニューから「デザイン」-「ツール」-「プロパティ」で開いてください。

フォーム全体の設定をします。
終了ボタンの1センチ右のあたり(何もない所)をクリックします。
すると、プロパティのウィンドの表題がフォームになります。フォーム全体の設定ができます。
ここで、見るべき項目は次のものです。
[レコードソース]:入力したいテーブル(あるいはクエリー)の名前をコンボボックスから選択
[表題]:ウインドの左上に出る、フォームの表題
後の項目は、変更する必要は無いでしょう。

ここで大事なことは、帳票フォームを新しく作るときは、以前作ってある帳票フォームをコピーして[レコードソース]と[表題]を変更して作るということです。
新規でフォームを作成すると、もっとたくさんの項目を設定していかなければいけません。
[レコードソース]と[表題]を変更した後、入力項目のコントロールソースを変更するだけで、簡単に帳票フォームは新しく作ることができます。

プロパティの下の方に、○○時というのがたくさん並んでいます。
これは、このフォームで起こるイベント(マウスがクリックされる、閉じる、開く等・・・)の項目が並んでいます。これらの項目発生時にどう処理するかということを指定することによって、プログラムが構築されていきます。
全てのコントロール(フォーム、フォームの中の入力コントロール、ボタン等)に内容は少しずつ違いますが各種イベントがあります。
その内容、使い方に関してはサンプルを見ていただければ、だいたい解ると思います。
全てを最初に理解する必要はありませんし、ほとんど使わないようなものもあります。

それでは、フォームに貼ってある、コントロールを見てみましょう。

・ラベルコントロール
フォームヘッダーにある、区分名のところをクリックしてみてください。
プロパティのウィンドの表題がラベルになっています。ラベルのコントロールです。
これは、入力項目が何であるかを教えるための文字を表示するためのコントロールです。
フォームに中に文字を表示するためのものと考えて下さい。
このコントロールのプロパティの見るべき項目は、次のものです。
[標題]:表示したい文字です。
[名前]はAccessが自動で付けてくれますので、そのままでいいです。
他に、色の設定等がありますが、これはプログラムを作る人の好みですので、気に入ったものをいくつか作っておいて、コピー貼り付けで使えば修正する必要はありません。

・テキストボックスコントロール
詳細にある、区分名のところをクリックしてみてください。
プロパティのウィンドの表題がテキストボックスなっています。データが入力され、実際にデータが表示されるコントロールです。
一番よく使われるコントロールです。
このコントロールのプロパティの見るべき項目は、次のものです。
[名前]:コントロールソースと同じにしておいてください。
[コントロールソース]:コンボボックスから選びます
[書式]:ここは、日付、数値などによって様々なものが入ります。サンプルを参照してください。後でたくさん出てきますので、後で確認できます。文字列の場合は特に入力する必要はありません。
[定型入力]:日付の入力の時などに使います。
[規定値]:ここで指定しておくと、入力前から指定したものが入っています。たとえば生年月日の和暦を入力する欄などでは、昭和を規定値にしておくと実際昭和の人が多いですから、コンボボックスから選ばなくても、そのまま通過できて、入力が早くできるといったものです。
[IME入力モード保持]:いいえにいておきましょう
[IME入力モード]:漢字で入力する場合は、ひらがなにしておきます。オンは使わないでください。データベースをバージョンアップした時に、半角カナとかに変わってしまう場合があります。数値入力の場所は、使用不可にしておきます。オフと使用不可の違いは、オフの場合はキーボードから漢字のボタンを押すと漢字が入力出来てしまいますが、使用不可の場合は漢字ボタンに反応しませんので、漢字入力は不可能です。
[ふりがな]:名前を入力したときに、ふりがなの項目に自動でフリガナを転記してくれます。後の説明で出てきます。
[住所入力支援]:郵便番号を入力すると自動で住所が転記されます。次回の住所録のバージョンで追加予定です。
[可視]:ここをいいえにしておくと、デザイン画面でしか見えません。集計用の日付のコントロールで使っています。後の説明で出てきます。
[使用可能]:いいえにすると、見えるけれど、マウスでクリックしても止まらない項目になります。
[編集ロック]:はいにすると、マウスでクリックすると止まりますが編集はできない項目になります。
[タブストップ]:いいえにするとタブキーで移動していっても、止まりません。フォームの詳細の中のボタン(通常の入力では使わないけど、何かを検索するときだけ押されるボタン等)を貼ってある場合等では便利です。マウスでクリックすれば使えます。

他に、色の設定等がありますが、ラベルコントロールと同じで、プログラムを作る人の好みですので、気に入ったものをいくつか作っておいて、コピー貼り付けで使えば修正する必要はありません。

ここにも、イベント発生時の処理を指定する項目があります。
後の説明で出てきます。

・コマンドボタンコントロール
詳細にある、削除のボタンをクリックしてみてください。
プロパティのウィンドの表題がコマンドボタンなっています。
ここでは必要なときだけ、マウスでクリックしてもらいます。したがって、[タブストップ]はいいえになっています。
このコントロールのプロパティの見るべき項目は、次のものです。
[名前][標題]:同じにしておきましょう。(見栄えをよくするために標題の方にスペースを入れたりする場合有り)
フォームフッターの、終了ボタンをクリックしてみてください。
標題に&Xと付いています。これは、Altキーを押したまま、Xのキーボードを押すと、マウスを移動してそこをクリックしなくても、このボタンがクリックされたのと同じ結果になる、いわゆるショートカットキーの設定です。マウスを使わなくても通常の登録がどんどんできるようにするためのものです。

これは、ボタンですので、クリックされたときに、必ず何か処理があるはずです。
削除ボタンの場合、クリック時にマクロの削除確認のフォームを開くように指定してあります。
終了ボタンでは、自分自身のフォームを閉じるマクロが指定されています。
イベントの発生と処理の書き方が、おわかりいただけたでしょうか?

メインメニューで区分登録のボタンがクリックされた時のクリック時に、このフォームを開くマクロが指定されています。
そこで、このフォームが開きます。
データを入力したり、編集したりします。
終了ボタンがクリックされると、このフォームが閉じられて、下にあるメインメニューに戻るといった具合です。