Обновление интерфейса ленты после вызова макроса в листе Excel - PullRequest
1 голос
/ 29 ноября 2011

Вот мой сценарий:

  • У меня есть старый проект Excel с макросами, который я импортировал в проект vsto.
  • Я разработал пользовательскую ленту (startFromScratch = true), чтобы она выглядела как приложение диктатора.
  • Я все еще хочу использовать существующий код макроса, поскольку для его перевода потребуется слишком много временивесь код vba в коде c #
  • У меня есть класс, помеченный атрибутом [ComVisible(true)], чтобы я мог вызывать методы vsto из кода vba.

Проблема заключается в том,что я не могу скрыть вкладки, я не могу заставить ленту обновляться.Я могу изменить состояние других элементов управления (например, установить проверенное состояние для CheckBox), но не могу скрыть или отключить свои пользовательские вкладки.

Я пытался PerformLayout(), PerformDynamicLayout() на ленте, ribbon.RibbonUI.Invalidate(), но ничего не работает, вкладка никогда не меняет состояние, хотя в коде я установил ее свойство visible на false.

Что мне нужно сделать, чтобы обновить ленту во время выполнения?


Редактировать:

Я только что попробовал то же самое, экспортировав ленту в xml, и метод Invalidate() работает как положено.Есть ли способ сделать это для ленты, разработанной с помощью визуального редактора?

1 Ответ

1 голос
/ 01 декабря 2011

Я повторил вашу проблему, когда установил свойство StartFromScratch ленты на True, но оно исчезло, когда я установил его на False.Это подтверждается MSDN .

Нельзя изменить видимость пользовательских вкладок во время выполнения, если для этого свойства установлено значение true.

КакВ качестве обходного пути установите StartFromScratch на False, добавьте вкладку для каждой вкладки по умолчанию, задав для ControlIdType каждого значение Office, а для OfficeId каждого - их имя по умолчанию (TabHome, TabFormulas и т. д.), затем установите видимость каждой из этих встроенных вкладок на False.( MSDN предоставил полный список идентификаторов элементов управления для своих приложений Office для удобства использования.)

...