概要 - 属性定義および属性参照を作成する(VBA/ActiveX)

属性参照を作成するには、まず AddAttribute メソッドを使用してブロックの属性定義を作成する必要があります。

このメソッドでは、属性文字の高さ、Attribute モード、プロンプト文字列、挿入点、タグ文字列、既定の属性値の 6 つの値を指定する必要があります。モードの指定は省略可能です。属性モードは、次の 5 つの定数を入力して指定することができます。

acAttributeModeNormal
各属性の現在のモードを維持することを指定します。
acAttributeModeInvisible
ブロックを挿入する際に、属性値が表示されないように指定します。ATTDISP[属性表示]コマンドにより、非表示モードは無効になります。
acAttributeModeConstant
ブロックを挿入する際に、属性に固定値を割り当てます。
acAttributeModeVerify
ブロックを挿入する際に、属性値が正確かどうか確認するように要求されます。
acAttributeModePreset
現在の属性を含むブロックを挿入する際に、属性を既定値に設定します。このモードでは、値を編集することはできません。

上記のモードは、指定を省略することも、任意の組み合わせ、またはすべてを指定することもできます。モードを組み合わせて指定するには、定数の加算で入力します。たとえば、acAttributeModeInvisible + acAttributeModeConstant と入力することができます。

プロンプト文字列は、属性を含むブロックが挿入された際に表示されます。既定の文字列はタグ文字列です。モードとして acAttributeModeConstant を入力すると、プロンプト文字列は無効になります。

タグ文字列は、属性の各対象を識別します。スペースと感嘆符以外の任意の文字を使用することができます。小文字は自動的に大文字に変更されます。

ブロック内の属性定義の作成後は、InsertBlock メソッドを使用してブロックを挿入するたびに、異なる属性参照の値を指定できます。

属性定義は、作成対象のブロックに関連付けられています。モデル空間またはペーパー空間に関して作成された属性定義は、ブロックには関連付けられません。

属性定義を定義する

次の例では、ブロックを作成し、そのブロックに属性を追加します。次に、ブロックを図面に挿入します。

Sub Ch10_CreatingAnAttribute()
 ' Define 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, "BlockWithAttribute")
 
 ' Add an attribute to the block
 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 = "New Prompt"
 insertionPoint(0) = 5
 insertionPoint(1) = 5
 insertionPoint(2) = 0
 tag = "New Tag"
 value = "New Value"
 Set attributeObj = blockObj.AddAttribute(height, mode, _
 prompt, insertionPoint, tag, value)
 ' Insert the block, creating a block reference
 ' and an attribute reference
 Dim blockRefObj As AcadBlockReference
 insertionPnt(0) = 2
 insertionPnt(1) = 2
 insertionPnt(2) = 0
 Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock _
 (insertionPnt, "BlockWithAttribute", 1#, 1#, 1#, 0)
End Sub