たま氏の覚え書き

KNIME・AccessVBA・Swift等、学習したことを覚え書き

AccessVBA_コレクション

コレクションについて解説

コレクションとは

文字列・数値・オブジェクトへの参照を要素として格納することができるオブジェクト
必ず、要素(item)インデックス番号(key)がペアで格納される
※コレクションに格納されている要素のことをメンバとも呼ぶ
インデックス番号は配列と異なり必ず「1」から開始する
配列とどう違うのか、配列とコレクションそれぞれの良さについては以下のページを参照
▼とてもよくわかる解説▼
thom.hateblo.jp
わかりやすくて感動しちゃった…

変数と同様にDimステートメントで宣言した後、
Setステートメントでオブジェクトへの参照を変数に代入してから使用するか
またはDimステートメントのみでその両方を行うか、2つの方法がある


記述方法の解説

記述を構成する順序

宣言方法1
 Dim コレクション名 As Collection
 Set コレクション名 = New Collection
 ※配列とは異なり変数の後のカッコは不要
宣言方法2
 Dim コレクション名 As New Collection

プロパティとメソッド

オブジェクトなだけあってプロパティとメソッドが存在する
両者の使用時に追加する引数は、以下の順で指定のこと
・第一引数 item(追加したい要素)※必須
・第二引数 key(インデックス番号)※省略可
・第三引数 Before / After(名前付き引数)※省略可・省略するとAddで要素を追加する場合、最後尾に追加される

構文

1.プロパティの場合
 Count:素数を返す コレクション名.Count
2.メソッドの場合
 Add:要素を追加する コレクション名.Add item BeforeまたはAfter=:要素数
 Remove:要素を削除する コレクション名.Remove item BeforeまたはAfter=:要素数
 Item:指定した文字列に対応する要素を返す コレクション名.Item item BeforeまたはAfter=:要素数

▼Addメソッドによる要素の追加 記述例▼

Sub Col_test()
  Dim testCol As New Collection '宣言
  testCol.Add "001"
  testCol.Add "tama-shi"
  Debug.Print testCol(1); vbCrLf & testCol(2)
End Sub

▼処理結果▼


オブジェクトを集合させたコレクション

データ型は「Object」で宣言
以下のコレクションはApplicationオブジェクトのメンバであるため
「Application.コレクション」と指定するのが本来の形だがコレクション名のみ記載でも問題ない

・Forms / Reports:開いている全フォームまたは全レポート
・Printers:使用可能な全プリンタ
・Me.Controls:今いるフォームまたはレポートの中の全コントロール
・CurrentProject.AllForms / CurrentProject.AllReports: データベースのすべてのフォーム/レポート
 ※AllFormsオブジェクトのインデックスは0から始まるとのこと、名前で指定したほうが確実

▼Applicationオブジェクトのコレクション 記述例▼

'あるフォーム内にボタン「btn1」とラベル「lbl1」が設置してあるとして…
Private Sub btn1_Click()
 Dim obj as Object
 For Each obj In Printers
  Me.lbl1.caption = Me.lbl1.Value & obj.DeviceName
 Next
End Sub