【问题标题】:How to switch Excel sheet by clicking on specific cell? VSTO C#如何通过单击特定单元格来切换 Excel 工作表? VSTO C#
【发布时间】:2020-08-18 13:50:23
【问题描述】:

我的目的是在第一个工作表上制作一个可点击的“目录”。 因此,可以通过

安排工作表更改
Globals.ThisAddIn.Application.ActiveWorkbook.Worksheets.get_Item(1).select();

但是我怎样才能对特定范围内的单元格进行点击操作呢?又不会对过程造成太大压力。

最后我想检查一个单元格的文本是否包含工作表名称。如果是,请跳到该表。喜欢:

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;
            }
        }

【问题讨论】:

  • 也许有人知道解决方案。

标签: c# excel vba event-handling vsto


【解决方案1】:

也许这不是最好的解决方案,但目前它对我有用。

因为它是 VSTO Excel 插件,所以我有一个功能区。所以,在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();
            }
        }
    }

也许这对某人有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 2016-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 2020-07-08
    • 1970-01-01
    相关资源
    最近更新 更多