はじめに


VBAを使いこなそう

Accessでは、ほとんどの作業をマクロによって処理できますがVBAでないと処理できないものもあります。それは
@独自の関数を作成する場合
A既定のエラーメッセージを変更して表示する場合
Bレコードを順番に操作する場合
Cコードに引数を渡す場合
DWindowsAPIを使う場合

などです。初めてAccessでデータベースを経験するのならば、VBAでのプログラミングを目標にして覚えましょう。


マクロでできることはVBAでもできる

先ずはあなたの作成したデータベースのマクロを「名前を付けて保存」でVBAに変換してみましょう。VBAの勉強はここから始まります。

形式をマクロではなく、モジュールを選択するとVBAで保存されます。

プロシージャ

プロシージャとは実行時に処理される一つの集合体です。プロシージャには、Sub,Function,Propatyがあり、Functionは結果の値を返し、Subは値を返しません。Propatyはフォームやレポートのプロパティを設定すのに使われます。
また、全てのモジュールから呼び出せるPublicプロシージャと特定のモジュールからしか呼び出せないPrivateプロシージャがあります。

例)

Sub FormOpen
'フォームを開くときサイズ、位置を指定する。1cm = 567

   DoCmd.MoveSize 0, 0, 15280, 9700  '上 = 0, 左 = 0, 幅 = 15286, 高さ = 9700  

End Sub
Function Whatday(d As Date)
'変数dに入力された日付から曜日を数字で表示する

  Whatday = WeekdayName(Weekday(d))   ' 1:日曜 2:月曜 3:火曜 4:水曜 ・・・・

End Function

変数の宣言

変数とは関数などに必要な情報を提供するデータです。
数値や文字列など格納するには
変数名 = データ
オブジェクト変数の場合は
Set 変数名 = データ
とします。変数の宣言には Dim ステートメントを使用します。

例)

Function Length(Addr As String) As String
' アラビア数字を漢数字に変換する

Dim i As Integer            '変数 i は数値
Dim Addr_tmp As String      '変数 Addr_tmp は文字
Dim Number As String        '変数 Number は文字
 
For i = 1 To Len(Addr)      '文字列Addrを調べる
   Number = Mid$(Addr, i, 1) '文字列Addrを1文字目から繰り返し以下の文字を調べる
   Select Case Number
    Case "0", "0"     '全角・半角アラビア数字を漢数字に変換する
     Number = "0"
    Case "1", "1"
     Number = "一"
    Case "2", "2"
     Number = "二"
    Case "3", "3"
     Number = "三"
    Case "4", "4"
     Number = "四"
    Case "5", "5"
     Number = "五"
    Case "6", "6"
     Number = "六"
    Case "7", "7"
     Number = "七"
    Case "8", "8"
     Number = "八"
    Case "9", "9"
     Number = "九"
    Case "−", "-"
     Number = ""

End Sub

変数の有効範囲は宣言した場所によって変わります。

Private   宣言モジュール内
Public    すべてのモジュール内
Dim     プロシージャの先頭で宣言した場合はプロシージャ内、モジュールの先頭で宣言した場合はモジュール内
などです。