Collection オブジェクトの特定のメンバーを選択するには、Item メソッドを使用します。
Item メソッドは、識別子として、コレクション内の項目の位置を指定する索引番号または項目の名前を表す文字列を必要とします。
Item メソッドはコレクションの既定のメソッドです。コレクションを参照していてメソッド名を指定していないときは、Item メソッドが割り当てられます。次の式は等価です。
(vla-Item layerCollection "ABC")
ThisDrawing.Layers.Item("ABC")
ThisDrawing.Layers("ABC")
次の例は、コレクションを反復して、コレクション内のすべての画層の名前を表示します。
(vl-load-com)
(defun c:Ch2_IterateLayer()
(setq acadObj (vlax-get-acad-object)
doc (vla-get-ActiveDocument acadObj)
layerCollection (vla-get-Layers doc)
msg "")
(vlax-for item layerCollection
(setq msg (strcat msg (vla-get-Name item) "\n"))
)
(alert msg)
)
Sub Ch2_IterateLayer()
' Iterate through the collection
On Error Resume Next
Dim I As Integer
Dim msg As String
msg = ""
For I = 0 To ThisDrawing.Layers.count - 1
msg = msg + ThisDrawing.Layers.Item(I).Name + vbCrLf
Next
MsgBox msg
End Sub
次の例は画層名 "MyLayer" を検索し、見つからない場合はメッセ-ジを表示します。
(vl-load-com)
(defun c:Ch2_FindLayer()
(setq acadObj (vlax-get-acad-object)
doc (vla-get-ActiveDocument acadObj)
layerCollection (vla-get-Layers doc))
(setq ABCLayer (vl-catch-all-apply 'vla-Item (list layerCollection "MyLayer")))
(if (vl-catch-all-error-p ABCLayer)
(alert "The layer 'MyLayer' does not exist.")
)
)
Sub Ch2_FindLayer()
' Use the Item method to find a layer named MyLayer
On Error Resume Next
Dim ABCLayer As AcadLayer
Set ABCLayer = ThisDrawing.Layers("MyLayer")
If Err <> 0 Then
MsgBox "The layer 'MyLayer' does not exist."
End If
End Sub