Как переключить лист Excel, нажав на указанную ячейку c? ВСТО C# - PullRequest
0 голосов
/ 04 мая 2020

Мое намерение состоит в том, чтобы сделать кликабельную «оглавление» на первом листе. Таким образом, изменение листа может быть организовано с помощью

Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets.get_Item(1).select();

Но как я могу выполнить щелчок по ячейке в заданном диапазоне c? Без чрезмерной нагрузки на процесс.

Наконец, я хочу проверить текст ячейки, содержит ли она имя листа. Если да, перейдите на этот лист. Нравится:

string cellText = activeCell.Value2;

foreach (Excel.Worksheet sheet in Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets)
        {
            if (sheet.Name.Equals(cellText)
            {
                Globals.ThisAddIn.Application.ActiveWorkbook.Sheets[sheetName].select();
                break;
            }
        }

1 Ответ

0 голосов
/ 05 мая 2020

Возможно, это не лучшее решение, но на данный момент оно работает для меня.

Поскольку это 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();
            }
        }
    }

Может быть, это кому-нибудь поможет .

...