Я успешно реализовал образец Microsoft «Пошаговое руководство: синхронизация настраиваемой панели задач с кнопкой ленты», который можно найти здесь: http://msdn.microsoft.com/en-us/library/bb608590.aspx
Сначала я столкнулся с проблемой, когда панель задач не отображалась, что оказалось результатом некоторого конфликта между моей надстройкой и Microsoft «Пакет инструментов анализа». Как только я отключил Analysis Toolpack, настраиваемая панель задач начала отображаться и скрываться, как и ожидалось.
Затем я написал код для изменения ячеек в выбранном диапазоне, когда пользователь нажимает кнопку. Казалось, что это сработало просто отлично - пока я не открыл другую рабочую тетрадь! Каждое окно книги имеет собственную ленту надстройки, но когда я нажимаю кнопку-переключатель, чтобы открыть / закрыть настраиваемую панель задач, она открывала / закрывала настраиваемую панель задач только для первого созданного окна. Это независимо от того, в каком окне я нажимаю кнопку-переключатель.
Код создает экземпляр объекта CustomTaskPane в ThisAddIn_Startup (как в примере кода). Единственное, что я добавил, - это действие кнопки в UserControl:
using xl = Microsoft.Office.Interop.Excel;
namespace SynchronizeTaskPaneAndRibbon
{
public partial class TaskPaneControl : UserControl
{
public TaskPaneControl()
{
InitializeComponent();
}
private void actionButton1_Click(object sender, EventArgs e)
{
xl.Range selection_rng = Globals.ThisAddIn.Application.Selection;
foreach (xl.Range cell in selection_rng.Cells)
{
if (cell.Value is string)
{
string v = cell.Value;
cell.Value = v + "*";
}
}
}
}
}
Остальной код такой же, как в примере.
Есть ли способ изменить пример, чтобы он работал для открытия нескольких книг? Я хочу, чтобы одна и та же надстройка отображалась в каждом окне книги, с одной и той же лентой и с одной и той же настраиваемой панелью. И, конечно же, чтобы любые действия на ленте (например, нажатие кнопки) направлялись к настраиваемой панели задач, которая отображается в том же окне.