コンボボックスに表示されるアイテムをアプリケーション実行時に、ダイナミックに追加したり削除するテクニックを解説します。ここで紹介するテクニックは、MyLib.mdaに登録されているクラスライブラリーを使用しますので、事前にダウンロードしておいてください。
- Access 97を起動して新規データベースを作成します。
- データベースウインドウが表示されたら、モジュールのタブをクリックして新規作成ボタンをクリックします。
- メニューのツールから参照設定をクリックして、データベースライブラリー(MyLib.mda)を登録します。
- データベースウインドウからフォームのタブをクリックして、新規作成ボタンをクリックします。
- フォームが表示されたら、フォーム上にコンボボックスとコマンドボタンを作成します。
 |
| 図1-フォーム上にコンボボックスとコマンドボタンを作成 |
各オブジェクトのプロパティは以下のように設定します。
| Object |
Property |
Setting |
| ComboBox |
Name |
cboItems |
| Limit To List |
Yes |
| Auto Expand |
Yes |
| CommandButton |
Name |
cmdRemove |
| Caption |
Remove Item |
フォームのOn Open, On Closeイベント、コンボボックスのOn
Not in Listイベント、そしてRemove ItemボタンのOn Clickイベントに以下のVBAコードを追加します。
| リスト1-各種イベント処理用のコード |
Dim mobjComboBox As Object
Private Sub cboItems_NotInList(NewData As String, Response As Integer)
If MsgBox("The value " & Chr(34) & _
NewData & Chr(34) & _
" is not on the list. " & _
"Would you like to add it?", _
vbQuestion + vbYesNo, "ComboBox DEMO") _
= vbYes Then
mobjComboBox.AddItem NewData
Response = acDataErrAdded
Else
Response = acDataErrContinue
End If
End Sub
Private Sub cmdRemove_Click()
mobjComboBox.RemoveSelected
' mobjComboBox.RemoveItem (Me!cboItems.ListIndex)
Me!cboItems = Me!cboItems.ItemData(0)
End Sub
Private Sub Form_Close()
Dim varRet As Variant
varRet = CloseMyBox_FS("I", mobjComboBox)
End Sub
Private Sub Form_Open(Cancel As Integer)
Set mobjComboBox = GetMyBox_FS("I")
Set mobjComboBox.Control = Me!cboItems
End Sub
|
フォームのOn Openイベントでは、clsMyBoxのインスタンスを生成してモジュールレベルのメモリ変数(mobjComboBox)に格納します。On
Closeイベントでは、インスタンスをクローズします。
コンボボックスのOn Not in Listイベントでは、アイテムを追加するかどうかのメッセージを表示してYesを選択したとき、AddItemメソッドを使用してアイテムを追加しています。
Remove ItemコマンドのOn Clickイベントでは、RemoveSelected(RemoveItem)メソッドを使用してコンボボックスから選択したアイテムを削除しています。
- フォームをfrmComboBoxDemoの名称で保存します。
- ビューモードに切り替えたら、コンボボックスに任意のアイテムを追加します。アイテムを削除するときは、該当アイテムを選択してRemove
Itemのボタンをクリックします。
 |
| 図2-コンボボックスに任意のアイテムを追加した例 |
- 最後に、フォームを閉じてAccessを終了します。
|