LoginSignup
0
3

More than 5 years have passed since last update.

エクセルでファイルを開いたときに自作のリボンのタブをアクティブにする

Posted at

やりたいこと

エクセルのリボンに自作のタブを追加し、ファイルを開いたときにアクティブなシートに対応したタブをアクティブにしたい。
例)アクティブシートがAの時はタブAを、Bの時はタブBをアクティブにする

結論

スレッドを使って非同期にウェイトをいれた後、対応するタブをアクティブにする

試したこと

関連しそうなイベントとしては、
- ThisWorkbook#Open
- Ribbon#Load
- WorkSheet#Activate
があった。

「WorkSheet#Activate」は、ファイルのオープン時にはそもそも発生しないので除外。
「ThisWorkbook#Open」発生時はリボンがまだ登録されていないのでダメ。
「Ribbon#Load」がよさそうですが、このタイミングでもまだリボンが生成されていないようで失敗。
リボンのLoadが完了したときに発生するイベントがあればいいのだけど、どうもないみたい。

しょうがないので、非同期で、登録が終わったころに目的のタブをアクティブにするようにしたところ、無事動いた。

コード

using System.Threading.Tasks;

namespace MyApp
{
  public partial class MyRibbon
  {
    private void MyRibbon_Load(object sender, RibbonUIEventArgs e)
    {
      ActivateTabAsync();
    }
    private async void ActivateTabAsync()
    {
      // 適当なウェイトかける
      await Task.Delay(500);
      var sheet = (Excel.Worksheet)Globals.ThisWorkbook.ActiveSheet;
      if (sheet.Index == Globals.SheetA.Index)
      {
        RibbonUI.ActivateTab("tabA");
      }
      else if (sheet.Index == Globals.SheetB.Index)
      {
        RibbonUI.ActivateTab("tabB");
      }
    }
  }
}

環境

  • Excel 2010
  • C# 4.0.0.0
  • .NET Framework 4.5.2
0
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
3