22190
はじめまして、

VisualStudio2010（VB.NET
FrameWork4.0）MicrosoftOffice2007の組み合わせでExcelアドインを作成しています。

リボンコントロール（`Microsoft.Office.Tools.Ribbon.RibbonGroup`）に対して、を不特定の数のボタン（`Microsoft.Office.Tools.Ribbon.RibbonButton`）を動的に追加して必要に応じて消去したいのですが上手くいきません。

<http://dobon.net/vb/dotnet/control/buttonarray.html>  
上記サイトを参考にしてみたのですがMSNによるとRibbonButtonはクラスではなくインターフェースになっておりNewが出来ませんでした。

Ribbon1.Desinger.vbを開いてみると、

```

    Friend WithEvents Button2 As Microsoft.Office.Tools.Ribbon.RibbonButton
    
```

で定義をして

```

    Me.Group1.Items.Add(Me.Button2)
    
```

でリボンのグループに追加しているように見えました。

そこでリボン上に配置したボタンのイベントに

```

    Dim button03 As Microsoft.Office.Tools.Ribbon.RibbonButton
    button03 = Me.Factory.CreateRibbonButton
    button03.Label = "リ・ボーン"
    Me.Group1.Items.Add(button03)
    
```

と書いた所、`Item.Add`の所で「コレクションは読み取り専用です。」とエラーが出てしまいます。

自分の書いたサンプルはそもそも動的に不特定の数のボタンを追加する仕様ではありませんがまずは1個でも追加できないかと思い書いてみたのですが果たせませんでした。

どなたかご存知の方おられましたらお助けいただけますでしょうか？

よろしくお願いします。
CC BY-SA 3.0
2016-02-16T19:04:58.430
22182
2016-02-17T02:58:18.073
2016-02-16T22:01:52.510
10492
14436
question
vb.net excel
Ribbonコントロールに動的にボタンを追加したい
VSTOのリボンには[読み取り専用になるプロパティ](https://msdn.microsoft.com/ja-
JP/library/vs/alm/bb608623\(v=vs.100\).aspx#ReadOnlyProperties)がいくつか存在します。`Items`自体は記載されていませんが、`Groups`や`Tabs`などの他のコレクションプロパティが指定されているので同様の仕様なのだと思われます。

なのでボタンイベントに応じて項目を増減させたい場合、ボタンの追加は諦めてリンク先に記載のある`Dynamic`プロパティを`True`に設定した`RibbonMenu`で妥協するしかないと思われます。

またボタンの追加タイミングが起動時だけでよいのであれば`Ribbon1`のコンストラクターではまだ読み取り専用となっていないので変更が可能です。

```

    ' 以下のコードをRibbon1.designer.vbからRibbon1.vbに移動する
    Public Sub New()
    
        MyBase.New(Globals.Factory.GetRibbonFactory())
        InitializeComponent()
    
        ' TODO:メニューの変更を追加する
    
    End Sub
    
```
CC BY-SA 3.0
2016-02-17T02:58:18.073
22190
2016-02-17T02:58:18.073
5750
22182
answer