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


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



前回のVBAの続きをお話しましょう。VBAは奥が深く、いろいろなケースで応用が利きます。但し、残念ながら紙面の都合もあり、このサイトで十分なお話が出来ないと思いますが、ポイントだけでも説明していくつもりです。

 VBAのポイント

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

Private Sub 保存コマンド_Click()

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

    intno = Me.ID ' --- C

    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. Dim は「接頭語」と考えて下さい。これ以外にもいろいろとあるんですが、Dimが一番使用率が高いです。Dim strmsg As String は、変数 strmsg を文字列(String型)と定義するという 構文です。
  2. strmsg を文字列と定義していますので、""(ダブルクォーテーション)で囲んでます。
    VBAでの =  は数学の = とはちょっと異なります。「左辺に右辺を代入する」と解釈して下さい。一例として、a = a + 1 という式がよく使われます。この意味も a に a + 1 を代入する ということです。
  3. strno をVariant型の変数と定義しています(Dim strno As Variant)。
    変数の働きは、以下のとおりです。
  1. 値を代入することができる。
  2. その値を保持することもできる。
  3. その値をVBAで変更できる。
 変数のデータ型

変数を定義しますと、一時的に メモリー領域 にその変数が割り当てられます。「さぁ、来い」てな感じです。なお、主な変数には、

  • ブール型 (Boolean)
  • バイト型 (Byte)
  • 整数型 (Integr)
  • 長整数型 (Lng)
  • 通貨型 (Currency)
  • 単精度浮動小数点数型 (Single)
  • 倍精度浮動小数点数型 (Double)
  • 日付型 (Date)
  • 文字列型 (String) 
  • オブジェクト型 (Object)

があります。

また、データ型を指定しないと、バリアント型 (Variant) のデータ型が既定値として割り当てられます。

Function SamplePro()

    Dim A As String
    Dim B		←---- データ型を記述していないので、Variant型となります。
    Dim C As Integer
    
End Function

話がそれましたが、Variant型 は万能型で、数値であろうが、文字列であろうが、日付であろうが全てのものを格納できるという利点があります。
但し、メモリー領域を最大に使用しますので、ご利用は程々にされた方がいいみたいですが、初めての方はどしどしお使い下さい。

 定数

ちなみに 定数 とは「変更できない数値型や文字列」のことで、これを使うと Visual Basic のコードが読みやすくなり、作成や修正が簡単にできます。一例を挙げますと、

  • 消費税率の0.05を数値を使わないで、 Const Japantax As Single = 0.05  と定義します。
  • 1000*Japantax は 50 になります。後日、税率の変更があった場合でも 0.05 という1箇所の変更だけで事足ります。
Function SamplePro()

    Const Japantax As Single = 0.05
    SamplePro = 1000 * Japantax

End Function

 Meキーワード

プロシージャを記述する場合、Me キーワードを用いると簡潔に記述することができます。例えば、フォーム名が「frm_ABC」、テキストボックス名が「txt_ID」のオブジェクトを プロシージャ内で記述すると下記のようになります。

Me.txt_ID

当然、Formsに続けて記述する方法、つまり、Forms! frm_AAA! txt_ID とした場合と同じ意味になります。

しかし、Meキーワードを用いた方が、プロシージャ処理でスピードアップを図れます。これは、Forms! frm_AAA! と記述すると全てのFormを検索してしまうからです。

次回は、If と Select の条件分岐についてお話したいと思います。では、今日はこの辺で‥。

 

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

 


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


 

-Microsoft Access Club-