如何通过点击特定单元格来切换Excel表格?VSTO C#

问题描述 投票:0回答:1

我的目的是在第一张工作表上制作一个可点击的 "目录".因此,工作表的变化可以通过以下方式安排

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个回答
0
投票

也许这不是最好的解决方案,但目前对我来说是可行的。

因为它是一个VSTO Excel AddIn,我有一个ribbon。所以,在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();
            }
        }
    }

也许这能帮助到别人。

© www.soinside.com 2019 - 2024. All rights reserved.