2012-09-20 39 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 ==」功能區「我已經添加了一個代碼來檢查功能區是最小化還是最大化。 –

相關問題