Microsoft Access Club >VBA物語 >このページ >次頁 < 前項  サイト内検索


VBA記述の際の留意点-1:VBA物語22



さて、いよいよVBAの記述を行っていくわけですが、それにはある共通の考え方があります。これをマスターするだけで、過誤がずいぶん減っていくと思います。実際、Akiraは知らずに数ヶ月ウロウロした経験があります。

VBAには膨大なコード(Msgbox****など)があります。このコードを単に組み合わせるだけです。貴方がすることといえば、新しいプロシージャを作成することはあっ てたも、新しいコードを創造することはありません。
まずは、コードを全て覚えるということを捨てて、何をVBAにさせるのかを考えたほうがマスターへの近道です。

VBAで記述する目的を明確にしておく

何をVBAでさせるのか。このことを明確にしておかないと、きっちりしたVBAを記述することができません。今回は、Aフォーム上からBフォームを開く、という作業をVBAで行うことにします。

どのコードを選択するのか?

この問題が初心者の方にとって一番大きな障害となります。まず、考えている作業を「マクロ」で実現できないか、あるいは途中までマクロで可能か?否かを考えて下さい。

このように見ると、 今回の作業は、マクロの「フォームを開く」アクションで実現ができそうです。マクロの記述は下記のようになります。

マクロは、まず、

  1. アクションを選択します。
  2. 今回は フォームを開くアクション を選択して下さい。
  3. 引数の設定を行います。
    引数を持たない単独のアクションもありますが、まず引数の設定を考えて下さい。
  4. どのフォームを開くのか、フォーム名を指定します。引数の「フォーム」欄に frm_B を選択します。
  5. 「ビュー欄」では、フォームビューを選択します。このフォームビューとは、フォームを通常モードで開くことを意味します。
  6. 「フィルタ名」「Where条件式」「データモード」の各欄は空白にして下さい。
  7. 「ウィンドウモード」欄は、標準 を選択します。

このような引数設定が、一般的なものです。最後に、このマクロを「A_マクロ」として保存します。

どこからBフォームを開けるのか?

次に考えることは、Bフォームをどのようにして開けるのか、言い換えると、上記で作成したマクロを何処で実行するのか、ということです。

試しに、Aフォーム上からBフォームを開けてみましょう。この場合をアクションは下記のように分類することができます。

  • フォームを開いた時、または閉じる時にアクションを実行する。
  • タイマイベントを利用して、特定の時間ごとにアクションを実行する。
  • フォーム上にコマンドボタンを配置して、ボタンがクリックされた時にアクションを実行する。
  • その他・・・・

このように、単にAフォーからBフォームを開く場合でも、開発者の意図するところで沢山のアクションが考えられるんですね。
ここでは、より一般的な、Aフォーム上にコマンドボタンを作成し、そのコマンドボタンが押されるとBフォームが開く設定を取り上げます。

フォームビューでは、下記のようになります。

では、先程作成したマクロをコマンドボタン(名前はcmd_コマンドボタン)の「クリック時イベント」に配置して下さい。

これで、フォームを閉じ再度フォームビューでAフォームを開いてコマンドボタンをクリックしてみて下さい。きっちりと、Bフォームが開く筈です。

このコーナーは、VBA知識の取得を目的としていますから、マクロのままではいけません。 次に、このマクロをVBAに変換してみましょう。Accessでは、この変換機能が組み込まれています。

  1. VBAへの変換を行いたいフォームをデザインビューで開く。
  2. メニューバーの「ツール」の「マクロ」から「フォームマクロをVisiualBasicに変換」をクリックします。

  1. 下記のようなダイアログが現れますので、全てチェックをオンにして下さい。

  1. 自動的に「クリック時」の表示が"A_マクロ"から"プロシージャ"に変わります。
  2. 次に、「…」をクリックして下さい。
  3. VBEが自動的に立ち上がり(Access2000以上のバージョンの場合)、
  4. 下記のようなプロシージャが表示されます。

まとめ

まとめとして、以下のチェックポイントを検討します。

  1. VBAアクションを記述する前に、マクロで代用が可能か検討する。
  2. 運良く、マクロで代用ができるなら、マクロを作成する。
  3. フォームやレポートといったオブジェクトにマクロを配置し、動作確認を行う。
  4. 動作に問題が無ければ、マクロを配置したオブジェクトをデザインビューで開く。
  5. VBA変換機能を用いて、マクロからVBAを作成する。
  6. これで、自動的にVBAが作成される。

他の変換方法

  1. 作成済みのマクロをデータベースウインドウからマクロで選択し、下記のように マクロを Visual Basicに変換 をメニューをクリックします。

  1. 「エラー処理コードを追加」、「コメントを含める」をチェックし変換実行します。
  2. すると、VBE画面が自動的に下記のように開きます。

  1. このプロシージャをコピーします。コピーする部分は、下記のとおりです。

サンプルファイルを流用する

繰り返しお話しているように、コードは独自に創造するのではありませんから「サンプルプロシージャ」をアレンジすることからVBAをマスターしていきましょう。習うよりは慣れろです。

プロシージャ内のコメント

下記のように ' が先頭にあるものは、コメントと呼ばれているものです。VBAは10人のプログラマーがいれば10通りの書き方があると云われています。 後日、他の人が理解しやすいように、「コメント」を書き込んでおきましょう

変換時のコメント

以下のコメントは、マクロをVBAに変換した際のコメントです。削除してもOKです。

'------------------------------------------------------------
' cmd_コマンドボタン_Click
'
'------------------------------------------------------------

コメント記述の位置

 ' が先頭にあればその行の最後までコメントと判断され、プロシージャは実行されません。コメントを書き込む位置は、独立した行に書き込む場合と、最後に書き込む場合とがあります。
※短い行の場合は、後ろに書き込んだ方が見やすいです。

'変数 strMsg を定義します。
Dim strMsg As String

または、

Dim strMsg As String '変数 strMsg を定義します。

と記述します。

エラー記述

AフォームからBフォームを開く場合、万が一、Bフォームが存在していない時はどうなるでしょうか?プログラミングを考えるときには、万が一の状況も想定しないといけません。自分で使う場合は問題ないですが、一般ユーザーの使用を前提してる時は注意が必要です。

上記プロシージャのエラー部分を下記のように書き換えましょう。

   Msgbox Error#

             

    MsgBox "予期せぬErrorが発生しました。管理者へ問い合わせして下さい。" & _
	    vbNewLine & "エラーNo:" & Err.Number & vbNewLine & _
            "エラー内容:" & Err.Description, , "***@***.***"

このエラー処理は、下記のように独自のメッセージとWindowsのエラーbニエラー内容をユーザーに表示させています。

このようにマクロからVBAに変換し、それをアレンジすることで記述時間の短縮と正確性を向上させることができます。

しかし、ユーザーは気まぐれです。このように場面を想像できないでしょうか?
「コマンドボタンをクリックしたけど、やっぱり中止したい」
このような二者択一などの処理は分岐処理と呼ばれています。

フォームを開く、または閉じるときに、管理者再度から
「このまま続けてもいいんですね?」と、問い合わせてをしてあげるわけです。

2003/02/01

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


VBA記述の際の留意点-1:VBA物語22


 

-Microsoft Access Club-