VSTO で Excel のコネクタを使う方法

Visual Studio Tools for Office (VSTO) で Excel のコネクタを使う方法について、サンプルと共に説明します。 VBA でやるのとほぼ同じですが、コネクタの接続部分が多少異なるようです。

インテリセンスやコレクションクラスが便利なので、 C# (.NET) で書く方が簡単ですね。

private void Sheet1_Startup(object sender, System.EventArgs e)
{
    for (int i = 0; i < 10; ++i)
    {
        // 四角1を作成
        Excel.Shape shape1 = Shapes.AddShape(
            Microsoft.Office.Core.MsoAutoShapeType.msoShapeRectangle,
            10, 100 * i, 100, 80);
        shape1.TextFrame.Characters(0, 0).Text = i.ToString();

        // 四角2を作成
        Excel.Shape shape2 = Shapes.AddShape(
            Microsoft.Office.Core.MsoAutoShapeType.msoShapeRectangle,
            200, 100 * i, 100, 80);
        shape2.TextFrame.Characters(0, 0).Text = i.ToString();

        // コネクタルートの自動設定を後で行うため、仮の位置
        const int TEMPORARY_POSITION = 1;

        // コネクタ作成
        Excel.Shape connector = Shapes.AddConnector(
            Microsoft.Office.Core.MsoConnectorType.msoConnectorCurve,
            TEMPORARY_POSITION, TEMPORARY_POSITION, TEMPORARY_POSITION, TEMPORARY_POSITION);

        // 四角1と四角2を接続
        connector.ConnectorFormat.BeginConnect(shape1, TEMPORARY_POSITION);
        connector.ConnectorFormat.EndConnect(shape2, TEMPORARY_POSITION);

        // ルート再設定
        connector.RerouteConnections();
    }
}

一度実行してみるとわかりやすいと思います。細かい内容はコメントを参考にしてください。

参考までに、 VBA で記述した場合は以下のようになります。

Dim shape1 As Shape
Set shape1 = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 10, 10, 100, 80)

Dim shape2 As Shape
Set shape2 = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 200, 10, 100, 80)

With ActiveSheet.Shapes.AddConnector(msoConnectorStraight, 1, 1, 1, 1)

    .ConnectorFormat.BeginConnect shape1, 1
    .ConnectorFormat.EndConnect shape2, 1
    .RerouteConnections
    
End With