コンボボックスのアイテムをダイナミックに追加または削除するには



コンボボックスに表示されるアイテムをアプリケーション実行時に、ダイナミックに追加したり削除するテクニックを解説します。ここで紹介するテクニックは、MyLib.mdaに登録されているクラスライブラリーを使用しますので、事前にダウンロードしておいてください。

  1. Access 97を起動して新規データベースを作成します。

  2. データベースウインドウが表示されたら、モジュールのタブをクリックして新規作成ボタンをクリックします。

  3. メニューのツールから参照設定をクリックして、データベースライブラリー(MyLib.mda)を登録します。

  4. データベースウインドウからフォームのタブをクリックして、新規作成ボタンをクリックします。

  5. フォームが表示されたら、フォーム上にコンボボックスコマンドボタンを作成します。

    Forms_Intermediate_007_fig1
    図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)メソッドを使用してコンボボックスから選択したアイテムを削除しています。

  6. フォームをfrmComboBoxDemoの名称で保存します。

  7. ビューモードに切り替えたら、コンボボックスに任意のアイテムを追加します。アイテムを削除するときは、該当アイテムを選択してRemove Itemのボタンをクリックします。

    Forms_Intermediate_007_fig2
    図2-コンボボックスに任意のアイテムを追加した例
  8. 最後に、フォームを閉じてAccessを終了します。