2009年3月31日火曜日

Access でコンボボックスの「リスト外入力時」のメッセージを変更

テーブルの構造とルックアップの設定

「人」テーブルと「都道府県」テーブルがあるとする。

「人」テーブルは「都道府県」を参照。 id は主キーで、CD は候補キー。 id はシステムがタプルを一意に識別するためのもので、CD も一意に識別することができるが人間の都合で変更の可能性がある。

090331-003

 

「都道府県」を参照しているフィールドは、「ルックアップ」で「コンボボックス」が表示されるようにする。

090331-004

 

クエリからフォームを作成

上記のテーブルから下記のクエリを作成。

090331-005

 

これを元にフォームを作る。

このとき、フォームにおける「都道府県」の入力は CD (コード) でしようと考えていたので、「あれ? id を入力しなくていけないかな?どうしよう… (@_@;) 」と思ったけれど、上記の通り「人」テーブルの「都道府県id」フィールドには「ルックアップ」が設定されているので、id の入力をあたかも CD を入力してるかのようにフォームのコンボボックスで入力できる。

 

リスト外入力時のイベント

さて、ここで「都道府県」テーブルにない CD を入力しようとすると、

指定した項目はリストにありません。

とメッセージが表示される。

090331-007

 

このメッセージではユーザにとってわかりにくいので変更したい。

コンボボックスのプロパティより「イベント > リスト外入力時」の VBA を記述する。

Private Sub 都道府県id_NotInList(NewData As String, Response As Integer)
    Response = acDataErrContinue
    MsgBox "存在しない都道府県コードです"
End Sub

引数 Response の設定で先ほどのメッセージを抑制して、新たにメッセージを表示する。

 

参考