Microsoft Access Club >初心者講座 >アンケート管理ソフト >このページ >次頁 - 前項  サイト内検索


Accessの入力フォームのVBAについて_1 : アンケート管理ソフト



前回のコンボボックス如何でしたか。分かり難いでしょう。しかし、この道のりを乗り越えないと前進しませんよ。コンボを制する者はAccessを制す‥。

 テーブルデータ入力

では、そろそろ、「tbl_question_1」〜「tbl_question_5」にデータ入力を行いましょうか。
一般にテーブルへのデータはフォームを介して行いますが、これらテーブルは マスターテーブル でもあるし、そう頻繁に書き換えしないことを前提としているので、直接テーブルにデータ入力を行いましょう。Akiraは、下記のように入力しました。

毎度ながら、出来上がりのフォームはこのような感じですね。

ここからシステム構築らしくなってきます。では、コマンドボタンを2個配置して下さい。下部の方がいいと思います。

2個のコマンドボタンの働きは下記のとおりです。

  • 1個は「入力したデータを他のテーブルに複写するイベント」を実行させます。
  • 他は「入力しているデータをレコード毎削除するイベント」を実行させます。

 入力したデータを他のテーブルに複写するイベントを実行させる方法

このコマンドボタンの「クリック時」イベントに記述しているプロシージャ(命令文)は下記のとおりです。

Private Sub 保存コマンド_Click()

    Dim strmsg As String
    Dim strmsg_2 As String
    Dim strmsg_3 As String
    Dim intno As Variant
    
    strmsg = "お答えいただいた内容を保存します。よろしいですか?"
    strmsg_2 = "お答えいただいていないので、キャンセルとして処理します。"
    strmsg_3 = "お答えが未入力の質問覧がありますので、再度トライ願います。"

    intno = Me.ID

    If Not IsNull(Me.ID) Then
    
        If Not IsNull(Me.性別) And Not IsNull(Me.年齢) And _
            Not IsNull(Me.question_1) And Not IsNull(Me.question_2) And _
            Not IsNull(Me.question_3) And Not IsNull(Me.question_4) And _
            Not IsNull(Me.question_5) Then

            Select Case MsgBox(strmsg, 17, "Akira")

                Case 1
                    '警告メッセージをオフにします。
                    DoCmd.SetWarnings False
                    DoCmd.ApplyFilter , "ID=" & intno
                    DoCmd.OpenQuery "qry_temp_追加", acViewNormal, acReadOnly
                    DoCmd.OpenQuery "qry_temp_削除", acViewNormal, acReadOnly
                    DoCmd.Close acForm, "frm_質問", acSaveNo
                    '警告メッセージをオンに戻します。
                    DoCmd.SetWarnings True

                Case Else
                    End

                End Select

        Else

            MsgBox strmsg_3, 16, "Akira"
            End
 
        End If

    Else

        MsgBox strmsg_2, 16, "Akira"
        DoCmd.Close acForm, "frm_質問", acSaveNo
        DoCmd.OpenForm "frm_main"

    End If

End Sub
考え方
  1. フォームを開けたが、何も入力せず終了する。
  2. 記入漏れがあるまま終了しようとする。
  3. 必要事項を満たして終了する。

ユーザーは気まぐれですから、予想していない行動を起こします。上記の3パターンは、ユーザーが取るであろう行動パターンです。

  • 1の場合、オートナンバーが番号を取っているか否か(Nullの状態)。
  • 2の場合、各項目が空白であるか否か(Nullの状態)。
  • 3の場合、そのまま受け入れる。

IF関数を用いてチェックを行っています。

しかし、ついにVBAが現われましたね。こちらにお越しの方は、何とかAccessを使いこなしたいとお思いのユーザーでしょう。このVBAは、あなた自身のAccessソフトを作成する上でなくてはならないものです。

 VBAの利点

「CDアルバム管理ソフト」は命令文をマクロで作成し、最後にVBAに変換させました。「休暇申請管理ソフト」は最初から割と高度なVBAを使っています。難易度2のこの「アンケート管理ソフト」では、最初からVBAを使います。その理由は、下記のようなものです。

  • 条件分岐を多用した命令文の作成には、マクロが不向きであること。
  • VBAでしか実行できない命令文が存在すること。
  • 後日のバグ修正で、全文が見えるVBAの方が対処し易いこと。

VBAの記述の仕方は、その人によって独自の方法があります。これって皆さんびっくりされるんですね。具体的に云いますと、

  1. 300メートル先にある山田さんの家の前の大きな黄色い袋を燃やしなさい。

このような書き方が一般的ですね。マクロの命令文の流れはまさにこれです。しかし、このように言い換えることもできます。

  • 家は山田さん宅
  • 家までの距離は300メートル
  • 袋は大きくて黄色

とまず、前口上を述べます。次に、

  1. 家の前にある袋を燃やしなさい。

また、違うサンプルとしては

  1. 彼は、「結婚してくれませんか」と言いましたか?

これを下記のように言い換えます。

  • 「結婚してくれませんか」は 愛している と定義(前口上を述べる)します。
  1. 彼は、愛している と言いましたか?

長々とこのようなことを言いましたのは、VBAで 変数 という言葉がよく出てきます。まず、変数を定義して本文を記述していく方法がVBAの本筋です。先の例では、

Dim  i  As String  ' i を文字列型(String)であると定義しています。

i =  "結婚してくれませんか" ' 文字列型(String)の場合文字列を""で囲みます。

Msgbox i ' メッセージボックスを表示させます。

これは、

Msgbox "結婚してくれませんか"

と同一です。

今回は、変数名を i としました。
この変数名は、Access固有の名称(例、Null、Ifなど既に組み込まれているもの)以外は、お好きな名前を付けて下さい。但し、視認性の点から String型 の場合は、str‥ と命名された方が後から分かり易いです。

VBAの解説書をお持ちでない方は、薄い書籍を購入された方がいいですよ。ささ、書店に走って下さい。

 

ページの先頭へ 前ページへ戻る

 


Accessの入力フォームのVBAについて_1 : アンケート管理ソフト


 

-Microsoft Access Club-