概要 - 属性情報を書き出す(VBA/ActiveX)

GetAttributes および GetConstantAttributes メソッドを使用して、図面から属性情報を抽出することができます。

GetAttributes メソッドは、ブロックにアタッチされた属性参照の配列を、現在の値とともに返します。GetConstantAttributes メソッドは、ブロックまたは外部参照にアタッチされた定数属性の配列を返します。このメソッドから返される属性は定数属性定義であり、属性参照ではありません。

属性情報を書き出す際にテンプレート ファイルは必要ではなく、属性情報ファイルは作成されません。 属性情報を調べるには、その属性参照の TagString および TextString プロパティを使用して、属性参照の配列を繰り返します。

TagString プロパティは、属性参照の個別の名称を示します。TextString プロパティには属性参照の値が含まれます。

属性参照の情報を得る

次の例では、ブロックを作成し、そのブロックに属性を追加します。次に、ブロックを図面に挿入します。次に、返された属性データを、メッセージ ボックスを使用して表示します。この属性データをブロック参照用に更新してから、返された属性データをもう一度表示します。

Sub Ch10_GettingAttributes()
 ' Create the block
 Dim blockObj As AcadBlock
 Dim insertionPnt(0 To 2) As Double
 insertionPnt(0) = 0
 insertionPnt(1) = 0
 insertionPnt(2) = 0
 Set blockObj = ThisDrawing.Blocks.Add _
 (insertionPnt, "TESTBLOCK")
 
 ' Define the attribute definition
 Dim attributeObj As AcadAttribute
 Dim height As Double
 Dim mode As Long
 Dim prompt As String
 Dim insertionPoint(0 To 2) As Double
 Dim tag As String
 Dim value As String
 height = 1#
 mode = acAttributeModeVerify
 prompt = "Attribute Prompt"
 insertionPoint(0) = 5
 insertionPoint(1) = 5
 insertionPoint(2) = 0
 tag = "Attribute Tag"
 value = "Attribute Value"
 
 ' Create the attribute definition object on the block
 Set attributeObj = blockObj.AddAttribute _
 (height, mode, prompt, _
 insertionPoint, tag, value)
 
 ' Insert the block
 Dim blockRefObj As AcadBlockReference
 insertionPnt(0) = 2
 insertionPnt(1) = 2

 insertionPnt(2) = 0
 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
 (insertionPnt, "TESTBLOCK", 1, 1, 1, 0)
 ZoomAll
 
 ' Get the attributes for the block reference
 Dim varAttributes As Variant
 varAttributes = blockRefObj.GetAttributes
 
 ' Move the attribute tags and values into a
 ' string to be displayed in a Msgbox
 Dim strAttributes As String
 strAttributes = ""
 Dim I As Integer
 For I = LBound(varAttributes) To UBound(varAttributes)
 strAttributes = strAttributes + "  Tag: " + _
 varAttributes(I).TagString + vbCrLf + _
 "   Value: " + varAttributes(I).textString
 Next
 MsgBox "The attributes for blockReference " + _
 blockRefObj.Name & " are: " & vbCrLf _
 & strAttributes
 
 ' Change the value of the attribute
 ' Note: There is no SetAttributes. Once you have the
 ' variant array, you have the objects.
 ' Changing them changes the objects in the drawing.
 varAttributes(0).textString = "NEW VALUE!"
 
 ' Get the attributes again
 Dim newvarAttributes As Variant
 newvarAttributes = blockRefObj.GetAttributes
 
 ' Again, display the tags and values
 strAttributes = ""
 For I = LBound(varAttributes) To UBound(varAttributes)
 strAttributes = strAttributes + "  Tag: " + _
 newvarAttributes(I).TagString + vbCrLf + _
 "   Value: " + newvarAttributes(I).textString
 Next
 MsgBox "The attributes for blockReference " & _
 blockRefObj.Name & " are: " & vbCrLf _
 & strAttributes
End Sub