デザイナーではなく、XML で作成した VSTO アドイン リボンがあります。ユーザーがアドインが制御する範囲内にいるときにのみ有効にしたいボタンがあります。
リボンがロードされたときに正常に動作するコールバック設定があります。
Ribbon1.cs
コード
public bool refreshButtonState;
public void Ribbon_Load(Office.IRibbonUI ribbonUI)
{
this.ribbon = ribbonUI;
refreshButtonState = false;
ribbon.InvalidateControl("btnRefreshQuery");
}
public bool refreshEnabled(Office.IRibbonControl control)
{
return refreshButtonState;
}
ユーザーが下にいる範囲を監視するために、ワークシートの変更イベントをキャプチャしました。
ThisAddIn.cs
コード
void ThisWorkbook_SheetChange(object ws, Excel.Range rng)
{
//Disable Button state here.
if (rng.ListObject != null)
{
if (rng.ListObject.Name.StartsWith(LO_PREFIX))
{
//Enable Button state here.
}
}
}
Globals.Ribbon.Ribbon1
私が行った調査で何度も提案されているように、リボンを拾うことはできません. XML デザイナを使用しても、この機能は許可されません。
シートのリッスン機能をリボンに移動するのは大変な作業のように思えます。アドインに他の機能を提供するため、とにかくリボンではなくアドインに属しています。明らかな何かが欠けている可能性がありますが、存在するドキュメントはほとんど存在しません。質問者または回答者がそれを理解できないフォーラムの質問の山以外。
TLDR: リボン クラスの一部ではないコードから、プロパティを変更し、RibbonX コントロールを無効にします。