SETATREF 関数
Microsoft Office Visio 2003 SDK ドキュメント |
SETATREF 関数
ユーザー インターフェイス (UI) またはオートメーションでのアクションの結果、更新された値を別のセルにリダイレクトします。
SETATREF(reference [,set_expression [,ignore_eval]])
reference 必須です。更新された値をリダイレクトするセルに対する参照です。
set_expression オプションです。reference に割り当てられる式です。
ignore_eval オプションです。TRUE の場合、SETATREF 関数は (0) ゼロに評価され、FALSE (既定値) の場合、SETATREF 関数は reference の値に評価されます。
備考
図面ウィンドウ、またはオートメーション メソッドでのユーザー アクションにより、Microsoft Office Visio が SETATREF 数式を含むセルを更新する場合、代わりにその値は SETATREF 数式 (reference) から参照されるセルにリダイレクトされます。SETATREF 関数を含むセルの数式はそのままです。
set_expression が省略される場合、UI またはオートメーションを経由して設定された値が参照先のセルに割り当てられます。省略されない場合は、set_expression の内容が参照先のセルに割り当てられます。これにより、新しい値を変更または変換してから参照先のセルに割り当てることができます。
SETATREF 関数には次の 2 つの関連する関数があります。
SETATREFEXPR 関数。この関数は、set_expression 内に新しい値を指定するのに使用できます。たとえば、set_expression に "SETATREFEXPR()-2 in." と指定すると、SETATREFEXPR の結果を 2 インチ減らすことができます。
SETATREFEVAL 関数。この関数は、set_expression の一部を評価して、その結果で置き換える必要があることを示すのに使用できます。
SETATREF 関数は図面ウィンドウのユーザー アクションによって変更可能なセルで使用できるように設計されています。次のセルがサポートされています。
- [ShapeTransform] セクション - [Width]、[Height]、[Angle]、[PinX]、[PinY] の各セル
- [Text Transform] セクション - [TxtWidth]、[TxtHeight]、[TxtAngle]、[TxtPinX]、[TxtPinY] の各セル
- [1-D Endpoints] セクション - [BeginX]、[BeginY]、[EndX]、[EndY] の各セル
- [Controls] セクション - [Controls.X]、[Controls.Y] の各セル
- [Custom Properties] セクション
SETATREF はセルの値が変化する場所を変更するため、イベントの発生に影響を与えます。セルが SETATREF を含む場合、FormulaChanged イベントおよび CellChanged イベントが発生するのは、SETATREF を含むセルに対してではなく、SETATREF が参照するセルに対してです。SETATREF を含むセルが SETATREFEXPR も含む場合は、SETATREF を含むセルに対しても FormulaChanged イベントが発生します。これは関数パラメータが変更されたためです。
SETATREF 関数についてのその他の重要な点は、以下のとおりです。
- SETATREF 関数は、他の SETATREF 関数に対し、最大 10 の参照を連鎖させることができます。
- セルには、SETATREF 関数以外の式を含めることができます。1 つのセルに SETATREF を複数使用することもできます。
- 図形を接着している場合、Visio は同じシート内で連鎖している SETATREF 参照に従って、参照先のセルに接着する数式を配置します。
- オートメーションは SETATREF 関数を認識して、参照先のセルの連鎖に従います。
- GUARD 同様、SETATREF はシェイプシートの SETF 関数による変更からセルを保護しません。
例 1
図形に [Width] というカスタム プロパティがあり、[Shape Transform] セクションの [Width] セルが次の数式を含むとします。
=SETATREF(Prop.Width)
ユーザーが UI で図形の幅を変更する場合は、新しい値は [ShapeTransform] セクションの [Width] セルではなく、[Prop.Width] セルに割り当てられ、[Width] セルの数式は変更されません。カスタム プロパティを使用して、図形の幅を設定することもできます。
例 2
Visio ソリューションには階層関係を持つ図形が多く、親図形が移動する際には子図形も移動する必要があります。シェイプシートの SETATREF 関数を使用してこの関係を管理する例を次に示します。
次の数式は子図形の [Shape Transform] セクションに含まれます。また、親図形からのオフセット寸法を追跡する [User.DeltaX] および [User.DeltaY] というユーザー セルを定義します。これにより、親図形が移動する際に子図形も移動することができます。また、子図形が移動する場合にも階層関係を保持することができます。
PinX =SETATREF(User.DeltaX, SETATREFEVAL(SETATREFEXPR() - ParentShape!PinX)) + ParentShape!PinX
PinY =SETATREF(User.DeltaY, SETATREFEVAL(SETATREFEXPR() - ParentShape!PinY)) + ParentShape!PinY
子図形が UI を使用して移動する場合は、新しい [PinX] および [PinY] の値が SETATREFEXPR 関数のパラメータとして設定されます。SETATREF 関数は SETATREFEVAL で囲まれた数式を評価し、その結果で [PinX] と [PinY] を置き換えます。次にその結果の数式が SETATREF 関数で参照されるユーザー セル [User.DeltaX] および [User.DeltaY] に割り当てられます。最後に SETATREF ([User.DeltaX] または [User.DeltaY]) の返す値が親図形のピンの位置に追加され、子図形のピンの位置を計算します。