2019年6月17日

【初心者向け】入力フォーム(その3:イベントプロシージャの作成)






前回、入力フォームの作成まで出来ましたので、次にイベントプロシージャの作成を行っていきます。

イベントプロシージャとは、イベントが発生した時の処理のことを言います。

プログラミングの世界では「ボタンが押された」とか「テキストボックスの文字が書き換えられた」といった、何か事が起きたときのことをイベントと呼んでいます。

では、まず最初に「F_名物」フォームの「追加」ボタンのイベントプロシージャから作成していきます。


「F_名物」フォームをデザインビューで開いたら、「追加」ボタンを選択します。



次に、プロパティシートの「イベント」タブの「クリック時」のところの右端にある[...]をクリックします。



すると、「ビルダーの選択」というダイアログが表示されますので、「コードビルダー」を選択して[OK]をクリックします。



そうすると、「Microsoft Visual Basic for Applications」というのが起動してきます。

そして、よく見ると下記のように書かれている箇所があると思います。
Private Sub buttonAppend_Click()

End Sub
これがイベントプロシージャになります。

ここに「追加」ボタンがクリックされた時の処理を書いていきます。

ではここに、入力フォームを表示する処理を記述します。

下記のように書いてください。
Private Sub buttonAppend_Click()

    DoCmd.OpenForm "F_入力", , , , , acDialog, "NewRecord"

End Sub


記述するとこんな感じになります。

先頭部分のDoCmd.OpenFormはフォームを開く命令になります。

次に続く"F_入力"は開く対象となるフォームの名前になります。そして、その次のacDialogというのはダイアログとして開くという意味で、最後の"NewRecord"は、表示するフォームに渡すパラメータになります。今回、このフォームを新規追加のために開きますので「NewRecord」という文字を渡しています。まあ、どんな文字を渡すかは自由なので「a」とか「b」でも構わないのですが、分かりやすくするために「NewRecord」としています。

では、処理が書けたら「F_名物」フォームをフォームビューで開いて「追加」ボタンをクリックしてみてください。


このように表示されれば成功です。



では、入力フォームの右上の×ボタンを押してダイアログを閉じてください。


次に、入力フォーム側のイベントプロシージャを作成していきます。


「F_入力」フォームをデザインビューで開き、



プロパティシートの「イベント」タブの「読み込み時」のところの右端にある[...]をクリックします。

そして、先ほどと同じように「コードビルダー」を選択して[OK]をクリックします。

するとForm_Load()というイベントプロシージャが作られますので、ここに次にように記述します。
Private Sub Form_Load()

    If Me.OpenArgs = "NewRecord" Then
    
        '新規レコード
        DoCmd.GoToRecord , , acNewRec
        
    End If

End Sub
ここでは何を行っているかというと、「F_入力」が表示される時に、渡されたパラメータが「NewRecord」かどうかを判断し、「NewRecord」の場合は新規入力状態にしています。

では、保存したら一旦「F_入力」フォームは閉じ、「F_名物」フォームをフォームビューで開いて「追加」ボタンをクリックしてみてください。



今度はIDのところに(新規)と表示されているのではないでしょうか。これは新規入力状態になっていることを表しています。

では一旦右上の×ボタンで入力フォームを閉じてください。


次に「F_入力」フォームの「閉じる」ボタンのイベントプロシージャを作成します。


先ほどと同じように「閉じる」ボタンを選択したら、プロパティシートの「イベント」タブの「クリック時」のところの右端にある[...]をクリックします。そして、先ほどと同じように「コードビルダー」を選択して[OK]をクリックします。

そして、次のように記述してください。
Private Sub buttonExit_Click()

    DoCmd.Close acForm, Me.Name

End Sub
DoCmd.Close acFormでフォームを閉じるという意味になり、次の対象フォームを閉じる命令になります。ここではMe.Nameで自フォームの名前を取得して指定しています。

ではここで一旦保存したら、「F_名物」フォームから「追加」ボタンで入力フォームを表示し、「閉じる」ボタンでフォームが閉じられるか確認してみてください。

それでは最後に、入力フォームでデータを入力したら名物一覧の表示を更新する処理を入れます。
Private Sub buttonAppend_Click()

    DoCmd.OpenForm "F_入力", , , , , acDialog, "NewRecord"

    Me.Requery

End Sub
最初に作成した「追加」ボタンクリック時のイベントプロシージャにMe.Requeryというのを追加してください。
Meというのは自フォームのことを指していて、それをRequery(再クエリ)、つまりデータの再取得を行って表示しています。

では、試しに何か入力してみます。

名物:喜多方ラーメン
都道府県:福島県

入力出来たら右上の×ボタンでフォームを閉じます。



レコードが更新されていることが分かります。


<関連記事>
【初心者向け】入力フォーム(その1:追加)
【初心者向け】入力フォーム(その2:入力フォームの作成)
【初心者向け】入力フォーム(その3:イベントプロシージャの作成)
【初心者向け】入力フォーム(その4:編集ボタンの作成)
【初心者向け】入力フォーム(その5:削除機能の実装)

スポンサーリンク