この記事では Microsoft Access VBA の中に登場する Subプロシージャ、関数(Functionプロシージャ)、VBE(Visual Basic が使うエディタ)について詳しく紹介します。
Subプロシージャのこと
まず前回の記事でサンプルとして紹介した次のプログラム
Sub access_vba_sample_02_01()
MsgBox "早く家に帰りたい!"
End Sub
について簡単に説明します。
このように「Sub」と「End Sub」で囲まれた領域を Sub プロシージャ といいます。 VBA のプログラムを意味のある実行単位ごとにひと固まりにまとめて記述したものです。
Sub プロシージャ名()
...
End Sub
また
MsgBox “早く家に帰りたい!”
に出てくる MsgBox は ダイアログボックス という小さな画面を表示して MsgBox の次の第一パラメータを表示する VBA の 組み込み関数 です。
(関数が何かについては後ほど説明します)
この場合 “早く家に帰りたい!” という文字列が第一パラメータなのでダイアログボックス にその文字が表示されるんですね。
またこのサンプルのように MsgBox の第一パラメータ以降が省略されている場合、表示されたダイアログボックスの、パラメータ表示のあとにOK ボタンが表示され、マウスでこれをクリックすると ダイアログボックス画面が閉じます。
関数のこと
また前回の記事では紹介していませんでしたが、実は Access には次のように 関数(Function プロシージャ) というものもあるんです。
この記事全体の目標は
- 今の状況から抜け出してもっと前向きな仕事に取り組みたい
- さっさと仕事を切り上げて充実したアフターファイブを過ごしたい
でしたよね。
この目標達成のためにはこの関数を覚えることががとても重要なのでこれもあわせて紹介しておきます。
関数は次のように「Function」と「End Function」で囲んで定義します。
Function 関数名() As Integer
...
関数名 = 0
End Function
何か Subプロシージャ と 関数と似てるけど何が違うの?
そう思いませんか?
それでは2つの Sub プロシージャと1つの 関数からなる以下のサンプルを題材にして実際に遊んでみましょう。
Sub access_vba_sample_03_01()
MsgBox "早く家に帰りたい!"
End Sub
Sub access_vba_sample_03_02()
MsgBox "早くコロナが収束してほしい!"
End Sub
Function Access_VBA_Sample() As Integer
MsgBox "友達とお茶したい!"
Call access_vba_sample_03_02()
Access_VBA_Sample = 0
End Function
ここでの確認のポイントは
- Access の Visual Basic Editor (略称VBE: Visual Basic が使うエディタ)でマウスのカーソル( 縦棒|)を2つの Subプロシージャ と関数 のそれぞれの位置において 実行 ボタンをクリックしたときに何が起きるか
です。つまり VBE の中で以下のそれぞれのポイントにマウスのカーソル( 縦棒|)をおいた状態で 実行 ボタンをクリックしたとき VBE およびこのプログラムがどういう動きをするかに注目してくださいね。
文章だけではわかりにくいので動画で繰り返し確認しましょう。
見づらいときは画面をフルスクリーンにすることをお勧めします。
自分のPCに Access が入っている人はこのサンプルプログラムを実際に自分のPCの Access にコピペして自分でいろいろ遊んでみてくださいね。
この動画はすでにデスクトップに作成済の 02_01.accdb に本記事のプログラムをコピぺするところから始めます。
|
どうですか?
違いがわかりましたか?
ん~
わかんないっ!
こらこら(笑)
あなたがみた感じでは
- カーソルが①の先頭にあるときは 実行 ボタンを押すと上のマクロ 画面が出てきて
access_vba_sample_03_01
access_vba_sample_03_02
という Sub プロシージャを選ばされた!
それからそれぞれを選んだら、それぞれの Sub プロシージャ が
動いた気がする~
- でもそのマクロ 画面には
Access_VBA_Sample
っていう 関数(Function) は出てこなかったよ~
- カーソルが②にあるときは 実行 ボタンを押すとすぐに
access_vba_sample_03_01
という Sub プロシージャが動いた気がする~
- カーソルが③にあるときは 実行 ボタンを押すとすぐに
access_vba_sample_03_02
という Sub プロシージャが動いた気がする~
- カーソルが④にあるときは 実行 ボタンを押すと
Access_VBA_Sample
っていう 関数(Function) が動いた気がする~
- そんでもってついでに
access_vba_sample_03_02
という Sub プロシージャ も動いた気がする~
という感じだったのではないでしょうか。
そうなんです。VBE では
- カーソルが先頭行にある時はプログラムに含まれる Sub プロシージャを
マクロ 画面でユーザに選択させ、選択されたものを実行する。
ここには Function(関数) は含まれない
- カーソルがそれぞれの Sub プロシージャ、Function(関数) 内にあって
それを指定しているときはその Sub プロシージャ、Function(関数)を実行する
という決まりがあるんです。そしてもっと言うと
- Sub プロシージャ は VBE のマクロ画面から呼び出せる
- Function(関数) は VBE のマクロ画面から呼び出せない
ということになっています。
はい?
呼び出せないってどうゆこと?
じゃあ何のために Function(関数) があるのさっ!
さっき 重要 とか言ってたじゃん(泣)!
わたしをもてあそんだの?
いやいやそういう訳では…(汗)
まとめ
いかがでしたか?謎が謎を呼びますね。
引き続き
で Access VBA の次の扉を開けましょう。
さらに違う世界が見えてくるはずです。
Microsoft Access 関連教材は次のリンクからどうぞ。
いつも記事を読んで頂きありがとうございます~
今日の調子はいかがですか?