2012-09-20 41 views
7

在Excel 2007中,我们可以右键单击功能区并选择“最小化功能区”&将其最小化。Excel 2007以编程方式最小化功能区但不是菜单栏

我已经试过

Application.ExecuteExcel4Macro("show.toolbar(\"ribbon\",false)"); 

其中隐藏了整个ribbonbut我不想隐瞒整个色带。

我甚至试过

Application.SendKeys("^{F1}", true); 

但有时不能正常工作是不可靠的。

enter image description here

有没有办法使用C#VSTO代码做呢?

我读了很多关于toggleribbon()函数,但无法找到使用它的方法。

编辑: 有办法可以实际找到如果功能区已经最小化。我用

Office.CommandBars cbs = null; 
    cbs = Application.CommandBars; 
    foreach (Office.CommandBar cb in cbs) 
    { 
     if (cb.Name == "Ribbon") 
     { 

     if (cb.Height > 90) 
     { 
      this.Application.ActiveWindow.Activate(); 
      //to get focus on current workbook so that sendkeys will work 
      Application.SendKeys("^{F1}", true); 
      } 

     } 
    } 
+2

+1伟大的问题,如果它的任何帮助MS Access中的等效物是'DoCmd.ShowToolbar“功能区,”acToolbarNo“ – JMK

回答

1

SendKeysCTRL + F1的作品,但它似乎是其执行的计时问题。真正的问题是,您不知道何时在Excel中实际加载功能区以触发该行为。

这段代码似乎对我来说可靠地工作,但它确实取决于您的加载项加载的速度。如果需要,您也可以使用Thread.Sleep()

private void ThisAddIn_Startup(object sender, System.EventArgs e) 
{ 
    Task.Factory.StartNew(() => { 
     //Thread.Sleep(1000); // optional 
     Application.SendKeys("^{F1}"); 
    }, TaskCreationOptions.AttachedToParent); 
} 

See related MSDN forum post regarding Ribbon load timing

+1

您可以使用height属性找出功能区是否最小化。在命令栏上迭代并检查“name ==”功能区“我已经添加了一个代码来检查功能区是最小化还是最大化。 –

相关问题