当VSTO代码在Excel 2007中创建列表对象并应用表格样式时,“表格工具/设计”选项卡将自动激活。然后,当用户选择非表格单元格时,默认情况下将激活“主页”选项卡。是否有办法抑制此行为或将活动选项卡重置为启动该操作的自定义选项卡?我想要的是自定义功能区在创建表的操作后可见。
发布于 2012-02-07 04:54:00
我在another post中也提供了同样的答案。
在VSTO2010中,添加了以编程方式切换所选选项卡的功能。关于它的Norm Estabrook blogged。
this.RibbonUI.ActivateTabMso("TabAddIns");
因此,虽然没有可以锁定的事件,但至少您可以切换选定的选项卡。例如,我将使用工作表选择事件;当用户在我的工作簿的不同工作表之间切换时,我将更改他们选择的选项卡。每张图纸将对应于不同的功能区选项卡。
如果将此事件与工作表SelectionChanged事件配对,则可以确保在它们更改所选单元格之后将它们带回相应的选项卡(而不是TabHome)。
发布于 2010-01-21 22:36:28
我不认为你会认为这是一个“答案”,但我能找到的最好的事情是有人在MSDN上建议我给功能区分配一个键盘快捷键,然后当我假设用户需要看到功能区时使用Application.SendKeys来选择它(在我创建初始表之后的启动时,等等)。
祝你好运,我希望你能找到一个更好的答案--我会很乐意在这种情况下更新我的应用程序!
发布于 2015-01-19 23:23:57
对于所有需要支持Office2007的人来说(像我一样)。这是一个适用于Office2007的(丑陋的,但工作的)解决方案:
发送此键
希望这能帮助到别人。问候你,约尔格
代码:
public void FocusMyCustomRibbonTab()
{
if (IsExcel2007())
{
Globals.Ribbons.GetRibbon<MyRibbon>().tabMyRibbonTab.KeyTip = "GGG";
//Excel 2007: Must send "ALT" key combination to activate tab, here "GGG"
SendKeys.Send("%");
SendKeys.Send("{G}");
SendKeys.Send("{G}");
SendKeys.Send("{G}");
SendKeys.Send("%");
}
else
{
//Excel 2010 or higher: Build in way to activate tab
if (this.ribbon.RibbonUI != null)
{
this.ribbon.RibbonUI.ActivateTab("MY_RIBBON_TAB_NAME");
}
}
}
public static bool IsExcel2007()
{
return (Globals.ThisAddIn.Application.Version.StartsWith("12"));
}https://stackoverflow.com/questions/2008359
复制相似问题