Возможно, это не лучшее решение, но на данный момент оно работает для меня.
Поскольку это VSTO Excel AddIn, у меня есть лента. Итак, в ribbon_load () зарегистрируйте событие.
private void Ribbon1_Load(object sender, RibbonUIEventArgs e)
{
Globals.ThisAddIn.Application.SheetSelectionChange += new Excel.AppEvents_SheetSelectionChangeEventHandler(myApplication_SheetSelectionChange);
}
В этом событии я проверяю, в какой ячейке сработало событие и какое содержимое находится внутри ячейки.
private void myApplication_SheetSelectionChange(object Sh, Excel.Range Target)
{
if (((Excel.Worksheet)GetInstance().ActiveSheet).Name.Equals(Statics.NAME_OVERVIEW)) // if sheet overview
{
if (Target.Row > 6 && Target.Column == 9)
{
try
{
string tmp = Target.Value2;
tmp = tmp.Replace("'", "");
if (tmp.StartsWith("="))
{
foreach (Excel.Worksheet sheet in GetInstance().Worksheets)
{
if (sheet.Name.Equals(tmp))
{
sheet.Select(); // jump to sheet
break;
}
}
}
}
catch (Exception)
{ }
}
}
else // all other sheets - jump back to overview
{
if (Target.Row == 42 && Target.Column == 1)
{
((Excel.Worksheet)GetInstance().Sheets[Statics.NAME_OVERVIEW]).Select();
}
}
}
Может быть, это кому-нибудь поможет .