Accessには同じような目的のマクロと言うものがあります。
しかし、
この講座ではマクロの解説は行っていません。
VBEを開く方法その1 「Alt」+「F11」キーを押してVBEを開く
すぐにVBEを開きます。
この場合は、
どの
イベント
にも関連付けられていないので、
このようなVBEの画面が表示されるだけです。
VBEを開く方法その2 フォームセレクタ や コントロール を右クリックしてVBEを開く (「常にイベントプロシージャを使用する」にチェックが入っていない場合)
フォームやコントロールを右クリックして表示されるメニューから「イベントのビルド(E)」を選択するとこのような画面が表示されます。
この画面から「コード ビルダー」を選択するとVBEが表示されます。
この場合は、
フォームやクリックしたコントロールの代表的なイベントに対応したVBAコードが挿入されます。
この画面の例では氏名コントロールのクリック時イベントが挿入されています。
フォームセレクタやコントロールを右クリックしてVBEを開く
(「常にイベントプロシージャを使用する」にチェックが入っている場合)
フォームやコントロールを右クリックして表示されるメニューから「イベントのビルド(E)」を選択すると、
すぐにVBEの画面が表示されます。
この場合は、
フォームやクリックしたコントロールの代表的なイベントに対応したVBAコードが挿入されます。
この画面の例では氏名コントロールのクリック時イベントが挿入されています。
VBE画面を見てみましょう。
この画像はは資料を見やすくするためにVBE画面の右と左をカットています。
VBEの画面はこのように④つの部分に別れています。
① ファイル名
ここには現在開いているアクセスファイルのファイル名が表示されています。
ファイル名の後ろには他と混同しないように「(コード)」の文字が書かれています。
② メニュー
他のアプリケーションと同様にここにメニューが表示されます。
③ プロジェクトエクスプローラー
このアクセスファイルに含まれるオブジェクト名をエクスプローラー形式で表示しています。
この部分はメニューの「表示(V)」で変更することができます。
ここにはこのオブジェクトエクスプローラーの他にプロパティウィンドウを表示することができます。
もちろん何も表示しないこともできます。
右上の「X」をクリックして表示しないようにします。
④ コードライディングエリア(Code Writing Area)
ここにVBAコードを記述します。
プロジェクトエクスプローラーを見ると「Form_F住所録一覧表」だけが表示されていますが、
開発を続けるうちにフォームやレポートが増えてきます。
ここには、
プロジェクトエクスプローラーで選択されたフォーム(レポート)のVBAコードだけが表示されます。
何はともあれ、
先ずはVBEのオプションを設定します。
メニューの「ツール(T)」→「オプション(O)」をクリックするとこのような画面が表示されます。
この画面のように全てにチェックが入っていることを確認してください。
インデントは現在3になっていますが、
これは好みで変更してもかまいません。
ここでは「編集」タブだけを表示していますが、
他のタブの設定は既定値のままで構いません。
もう一度この画面を見てください。
まだVBAの記述前の状態ですが、
一番上に
「Option Compare Database」
「Option Explicit」
の2行が既に記述されています。
Option Compare Database
文字列の比較方法を指定します。
通常は画面のように先頭に自動的に挿入されます。
もしも、
挿入されていないときは、
手入力で挿入してください。
詳細は
「MSDNのモジュールに対する文字列比較の設定を指定する【外部サイト】」
を参照してください。
Option Explict
VBAは、
本来変数を定義していなくても問題なく動作します。
例えば金額を入れる変数を「kingaku」として金額計算を行っていた時に、
「kingku」(「a」が抜けている)と記述しても
(処理の結果は正しいものにはなりませんが)
エラーにはならずに正常に動作します。
ここで「Option Explict」を指定すると、
定義していない変数を使用するとエラーになります。
この講座では変数を定義することはありませので、
必ずしもこのオプションを記述する必要はないのですが、
将来のために記述しておくことをお勧めします。
なお、
このオプションはVBEのオプションで
「変数の宣言を矯正する(R)」
にチェックが入っていると自動で挿入されます。
もしも、
挿入されていないときは、
手入力で挿入してください。
これは、
ボタンをクリックした時に実行されるプロシージャです。
「Private Sub コマンド明細表示_Click()」
これがプロシージャの始まりを定義しています。
「End Sub」
プロシージャの終わりを定義しています。
この2行の間にVBAを記述します。
最も簡単なプロシージャの例です。
「MsgBox "明細表示ボタンがクリックされました"」は小窓にメッセージを表示するVBAです。
通常プロシージャ内のVBAの記述はタブなどで少し右に寄せて記述します。
これは視認性の向上が目的なので、
右に寄せなくても問題はありません。
「Private」
これは、
どの場所から呼び出すことを許可するかを規定します。
例えば、
親族の呼び出しだけを許可する。
それとも他人からの呼び出しも許可する、
を規定しています。
「Private」は親族の呼び出しだけを許可しています。
この講座では「Private」だけ使用しますので、
プロシージャの開始時には「Private」を書くとだけ覚えていれば良いでしょう。
「Sub」
プロシージャにはいくつかの種類があり、
これはSubプロシージャであることを意味します。
これも「Sub」と書くとだけ覚えていれば良いでしょう。
「コマンド明細表示」
この部分がプロシージャ名です。
「明細表示」だけでは、
開発中は覚えているかもしれませんが、
期間が空くと何のためのプロシージャなのかわからなくなってしまいます。
そこで、
イベントプロシージャの場合はコントロールの名前を先頭につけるようにしています。
(コントロールの名前はプロパティシートの「その他タブ」の「名前」に入力したものです)
ボタンコントロールを配置したときは「コマンドnn」(nnは連番)と自動的に名付けられます。
Accessの場合は「ボタンnn」ではなく「コマンドnn」と名付けられますので「コマンド明細表示」と名付けています。
(もちろん、「ボタン明細表示」でも何の問題もありません)
このような名前付けのルールを作っておけば、
どのコントロールのイベントプロシージャであるのかが明確になります。
「Click」
これはクリック時イベントであることを示しています。
「()」
呼び出し元から、
このプロシージャに与える引数を記述します。
「(argDate As Date, argMessage As String)」
この様に記述します。
「As Date」や「As String」に関しては「Accessのデータ型」を参照してください。
「argDate」や「argMessage」は引数の名称です。
「argDate」は日付の引数なのですが、
私はこの様に引数の名前の前に「arg」を付けています。
「Date」はVBAのキーワードなので引数の名前につけることはできません。
引数の名前の前に常に「arg」を付けていると、
この様にキーワードと衝突することがないからです。
ちなみに、
argとはargumentの略で引数のことです。
ボタンコントロールをクリックした場合のイベントプロシージャです。
「DoCmd.OpenForm」
DoCmdオブジェクトのOpenFormメソッドを使用することを定義します。
DoCmd.OpenFormと記述し、フォームを呼び出すための命令です。
「docmd.openform」と全て小文字で記述してもAccessはこの様に大文字と小文字にしてくれます。
「F住所録明細」
呼び出すフォームの名前をダブルクォーテーション(”)で囲んで記述します。
変数に代入して、
ここに変数名を記述することもできます。
このときはダブルクォーテーション(”)で囲んではいけません。
「"id = " & Me.id」
F住所録明細は単票形式フォームなので1件のレコードしか表示できません。
そこでどのレコードをそのフォームに表示するのかを指定します。
この講座では、
テーブル定義の際は必ず
主キー
として,
「id」という名称の
オートナンバー型
のフィールドを定義するルールになっています。
主キーということは、
その
「テーブルの中に同じ値を持つレコードは無い」
ということで確実にレコードを特定することができます。
idフィールドの値が「5」である「F住所録明細」を表示場合には、
「"id=5"」と記述すればよいのです。
しかし、
常に「id=5」のレコードを表示しても意味がありません。
「F住所録一覧表」フォームのフォーカスのあたっているレコードを表示したいのです。
「Me.id」と記述することで、
「Me(私)」、
つまり「F住所録一覧表」フォームの
「フォーカスのあたっているレコード内のidフィールドの値」
をここに記述します。
その記述方法が「"id=" & Me.id」となるわけです。
アンパーサンド(&)は文字列を連結します。
つまり「"id="」と「Me.id」の値を連結しています。
「DoCmd.OpenForm "F住所録明細", , , "id = " & Me.id」 を入力する場合を例に入力例を解説します。
docmd.と入力したところです。
この様に、次に入力する候補が表示されます。
openformと入力したいのでo(おー)を押すと
この様にo(おー)を先頭にした場所までリストがスクロールします。
openformは3行目にあるので矢印キーで2行下げてEnterキーを押すか、
openformをクリックすると入力されます。
DoCmd.Openformの後ろに半角スペースを入力すると、
長い英文の説明が出てきました。
太字で書かれている「FormName」が次に入力するものです。
開きたいフォームの名称を入力する箇所なので
「"F住所録明細"」
とフォーム名をダブルクォーテーション(")
で囲んで入力したあとにカンマ(,)
を3回入力します。
この説明文では「OpenForm(FormName, ・・・」と書かれていますが、
OpenFormの後ろには、
かっこ「(」ではなく、
半角スペースを入力します。
今度は「WhereCondition」が太字になっています。
ここで先程の「"id=" & Me.id」を入力します。
これでフォームを開くVBAの記述は完了です。
もう少し説明を追加すると、
カンマを3個入力しましたが、
これはカンマで挟まれた箇所に入力すべきものを省略しているのです。
つまり既定値のままで良いということです。
「WhereCondition」
とはSQLのWhere文のWhereを外したものを入力するので、
「WhereCondition」と書かれているのです。
注
「_Click()」のうしろにあるアポストロフィはコメントの始まりを意味します。
アポストロフィの後ろは行の最後まですべてコメントと見なされます。
注
レコードセレクターダブルクリック時のイベントプロシージャの登録方法は、
フォームセレクタ
をクリックしてフォーム全体を選択した後、
「イベント」タブの「ダブルクリック時」の
ビルドボタン
をクリックします。