フォーム上にリストボックスを2個左右に配置して、左側のリストボックスから選択したアイテムを右側のリストボックスに移動させるためのテクニックを解説します。ここで紹介するテクニックを利用すると、選択可能アイテム(Available
Items)と選択されたアイテム(Selected Items)を一目で区別することができます。
- Access 97を起動して新規データベースを作成します。
- データベースウインドウが表示されたら、モジュールのタブをクリックして新規作成ボタンをクリックします。
- メニューのツールから参照設定をクリックして、データベースライブラリー(MyLib.mda)を登録します。
- データベースウインドウからフォームのタブをクリックして、新規作成ボタンをクリックします。
- フォームが表示されたら、フォーム上の左右に2個のリストボックス、アイテム移動用のコマンドボタン4個、そしてアイテムを表示するためのコマンドボタン2個作成します。
 |
| 図1-フォーム上に2個のリストボックスとアイテム移動用のコマンドボタンを作成 |
各オブジェクトのプロパティは以下のように設定します。
| Object |
Property |
Setting |
| ListBox1 |
Name |
lstAvailableItems |
| Multi Select |
Extended |
| Column Count |
1 |
| ListBox2 |
Name |
lstSelectedItems |
| Multi Select |
Extended |
| Column Count |
1 |
| CommandButton1 |
Name |
cmdAddOne |
| Caption |
> |
| CommandButton2 |
Name |
cmdAddAll |
| Caption |
>> |
| CommandButton3 |
Name |
cmdRemoveOne |
| Caption |
< |
| CommandButton4 |
Name |
cmdRemoveAll |
| Caption |
<< |
| CommandButton5 |
Name |
cmdShowAvailabeItems |
| Caption |
Show Available Items |
| CommandButton6 |
Name |
cmdShowSelectedItems |
| Caption |
Show Selected Items |
フォームのOn Open, On Closeイベント、それから各コマンドボタンののOn
Clickイベントに以下のVBAコードを追加します。また、リストボックスからアイテムをダブルクリックしたときにアイテムが移動するように、リストボックスのOn
Dbl ClickイベントにcmdAddOne_Click, cmdRemoveOne_Clickを呼び出すコードを追加します。
各種イベントで使用している、AddItem, RemoveSelected(RemoveItem),
Clear, ListCount, ItemData, Control
などは、MyLib.mdaに登録されているクラスライブラリー(clsMyBox)のメソッドです。
| リスト1-各種イベント処理用コード |
Dim mobjAvailableItems As Object
Dim mobjSelectedItems As Object
Private Sub cmdAddAll_Click()
Dim intItem As Integer
With Me!lstAvailableItems
For intItem = 0 To .ListCount - 1
mobjSelectedItems.AddItem .ItemData(intItem)
Next intItem
End With
mobjAvailableItems.Clear
End Sub
Private Sub cmdAddOne_Click()
Dim varItem As Variant
With Me!lstAvailableItems
For Each varItem In .ItemsSelected
mobjSelectedItems.AddItem .ItemData(varItem)
Next varItem
End With
mobjAvailableItems.RemoveSelected
End Sub
Private Sub cmdRemoveAll_Click()
Dim intItem As Integer
With Me!lstSelectedItems
For intItem = 0 To .ListCount - 1
mobjAvailableItems.AddItem .ItemData(intItem)
Next intItem
End With
mobjSelectedItems.Clear
End Sub
Private Sub cmdRemoveOne_Click()
Dim varItem As Variant
With Me!lstSelectedItems
For Each varItem In .ItemsSelected
mobjAvailableItems.AddItem .ItemData(varItem)
Next varItem
End With
mobjSelectedItems.RemoveSelected
End Sub
Private Sub cmdShowAvailableItems_Click()
Dim varItems As Variant
Dim intItem As Integer
With mobjAvailableItems
For intItem = 1 To .ListCount
varItems = varItems & .ItemData(intItem) & vbCrLf ' 1-based index
Next intItem
End With
' With Me!lstAvailableItems
' For intItem = 0 To .ListCount - 1
' varItems = varItems & .ItemData(intItem) & vbCrLf ' 0-based index
' Next intItem
' End With
MsgBox varItems, vbInformation, "Available Items"
End Sub
Private Sub cmdShowSelectedItems_Click()
Dim varItems As Variant
Dim intItem As Integer
With mobjSelectedItems
For intItem = 1 To .ListCount
varItems = varItems & .ItemData(intItem) & vbCrLf ' 1-based index
Next intItem
End With
' With Me!lstSelectedItems
' For intItem = 0 To .ListCount - 1
' varItems = varItems & .ItemData(intItem) & vbCrLf ' 0-based index
' Next intItem
' End With
MsgBox varItems, vbInformation, "Selected Items"
End Sub
Private Sub Form_Close()
Dim varRet As Variant
varRet = CloseMyBox_FS("A", mobjAvailableItems)
varRet = CloseMyBox_FS("S", mobjSelectedItems)
End Sub
Private Sub Form_Open(Cancel As Integer)
Set mobjAvailableItems = GetMyBox_FS("A")
Set mobjAvailableItems.Control = Me!lstAvailableItems
Set mobjSelectedItems = GetMyBox_FS("S")
Set mobjSelectedItems.Control = Me!lstSelectedItems
With mobjAvailableItems
.AddItem "青森県"
.AddItem "秋田県"
.AddItem "岩手県"
.AddItem "山形県"
.AddItem "茨城県"
.AddItem "福島県"
End With
End Sub
Private Sub lstAvailableItems_DblClick(Cancel As Integer)
cmdAddOne_Click
End Sub
Private Sub lstSelectedItems_DblClick(Cancel As Integer)
cmdRemoveOne_Click
End Sub
|
フォームのOn Openイベントでは、clsMyBoxのインスタンスを生成してモジュールレベルのメモリ変数(mobjAvailableItems,
mobjSelectedItems)に格納します。また、左側のリストボックスにはアイテムとして都道府県名を表示させます。 On
Closeイベントでは、インスタンスをクローズします。
Add One(>)のボタンをクリックしたときは、選択したアイテムを左側のAvailable
Itemsから右側のSelected Itemsに移動します。Add All(>>)のボタンをクリックしたときは、左側の全アイテムを右側に移動します。
Remove One(<), Remove All(<<)のボタンをクリックしたときは、逆に右側のSelected
Itemsから左側のAvailable Itemsに移動させます。
- フォームをfrmMultiSelectListBoxDemoの名称で保存します。
- ビューモードに切り替えたら、左側のリストボックスから任意のアイテムを選択して>のボタンをクリックします。(アイテムをダブルクリックしてもよい)複数のアイテムを選択したら、Show
Itemのボタンをクリックして確認します。
 |
| 図2-左側のリストボックスから複数のアイテムを選択した例 |
|
- 最後に、フォームを閉じてAccessを終了します。
|